点击进去,会发现是关于第三方客户端设置SSL加密的流程图,但是我们可以知道我们出错的原因是QQ邮箱发送或者接收邮件进行SSL加密。所以我就百度了一下,只需要加这四行代码就搞定了
代码
1 //QQ邮箱的SSL加密。 2 MailSSLSocketFactory sf = new MailSSLSocketFactory(); 3 sf.setTrustAllHosts(true); 4 props.put("mail.smtp.ssl.enable", "true"); 5 props.put("mail.smtp.ssl.socketFactory", sf);
mail.jar中其实已经封装了SSL加密的算法,只需要拿出来用即可。
完整代码
1 package javamail; 2 3 import java.security.GeneralSecurityException; 4 import java.util.Properties; 5 6 import javax.mail.Authenticator; 7 import javax.mail.Message; 8 import javax.mail.MessagingException; 9 import javax.mail.PasswordAuthentication; 10 import javax.mail.Session; 11 import javax.mail.Transport; 12 import javax.mail.Message.RecipientType; 13 import javax.mail.internet.AddressException; 14 import javax.mail.internet.InternetAddress; 15 import javax.mail.internet.MimeMessage; 16 17 import com.sun.mail.util.MailSSLSocketFactory; 18 19 public class QQMailTest { 20 21 public static void main(String[] args) throws AddressException, MessagingException, GeneralSecurityException { 22 23 //0.5,props和authenticator参数 24 Properties props = new Properties(); 25 props.setProperty("mail.host", "smtp.qq.com"); 26 props.setProperty("mail.smtp.auth", "true"); 27 28 //QQ邮箱的SSL加密。 29 MailSSLSocketFactory sf = new MailSSLSocketFactory(); 30 sf.setTrustAllHosts(true); 31 props.put("mail.smtp.ssl.enable", "true"); 32 props.put("mail.smtp.ssl.socketFactory", sf); 33 34 //authenticator参数,登录自己的邮箱帐号密码, 35 Authenticator authenticator = new Authenticator() { 36 @Override 37 public PasswordAuthentication getPasswordAuthentication() { 38 /** 39 * 注意,QQ邮箱的规则是如果不是由腾讯的网页或者客户端打开登录的话,在其他任何地方 40 *登录邮箱,密码必须使用授权码,授权码下面会讲解,vlyvawibbsribgee 41 *xxxxxxx:自己的QQ邮箱登录帐号,也就是qq号 42 *yyyyyyy:密码,使用授权码登录,而不能使用原始的QQ密码 43 */ 44 return new PasswordAuthentication("qq邮箱帐号","授权码"); 45 } 46 }; 47 //1、连接 48 /** 49 * props 50 * 连接配置信息,邮件服务器的地址,是否进行权限验证 51 * authenticator 52 * 权限验证,也就是帐号密码验证 53 * 所以需要先配置这两个参数 54 */ 55 Session session = Session.getDefaultInstance(props, authenticator); 56 57 //2、发送的内容对象Mesage 58 Message message = new MimeMessage(session); 59 //2.1、发件人是谁 60 message.setFrom(new InternetAddress("526745683@qq.com")); 61 // 2.2 , to:收件人 ; cc:抄送 ; bcc :暗送. 62 /** 63 * 收件人是谁? 64 * 第一个参数: 65 * RecipientType.TO 代表收件人 66 * RecipientType.CC 抄送 67 * RecipientType.BCC 暗送 68 * 比如A要给B发邮件,但是A觉得有必要给要让C也看看其内容,就在给B发邮件时, 69 * 将邮件内容抄送给C,那么C也能看到其内容了,但是B也能知道A给C抄送过该封邮件 70 * 而如果是暗送(密送)给C的话,那么B就不知道A给C发送过该封邮件。 71 * 第二个参数 72 * 收件人的地址,或者是一个Address[],用来装抄送或者暗送人的名单。或者用来群发。 73 */ 74 message.setRecipient(RecipientType.TO, new InternetAddress("收件人的邮箱地址 xxx@qq.com")); 75 // 2.3 主题(标题) 76 message.setSubject("hello"); 77 // 2.4 正文 78 String str = "苦水润喉: <br/>" 79 "hah<br/>"; 80 message.setContent(str, "text/html;charset=UTF-8"); 81 //3、发送 82 Transport.send(message); 83 } 84 85 }
2.4、总结
上面使用QQ邮箱和163邮箱发送邮件, 其他的一些邮箱服务器,应该也类似,就算有也是一些细微的区别,就好比上面QQ邮箱需要使用SSL加密,而163不需要一样,遇到错误可以百度自己解决一下。然后必须注明一点,上面的发送邮件的前提是,必须要联网,如果不能联网,那就不能够成功发送邮件,并且会报异常,一看这图,就应该明白为什么需要连网,因为不连网,我们连服务器地址都解析不出,就更不能让邮件传送了。
就怕有些人不能连网,那么就不能判断自己编写的代码是否正确,也不能体验到这种能够自己发送邮件的的感觉了。所以下面就介绍在本机上安装邮箱服务器和客户端,那么就不用连网就能够收发邮件了。
三、安装邮箱服务器和客户端
3.1、邮箱服务器和客户端的类型
邮箱服务器:eyoumailserverstup.exe 下载地址可以百度一下,CSDN论坛上也有该资源
客户端:Foxmail_7.0.exe 跟上面同理
3.2、安装邮箱服务器
安装完后会出现一个