xuxueli / xxl-job

A distributed task scheduling framework.(分布式任务调度平台XXL-JOB)
http://www.xuxueli.com/xxl-job/
GNU General Public License v3.0
27.46k stars 10.86k forks source link

邮件服务--Could not connect to SMTP host: smtp.163.com, port: 25;部署服务器:阿里云 ECS #244

Closed zhangdechang closed 4 years ago

zhangdechang commented 6 years ago

Please answer some questions before submitting your issue. Thanks!

版本

版本应该是1.7的,不过看过1.8最新的,相关邮件服务也是没有这段代码

问题描述

环境:阿里云ecs,企业邮箱smtp.qiye.163.com 原因:前几天运维突然告知邮件服务25端口关闭,启用465端口.需修改xxl-job-admin.properties配置文件中的xxl.job.mail.port=465, 问题:启动项目后发现,该邮件服务仍读取邮件端口25,但相对应的端口465已经读取到 image

此段代码中的port已经是465,但服务仍然报错,如图 image

真实原因是:ECS基于安全考虑,目前已禁用25端口。且服务器勾选SSL,使用465端口。 解决:参考CSDN博主:daqi1983的分享http://blog.csdn.net/daqi1983/article/details/73369440, 在邮件工具类中添加如下代码解决: image

xuxueli commented 6 years ago

赞~ 对遇到类似问题的小伙伴们很有帮助啊:)

yangliuyu commented 6 years ago

我也遇到了相同的问题 xxl-job-admin/src/main/resources/xxl-job-admin.properties的配置为(邮箱用户名和密码隐藏了)

### xxl-job email
xxl.job.mail.host=smtp.mxhichina.com
xxl.job.mail.port=465
xxl.job.mail.ssl=true
xxl.job.mail.username=x@xxx
xxl.job.mail.password=xxx
xxl.job.mail.sendNick=《任务调度平台XXL-JOB》

把executor的进程停止后,失败的时候发邮件报错

2018-06-26 18:49:50 xxl-job-admin [com.xxl.job.admin.core.util.MailUtil]-[Thread-10]-[sendMail]-[53]-[ERROR] Sending the email to the following server failed : smtp.mxhichina.com:465
org.apache.commons.mail.EmailException: Sending the email to the following server failed : smtp.mxhichina.com:465
    at org.apache.commons.mail.Email.sendMimeMessage(Email.java:1469)
    at org.apache.commons.mail.Email.send(Email.java:1496)
    at com.xxl.job.admin.core.util.MailUtil.sendMail(MailUtil.java:50)
    at com.xxl.job.admin.core.thread.JobFailMonitorHelper.failAlarm(JobFailMonitorHelper.java:161)
    at com.xxl.job.admin.core.thread.JobFailMonitorHelper.access$400(JobFailMonitorHelper.java:24)
    at com.xxl.job.admin.core.thread.JobFailMonitorHelper$1.run(JobFailMonitorHelper.java:68)
    at java.lang.Thread.run(Thread.java:748)
Caused by: javax.mail.MessagingException: Could not connect to SMTP host: smtp.mxhichina.com, port: 465, response: -1
    at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:2106)
    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)
    ... 6 more

@xuxueli 我想应该是要修改xxl-job里发邮件的代码,把socketFactory的配置加上

zhaoydo commented 6 years ago

用props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); 报错:unable to find valid certification path to requested target 查了一下需要生成证书,可以这样修改来忽略:

MailSSLSocketFactory sf = null;
                try {
                    sf = new MailSSLSocketFactory();
                } catch (GeneralSecurityException e) {
                    logger.error("error", e);
                }
                sf.setTrustAllHosts(true);
                pro.put("mail.smtp.ssl.enable", "true");
                pro.put("mail.smtp.ssl.socketFactory", sf);
junit commented 5 years ago

开启SSL,在application.properties中增加以下配置即可

spring.mail.properties.mail.smtp.ssl.enable=true
spring.mail.properties.mail.smtp.ssl.socketFactory=javax.net.ssl.SSLSocketFactory