您的位置:首页 > 编程语言 > Java开发

spring mail发送TLS邮件

2016-04-30 15:47 381 查看
使用spring mail发送邮件相当简单,归结起来是一段代码+一段配置

<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="host" value="${mail.host}" />
<property name="port" value="${mail.port}" />
<property name="username" value="${mail.username}" />
<property name="password" value="${mail.password}" />
</bean>
@Autowired
protected JavaMailSender mailSender;

public SendResult send(List<String> targets, String title, String content) {

SendResult result = new SendResult(false);
MimeMessage mimeMsg;
try {
mimeMsg = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMsg, true, "utf-8");
helper.setTo(targets.toArray(new String[targets.size()]));
helper.setSubject(title);
helper.setText(content, true);
helper.setFrom(mailUserName);
mailSender.send(mimeMsg);
} catch (Exception e) {
LogUtil.error(logger, e, "send email error: " + e.getMessage());
}
return result;
}


近日遇到了需要TLS加密才能发送SMTP的情况

最初遇到如下问题“PKIX path building failed“,查阅的方法需要先用生成证书,将生成的证书拷贝到$JAVA_HOME/jre/lib/security的路径。

单这种方式比较麻烦,而需要TLS加密发送,本质上就是本地要支持证书,因此只需要将java mail配置为所有证书都默认放过而不做验证,发送前添加如下代码:

if (openTlsAuth) {
JavaMailSenderImpl impl = (JavaMailSenderImpl) mailSender;
MailSSLSocketFactory sf = new MailSSLSocketFactory();
sf.setTrustAllHosts(true);
impl.getJavaMailProperties().put("mail.smtp.ssl.socketFactory", sf);
impl.getJavaMailProperties().put("mail.smtp.auth", true);
impl.getJavaMailProperties().put("mail.smtp.starttls.enable", true);
impl.getJavaMailProperties().put("mail.smtp.ssl.trust", "*");
}




内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: