1.首先说明一下场景:
邮件服务器为:腾讯的企业邮箱服务器,
有文档说明:http://service.exmail.qq.com/cgi-bin/help?id=28&no=1000585&subtype=1,
发件箱/收件箱同为注册的企业邮箱账号:yh@abrasivesyh.com
账号已开通可以正常使用无任何问题。另注:
上面说明的是场景。
开发在WIN下本地开发测试,上传到腾讯云服务器部署。
下面说测试代码:
public static void sendHTMLMail(MailInfoNode mailInfoNode) throws EmailException {
try {
HtmlEmail email = new HtmlEmail();
// 配置信息
email.setHostName(“smtp.exmail.qq.com”);
email.setFrom("yh@abrasivesyh.com", "yh");
email.setAuthentication(“发件箱用户名”,“发件箱用户对应密码”);
email.setCharset(“utf-8”);
email.setSubject("测试一下");
email.setHtmlMsg("内容:<h1>测试内容</h1>");
// 收件人
email.addTo("yh@abrasivesyh.com");
email.send();
System.out.println("邮件发送成功!");
System.out.println(email.getSmtpPort());
} catch (EmailException e) {
System.out.println("邮件发送失败!");
throw e;
}
}
相关jar引入后,本地执行执行上面代码,无任何问题!注意看输入的端口是25,可以确定默认是25端口发送。将代码部署到云服务器上,执行报:
org.apache.commons.mail.EmailException: Sending theemail to the following server failed : smtp.exmail.qq.com:25
atorg.apache.commons.mail.Email.sendMimeMessage(Email.java:1138)
atorg.apache.commons.mail.Email.send(Email.java:1163)
atcom.newer.servlet.EmailServlet.doPost(EmailServlet.java:45)
.....
可以发现是连接25端口失败,下面还有个连接超时。这说明25端口存在问题。经网上查找:
将端口号改为:465,添加如下代码:
email.setSmtpPort(465);
本地测试:
服务器同样错误!!!!
添加如下代码:
email.setSSLOnConnect(true);
本地执行:
服务器执行同样成功!!
问题总结:
1.邮件发送部署在云服务器上时,不要使用默认的端口(25),一般默认是禁掉的,除非解禁。通常改为465端口。
2.如果使用465端口,一定要采用SSL加密方式,否则同样失败。email.setSSLOnConnect(true);