问题描述
hutool.version:5.7.9
mail.version:1.5.0-b01
利用hutool配置发送邮件,ssl认证也打开了,jdk下面的jre/lib/security/java.security文件中相关的ssl信息也去掉了,但是还是报错:
MessagingException: Could not connect to SMTP host: mail.seis.ac.cn, port: 465
网上大部分解决办法就是上面两种,下面分享第三种情况:
解决方案:
提示:MailSSLSocketFactory sf = new MailSSLSocketFactory();
sf.setTrustAllHosts(true);
account.setCustomProperty(“mail.smtp.ssl.socketFactory”,sf);
// 完整代码
public static void send(EmailVo emailVo, EmailConfig emailConfig){
if(emailConfig.getId() == null){
throw new BadRequestException("请先配置,再操作");
} // 封装
MailAccount account = new MailAccount();
account.setHost(emailConfig.getHost());
account.setUser(emailConfig.getUser());
account.setPass(emailConfig.getPass());
account.setPort(Integer.parseInt(emailConfig.getPort()));
account.setFrom(emailConfig.getFromUser()+"<"+emailConfig.getFromUser()+">");
//启动调试
account.setDebug(true);
// 开启SSL安全连接
account.setAuth(true);
account.setSslEnable(true);
String content = emailVo.getContent();
// 发送
try {
MailSSLSocketFactory sf = new MailSSLSocketFactory();
sf.setTrustAllHosts(true);
account.setCustomProperty("mail.smtp.ssl.socketFactory",sf);
//指定实现javax.net.SocketFactory接口的类的名称,这个类将被用于创建SMTP的套接字
account.setSocketFactoryClass("javax.net.ssl.SSLSocketFactory");
//如果设置为true,未能创建一个套接字使用指定的套接字工厂类将导致使用java.net.Socket创建的套接字类, 默认值为true
account.setSocketFactoryFallback(true);
// 指定的端口连接到在使用指定的套接字工厂。如果没有设置,将使用默认端口456
account.setSocketFactoryPort(465);
int size = emailVo.getTos().size();
Mail mail = Mail.create(account)
.setTos(emailVo.getTos().toArray(new String[size]))
.setTitle(emailVo.getSubject())
.setContent(content)
.setHtml(true)
//关闭session
.setUseGlobalSession(false);
if (emailVo.getFile() != null)
mail.setFiles(emailVo.getFile());
mail.send();
}catch (Exception e){
System.out.println(e.getMessage());
throw new RuntimeException(e.getMessage());
}
}