使用JavaMail发送邮件,用的是阿里云的邮件服务。在本地测试是没有问题,但是上传到阿里云的ecs上就报错:
MailSendException: Mail server connection failed; nested exception is com.sun.mail.util.MailConnectException: Couldn't connect to host, port: smtp.majing.io, 25; timeout -1;
原来是阿里云处于安全考虑,TCP 25 端口出方向默认被封禁。
解决方法
有两种解决方法:
- 向阿里云申请解封25端口。
- 改为ssl加密465端口发送。
向阿里云申请解封25端口,可以参考:https://help.aliyun.com/knowledge_detail/56130.html。
JavaMail使用ssl加密465端口发送邮件
主要是在原来发送邮件的配置上添加ssl,并设置为465端口。
Properties javaMailProperties = new Properties();
javaMailProperties.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
javaMailProperties.setProperty("mail.smtp.socketFactory.port", "465");
javaMailProperties.setProperty("mail.smtp.port", "465");
使用spring配置如下:
<bean class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="host" value="${mail.host}"/>
<property name="username" value="${mail.username}"></property>
<property name="password" value="${mail.password}"></property>
<property name="javaMailProperties">
<props>
<prop key="mail.smtp.socketFactory.class">javax.net.ssl.SSLSocketFactory</prop>
<prop key="mail.smtp.socketFactory.port">465</prop>
<prop key="mail.smtp.port">465</prop>
</props>
</property>
</bean>