mail.qq.com
近期由于项目需要,使用了org.apache.commons.email来发送邮件的功能,如下:
<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-email</artifactId> <version>1.5</version> </dependency>
发送邮件代码:
public void sendWarningEmail(String subject,String msg){ log.info("开始发送邮件--->主题:{}",subject); MultiPartEmail email = new MultiPartEmail(); email.setHostName(hostName); email.setAuthentication(userName, password); try { for(String receiver :receivers) { email.addTo(receiver); } email.setFrom(sendFrom); email.setSubject(subject); email.setMsg(msg); email.send(); log.info("发送邮件结束--->主题:{}",subject); } catch (EmailException e) { log.ERROR("发送邮件失败,e:{}",e); } }
使用的配置hostName为:smtp.exmail.qq.com,本地调用正常发送邮件,提测之后又如下报错:
Caused by: com.sun.mail.util.MailConnectException: Couldn't connect to host, port: smtp.exmail.qq.com, 25; timeout 60000
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:2118)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:712)
at javax.mail.Service.connect(Service.java:388)
at javax.mail.Service.connect(Service.java:246)
at javax.mail.Service.connect(Service.java:195)
at javax.mail.Transport.send0(Transport.java:254)
at javax.mail.Transport.send(Transport.java:124)
at org.apache.commons.mail.Email.sendMimemessage(Email.java:1459)
... 12 common frames omitted
可以看出连接超时导致邮件发送失败,初步怀疑测试环境宿主机无法访问外网,进入bash后 curl http://baidu.com可正常响应,排除此种情况,然后同样方法到部署的具体容器环境(docker)控制台 curl http://baidu.com 同样可以正常响应,判断应用环境没有问题,则判断是否腾讯邮件服务器问题,到宿主机访问:Telnet smtp.exmail.qq.com 25,访问超时。后咨询PE答复阿里云ECS为管控垃圾邮件,屏蔽了25端口号的服务,所以导致该访问超时,尝试使用ssl方式的465端口,修改代码如下之后成功发送邮件:
email.setSmtpPort(465); email.setSSLOnConnect(true);
相关阅读
80端口被system(pid=4)占用的解决方法 80端口一般被当做网页服务器的默认端口,使用本机搭建服务器环境的时候,都会默认使用80端口来
A5创业网(公众号:iadmin5)3月31日报道,猎聘发布了2018年全年财报,2018年全年营收12.25亿元人民币,同比增长48.6%;毛利9.88亿元人民币,同比
A5创业网(公众号:iadmin5)11月10日消息,据外媒报道,位于加州山景城的谷歌公司发生一起通勤大巴撞人致死事故,一名中国籍谷歌女员工洪
A5创业网(公众号:iadmin5)12月3日报道,因为广告语涉嫌夸张事实,缺乏依据,日前,北京市工商行政管理局海淀分局发布了对瓜子二手车的处罚决
#include<string> #include<iostream> #include<map> #include<vector> #include<algorithm> using namespace std; class Infor