title: 阿里云服务器坑之邮件无法发送 tags:
- ecs
- 25
- 邮件发送失败 categories: 工作日志 date: 2017-12-14 10:10:38
背景
随着F6规模的扩大 系统也是越做越多!最近也上了保险项目。出于部分机器分配考虑 ‘临时’将保险项目放置在jenkins服务器上【jenkins服务器是最新申请的机器】
由于放置在jenkins服务器上导致的问题 小伙伴可以阅读上一篇Jenkins小坑之执行Shell
本篇需要来说明一下关于邮件发送的坑!
问题
保险项目上线后 发现线上错误不会发送错误邮件 当时同期毕业的报表项目可以成功发送邮件!
由于我们目前使用QQ企业邮箱发送邮件 会发生发送频率过高导致被邮件发不出来。但是事实证明并没有!
于是调查logback的配置
<springProperty scope&#61;"context" name&#61;"myAppName" source&#61;"spring.application.name"defaultValue&#61;"zeus"/><springProperty scope&#61;"context" name&#61;"email.username" source&#61;"logging.email.username"defaultValue&#61;"***&#64;f6car.com"/><springProperty scope&#61;"context" name&#61;"email.password" source&#61;"logging.email.password"defaultValue&#61;"***"/><springProperty scope&#61;"context" name&#61;"email.from" source&#61;"logging.email.from"defaultValue&#61;"***&#64;f6car.com"/><springProperty scope&#61;"context" name&#61;"email.to" source&#61;"logging.email.to"defaultValue&#61;"***&#64;f6car.com"/><springProperty scope&#61;"context" name&#61;"email.subject" source&#61;"logging.email.subject"defaultValue&#61;"ZEUS-NOTICE-DEV-%m{30}"/><springProperty scope&#61;"context" name&#61;"email.smtp.host" source&#61;"logging.email.smtp.host"defaultValue&#61;"smtp.exmail.qq.com"/><springProperty scope&#61;"context" name&#61;"email.pattern" source&#61;"logging.email.pattern"defaultValue&#61;"%d [%level] [%thread] %logger{15}:%line %msg%n"/><springProperty scope&#61;"context" name&#61;"email.filter" source&#61;"logging.email.ThresholdFilter"defaultValue&#61;"ERROR"/><appender name&#61;"MAIL" class&#61;"ch.qos.logback.classic.net.SMTPAppender"><To>${email.to}To><username>${email.username}username><subject>${email.subject}subject><from>${email.from}from><Name>${email.smtp.host}Name><password>${email.password}password><SMTPHost>${email.smtp.host}SMTPHost><layout class&#61;"ch.qos.logback.classic.PatternLayout"><pattern>${email.pattern}pattern>layout><filter class&#61;"ch.qos.logback.classic.filter.ThresholdFilter"><level>${email.filter}level>filter>appender>
上述配置由于不同机器和环境会从springboot不同的profile读取
但是现状是测试环境均可以发送 但是生产环境无法发送&#xff01;
调查 - 首先考虑对应阿里云机器的网络
PING smtp.exmail.qq.com (163.177.72.143) 56(84) bytes of data.64 bytes from 163.177.72.143 (163.177.72.143): icmp_seq&#61;1 ttl&#61;50 time&#61;34.1 ms64 bytes from 163.177.72.143 (163.177.72.143): icmp_seq&#61;2 ttl&#61;50 time&#61;34.3 ms64 bytes from 163.177.72.143 (163.177.72.143): icmp_seq&#61;3 ttl&#61;50 time&#61;34.2 ms^C--- smtp.exmail.qq.com ping statistics ---3 packets transmitted, 3 received, 0% packet loss, time 2002ms
- 证实网络是通的 同时由于该台服务器是jenkins服务器【由运维人员配置过jenkins发送邮件功能 可以成功发送邮件】
- 网络没有问题 那么有否可能端口被封呢&#xff1f;但是jenkins服务器可以发送邮件有如何解释&#xff1f;调查陷入了僵局
- 于是找到jenkins管理员账号查看邮箱设定
- 发现jenkins配置制定了端口号 但是我们的配置中没有端口号的指定
- 那么默认的端口号是啥呢&#xff1f;
public abstract class SMTPAppenderBase<E> extends AppenderBase<E> {static InternetAddress[] EMPTY_IA_ARRAY &#61; new InternetAddress[0];// ~ 14 daysstatic final long MAX_DELAY_BETWEEN_STATUS_MESSAGES &#61; 1228800 * CoreConstants.MILLIS_IN_ONE_SECOND;long lastTrackerStatusPrint &#61; 0;long delayBetweenStatusMessages &#61; 300 * CoreConstants.MILLIS_IN_ONE_SECOND;protected Layout
-
可以看到默认端口号是25 并且ssl是false
-
因此使用telnet确认是否25端口不通
-
但是同期的报表工程如下
-
很明显25端口在新的机器上无法使用&#xff01;&#xff01;&#xff01;
-
那么我们更换使用465端口
-
因此思路如下 我们在logback中增加对应配置用来设置端口和ssl
<springProperty scope&#61;"context" name&#61;"myAppName" source&#61;"spring.application.name"defaultValue&#61;"zeus"/><springProperty scope&#61;"context" name&#61;"email.username" source&#61;"logging.email.username"defaultValue&#61;"***&#64;f6car.com"/><springProperty scope&#61;"context" name&#61;"email.password" source&#61;"logging.email.password"defaultValue&#61;"***"/><springProperty scope&#61;"context" name&#61;"email.from" source&#61;"logging.email.from"defaultValue&#61;"***&#64;f6car.com"/><springProperty scope&#61;"context" name&#61;"email.to" source&#61;"logging.email.to"defaultValue&#61;"***&#64;f6car.com"/><springProperty scope&#61;"context" name&#61;"email.subject" source&#61;"logging.email.subject"defaultValue&#61;"ZEUS-NOTICE-DEV-%m{30}"/><springProperty scope&#61;"context" name&#61;"email.smtp.host" source&#61;"logging.email.smtp.host"defaultValue&#61;"smtp.exmail.qq.com"/><springProperty scope&#61;"context" name&#61;"email.smtp.port" source&#61;"logging.email.smtp.port"defaultValue&#61;"25"/><springProperty scope&#61;"context" name&#61;"email.ssl" source&#61;"logging.email.ssl"defaultValue&#61;"false"/><springProperty scope&#61;"context" name&#61;"email.pattern" source&#61;"logging.email.pattern"defaultValue&#61;"%d [%level] [%thread] %logger{15}:%line %msg%n"/><springProperty scope&#61;"context" name&#61;"email.filter" source&#61;"logging.email.ThresholdFilter"defaultValue&#61;"ERROR"/><appender name&#61;"MAIL" class&#61;"ch.qos.logback.classic.net.SMTPAppender"><To>${email.to}To><username>${email.username}username><subject>${email.subject}subject><from>${email.from}from><Name>${email.smtp.host}Name><password>${email.password}password><SMTPHost>${email.smtp.host}SMTPHost><SMTPPort>${email.smtp.port}SMTPPort><SSL>${email.ssl}SSL><layout class&#61;"ch.qos.logback.classic.PatternLayout"><pattern>${email.pattern}pattern>layout><filter class&#61;"ch.qos.logback.classic.filter.ThresholdFilter"><level>${email.filter}level>filter>appender>
- 默认值使用25和false 但是当部署在新机器上可以使用配置成465和true 这样就可以发送邮件
- 网上检索了 不止一个倒霉蛋碰到了此问题 www.100cm.cn/article-126…
- 阿里云官方说明help.aliyun.com/knowledge_d… 新的机器上默认禁止25端口&#xff01;&#xff01;&#xff01; 新的机器上默认禁止25端口&#xff01;&#xff01;&#xff01;新的机器上默认禁止25端口&#xff01;&#xff01;&#xff01;