今天尝试用java.mail.jar来实现Java程序发送邮件的功能,遇到一些问题:java
1、当使用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=28session
解决:我在原来的初始化代码中加上SSL相关代码便可解决此错误,以下前四句代码:socket
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错误,身份认证失败。报错以下:ui
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邮箱的密码做为发送者认证密码,其实这里应该要用腾讯邮箱给的受权码。spa
解决:个人具体操做以下:code
登录个人QQ邮箱---设置---帐户,找到POP3/IMAP.....,我暂时是将前两项服务开启,开启时须要验证,验证成功就能够得到受权码了,而后用受权码替代QQ邮箱的密码便可解决此错误。ps:由于我这里开启了两个服务,因此获得了两个受权码,我试过了用任意一个均可以。orm
ps:我在遇到这个问题2后,看到网上有在人说要把服务器改为:smtp.exmail.qq.com,个人以前是smtp.qq.com。因此我就改为了smtp.exmail.qq.com,但问题并无解决。我最后是在smtp.qq.com的配置下,进行上面的步骤才成功的。成功以后我又改为smtp.exmail.qq.com试了一下,发现仍是报535错误。因此最后个人是smtp.qq.com
2、用网易邮箱向QQ邮箱发送邮件时:
一、即便不加上SSL安全链接那四句代码,也能成功发送
二、也须要用受权码代替发送者的密码,受权码的获取过程与QQ邮箱的相似:登录网易邮箱--设置--POP3/SMTP/IMAP--开启相关服务--验证--获取认证码。注意网易的认证码是本身设置的,而QQ邮箱的则是它本身生成的。