最近有一个项目需要支持 SSL的JavaMail收发邮件. 经过一些调查, 把使用SSL的JavaMail方法总结如下.
JavaMail提供商自身缺乏对SSL连接的支持, 所以必须使用JSSE API来支持SSL连接. 下面就是如何使用JSSE API来连接POP3/IMAP/NNTP等mail存储提供商.
以下的代码需要运行在J2SE1.4.x或 者以上版本.
首先, 需要把JSSE的安全provider注册到当前虚拟机的环境下, 有两种方法:
一、修改Java 本地安全文件
<JAVA_HOME>/jre/lib/security/java.security
二、动态的 添加security provider
然后, 需要使用JSSE的SSL socket factory来取代默认的socket factory. 取代的办法就是通过设置JavaMail的一些缺省属性来达到这一点.
mail.<protocol>.socketFactory.class
mail.<protocol>.socketFactory.fallback
mail.<protocol>.socketFactory.port
mail.<protocol>.timeout
下 面的代码就是替换不同协议的socket factory.
如果我们希望JavaMail只处理SSL的连接, 对于非SSL的连接不做处理, 那么我们最好设置fallback为false.