springboot项目在阿里云服务器上发送邮件失败

springboot项目部署在ecs服务器上后,调用发送邮件的接口时发送错误:

Exception in thread "Thread-8" org.springframework.mail.MailSendException: Mail server connection failed; nested exception is com.sun.mail.util.MailConnectException: Couldn't connect to host, port: smtp.mxhichina.com, 25; timeout -1;
  nested exception is:
    java.net.ConnectException: Connection timed out (Connection timed out). Failed messages: com.sun.mail.util.MailConnectException: Couldn't connect to host, port: smtp.mxhichina.com, 25; timeout -1;
  nested exception is:
    java.net.ConnectException: Connection timed out (Connection timed out); message exception details (1) are:
Failed message 1:
com.sun.mail.util.MailConnectException: Couldn't connect to host, port: smtp.mxhichina.com, 25; timeout -1;
  nested exception is:
    java.net.ConnectException: Connection timed out (Connection timed out)
    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:366)
    at org.springframework.mail.javamail.JavaMailSenderImpl.connectTransport(JavaMailSenderImpl.java:501)
    at org.springframework.mail.javamail.JavaMailSenderImpl.doSend(JavaMailSenderImpl.java:421)
    at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:345)
    at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:340)
    at it.ozimov.springboot.mail.service.defaultimpl.DefaultEmailService.send(DefaultEmailService.java:138)

该接口在本地测试是可以成功发送邮件的,但部署到ecs就不行了。看上面的错误信息是连接不上smtp.mxhichina.com25端口,我在服务器上使用命令telnet smtp.mxhichina.com 25测试确实也连不上。不知道是不是和阿里云服务器默认封禁25端口有关。
请教一下这个问题怎么解决?

阅读 14.2k
1 个回答

可以改用ssl加密465端口发送邮件,spring javamail配置如下:

<bean id="mailSender" 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>

参考:解决阿里云ECS禁用25端口导致发邮件失败

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题