自建iRedMail邮件服务器无法发外域邮件的问题排查咨询
自建iRedMail服务器外部发件故障排查与解决方案
1. 确认云服务商是否封禁25端口
- 查阅服务商官方文档:主流云服务商(如AWS、阿里云、腾讯云)会明确说明25端口的默认封禁策略及解封条件,直接在帮助中心搜索即可。
- 服务器端端口连通性测试:在iRedMail服务器上执行
telnet gmail-smtp-in.l.google.com 25或telnet smtp.qq.com 25,若持续超时或提示无法连接,大概率是端口被服务商封禁。 - 第三方端口检测:从本地网络(非服务器所在云网络)使用
nmap 你的服务器公网IP -p 25检测,若结果显示filtered或closed,说明25端口未对外开放。 - 联系服务商客服:直接提交工单询问25端口状态,这是最直接准确的方式。
2. 25端口被封禁后的替代发送方案
- 第三方SMTP中继服务:使用SendGrid、Mailgun、Postmark等专业中继服务,或国内的阿里云企业邮、腾讯企业邮SMTP服务。以Postfix配置为例:
- 编辑
/etc/postfix/main.cf,添加:relayhost = [smtp.relay-service.com]:587 smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd smtp_sasl_security_options = noanonymous smtp_tls_security_level = encrypt - 创建
/etc/postfix/sasl_passwd文件,写入[smtp.relay-service.com]:587 你的中继账号:密码 - 执行
postmap /etc/postfix/sasl_passwd,重启Postfix:systemctl restart postfix
- 编辑
- 改用替代端口发送:部分服务商允许使用587(STARTTLS)或465(SSL)端口直接发件。修改Postfix配置强制使用这些端口:
在/etc/postfix/main.cf中添加smtp_port = 587,或针对特定域配置传输规则:
在transport_maps = hash:/etc/postfix/transport/etc/postfix/transport中写入gmail.com smtp:[smtp.gmail.com]:587,执行postmap /etc/postfix/transport后重启Postfix。 - 申请解封25端口:多数服务商支持提交工单申请解封,需提供域名备案信息、邮件用途说明等材料,审核通过后即可恢复25端口使用。
3. 具体排查与解决步骤
- 验证网络连通性
- 在服务器上测试多个外部邮件服务器的25端口连通性,排除单一服务器故障;若IPv6连接报错,检查服务器是否启用IPv6及服务商是否分配了IPv6地址。
- 检查本地防火墙
- 查看iptables/ufw/firewalld规则,确认出站的25、587、465端口是否被拦截;临时关闭防火墙(如
systemctl stop firewalld)测试发件,判断是否为本地规则导致。
- 查看iptables/ufw/firewalld规则,确认出站的25、587、465端口是否被拦截;临时关闭防火墙(如
- 确认DNS解析正常
- 执行
nslookup gmail-smtp-in.l.google.com,检查域名解析是否正确,避免因DNS配置错误导致无法找到外部服务器。
- 执行
- 测试中继配置有效性
- 手动用
telnet smtp.relay-service.com 587连接中继服务器,输入EHLO yourdomain.com验证服务可用性;配置中继后,查看tail -f /var/log/mail.log日志,确认邮件是否成功发送。
- 手动用
- 完善域名认证配置
- 确保域名的反向DNS(PTR)记录正确,同时配置SPF、DKIM、DMARC记录,避免邮件被外部服务器标记为垃圾邮件或拒收。
内容的提问来源于stack exchange,提问作者Ayush Chaudhari
相关产品推荐
相关产品推荐

