解决JavaMail发送邮件异常问题

如果您正在使用javax.mail尝试发送email给用户,那么很有可能遇上如下这几种异常:
javax.mail.NoSuchProviderException: smtp
java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream
java.lang.NoClassDefFoundError: javax/activation/DataSource

这些异常极有可能是因为开发环境的Java EE、JDK(JRE)版本差别造成的。
我使用的开发环境是MyEclipse5.0、Java EE5、JDK(JRE)6,编译无错后执行发送邮件测试时直接命中第一个异常。

具体是什么问题呢?有两个关键点:
1.Java EE5中的javax.mail版本过旧的问题(据说1.3的javax.mail本身存在bug)
2.Java EE5中javax.activation与JDK(JRE)6中javax.activation的冲突

解决思路:
删除javaEE5中老旧的javax.mail以及重复的javax.activation,
分别使用独立的javax.mail 1.4和已经存在于JRE6中的javax.activation。

解决方法:
1.用WinRAR打开您的javaEE5 lib的jar(javaee.jar),删除其中的mail、activation包(请先备份原文件),两个人包必须全部删除

2.由于JDK(JRE)6中已经含有javax.activation,所以无需下载。

3.到sun.com下载最新版本的javax.mail包 (JavaMail 1.4.2 )
http://java.sun.com/products/javamail/downloads/index.html
包中包含源代码,我们只需要mail.jar,注意是mail.jar(此jar包在解压后的文件夹根目录下) 而不是 mailapi.jar(此jar 包在解压后的根文件夹下的lib 目录下)

4.最后将下载的mail.jar放在你项目的  WEB-INF/lib/,或者部署在你的tomcat即可。

用的是163邮箱,授权已开,在使用JavaMail邮件,每天开始的几封能正常发送出去,后面会出现以下异常: ![图片说明](https://img-ask.csdn.net/upload/201904/04/1554349453_507162.png) 源码是: ``` package test.ceshi; import java.io.File; import java.io.IOException; import java.util.Properties; import javax.mail.Authenticator; import javax.mail.Message.RecipientType; import javax.mail.MessagingException; import javax.mail.PasswordAuthentication; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.AddressException; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart; public class MailTest { public static void main(String[] args) throws AddressException, MessagingException, IOException { Properties pro = new Properties(); pro.put("mail.smtp.host", "smtp.163.com"); pro.put("mail.smtp.auth", "true"); //pro.setProperty("mail.smtp.starttls.enable", "true"); Authenticator auth = new Authenticator() { @Override protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication("用户名", "授权码"); } }; Session session = Session.getInstance(pro, auth); MimeMessage msg = new MimeMessage(session); msg.setFrom(new InternetAddress("我的邮箱")); msg.setRecipients(RecipientType.TO, "发送给的邮箱"); msg.setSubject("我自己的邮件"); msg.setContent("我的邮件正文", "text/html;charset=utf-8"); Transport.send(msg); } } ``` 上网查了方法把上述注释打开则会出现以下异常: ![图片说明](https://img-ask.csdn.net/upload/201904/04/1554350095_848860.png) 各种方法都试过了还是解决不了,求大神解答,谢谢!
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页