很多人把网站或邮件服务部署到阿里云ECS后,发现邮件怎么也发不出去,日志里反复出现连接超时。多数情况下,问题出在25端口上。下面说清楚限制的原因,怎么确认是不是它在作怪,怎样申请解封,以及解封不了时还能怎么办。

阿里云为什么限制25端口
25端口是SMTP的默认端口,也是垃圾邮件最常借用的出口。服务器一旦被入侵,很快就会被拿来向外群发邮件。阿里云因此默认限制新购ECS主动连接外部25端口。这个限制只针对出站方向,和安全组的入站规则无关。所以就算你在安全组里放行了25端口,问题依然存在,别在这上面反复折腾。
先确认是不是25端口的问题
在服务器上测试一下能否连到外部邮件服务器的25端口,以QQ邮箱的SMTP服务器为例:
Linux:telnet smtp.qq.com 25,或者 nc -zv smtp.qq.com 25
Windows:先在”启用或关闭Windows功能”里打开Telnet客户端,再执行 telnet smtp.qq.com 25
如果命令一直卡住,或者直接报连接失败,同一台机器上连465或587端口却是通的,那基本就是25端口被限了。三个端口都不通的话,就该往DNS、本机防火墙或邮件服务商的设置上查,不必急着去提工单。
申请25端口解封
阿里云支持在控制台提交工单申请解封。工单写得越具体,越不容易被打回。建议提前准备好下面几项:
- 业务用途:写清楚服务器发的是什么邮件,比如订单通知、注册验证码或企业邮箱收发。
- 发信量:给出每天大概发多少封、发给哪些人。只写一句”用于发邮件”,审核员没法判断,大概率会被驳回。
- 域名:发信域名最好已经解析好,并配置了SPF和DKIM记录。这两条记录能证明你的域名确实有权发这些信。
- 安全措施:说明密码强度要求、发信接口是否有限制,以及怎样防止被人拿去滥用。
审核一般要等几个工作日。新注册的账号,或者近期有过异常记录的账号,通过率会低一些。解封之后别急着全量发送,先小批量跑一段时间,盯着退信和投诉的情况,确认没问题再逐步加量。
解封不了时怎么办
申请没通过,或者业务本身就不适合让服务器直接发信,可以换个思路:
- 改用加密端口:很多邮件服务商同时支持465(SSL)和587(STARTTLS)。把SMTP地址和端口改成其中一个就行,不用解封。能不能用,还是要以实际测试为准,有些服务商会限制这两个端口的使用条件。
- 使用阿里云邮件推送(DirectMail):这是阿里云的事务邮件服务,适合验证码、订单通知这类批量场景。它走自己的发信通道,不依赖服务器本地的25端口,还提供发信统计、退订管理和域名认证。如果你只是要稳定地发通知邮件,这通常是最省心的选择。
- 使用第三方邮件API:通过HTTP接口发信,同样绕开25端口的限制。适合团队里有人能写接口调用代码的情况,省去自己维护SMTP的麻烦。
案例:独立站订单邮件没发出去
某小型电商网站部署在ECS上,用PHP的mail()函数发送订单确认邮件。上线后,客户陆续反馈没收到邮件,但页面明明显示下单成功。排查时发现,PHP在等待25端口连接时超时,程序没有抛出错误,邮件就这样悄悄丢了。
团队第一次提工单时只写了一句”需要发送业务邮件”,很快被驳回。第二次他们补充了网站的业务说明和每日订单邮件的预估数量,又给域名配好了SPF和DKIM,这次通过了解封。与此同时,他们把订单邮件迁到DirectMail,用465端口的SMTP接口发送,两条通道互为备份。之后邮件到达率明显好转,也没有再出现静默丢失的情况。
注意事项
不管走哪条路,有几件事都要留意:
- 发信程序一定要设置超时和错误处理。像上面那个案例,超时后没人知道,等客户来问才发现问题,代价就大了。
- SMTP账号和密码放进环境变量或密钥管理服务,不要直接写进代码,否则代码一旦外泄,邮箱就跟着被人用了。
- 解封之后也要定期查看发信日志,发现异常量级要立即停发、封停并修改密码。
- 端口政策和审核标准可能随时调整,具体操作以阿里云官方文档和控制台的说明为准。