今天尝试用java.mail.jar来实现Java程序发送邮件的功能,遇到一些问题:
一、当使用QQ邮箱向网易邮箱发邮件时:
问题1:530错误,需要建立安全连接,报错如下:
javax.mail.AuthenticationFailedException: 530 Error: A secure connection is requiered(such as ssl). More information at http://service.mail.qq.com/cgi-bin/help?id=28
解决:我在原来的初始化代码中加上SSL相关代码即可解决此错误,如下前四句代码:
private void init(String name, String pass, String smtpHostName) throws GeneralSecurityException{
//开启ssl加密,如果没有ssl加密,会报530错误
MailSSLSocketFactory sf = new MailSSLSocketFactory();
sf.setTrustAllHosts(true);
prop.put("mail.smtp.ssl.enable", "true");
prop.put("mail.smtp.ssl.socketFactory", sf);
prop.setProperty("mail.smtp.auth", "true");
prop.setProperty("mail.smtp.host", smtpHostName);
authticator = new MailAuthticator(name, pass);
session = Session.getInstance(prop, authticator);
}
问题2:535错误,身份认证失败。报错如下:
javax.mail.AuthenticationFailedException: 535 Error: Authentication failed: More information at http://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1001256
原因:我用QQ邮箱的密码作为发送者认证密码,其实这里应该要用腾讯邮箱给的授权码。
解决:我的具体操作如下:
登陆我的QQ邮箱---设置---账户,找到POP3/IMAP.....,我暂时是将前两项服务开启,开启时需要验证,验证成功就可以获得授权码了,然后用授权码替代QQ邮箱的密码即可解决此错误。ps:因为我这里开启了两个服务,所以得到了两个授权码,我试过了用任意一个都可以。
ps:我在遇到这个问题2后,看到网上有在人说要把服务器改成:smtp.exmail.qq.com,我的之前是smtp.qq.com。所以我就改成了smtp.exmail.qq.com,但问题并没有解决。我最后是在smtp.qq.com的配置下,进行上面的步骤才成功的。成功之后我又改成smtp.exmail.qq.com试了一下,发现还是报535错误。所以最后我的是smtp.qq.com
二、用网易邮箱向QQ邮箱发送邮件时:
1、即使不加上SSL安全连接那四句代码,也能成功发送
2、也需要用授权码代替发送者的密码,授权码的获取过程与QQ邮箱的类似:登陆网易邮箱--设置--POP3/SMTP/IMAP--开启相关服务--验证--获取认证码。注意网易的认证码是自己设置的,而QQ邮箱的则是它自己生成的。