iRedMail无法与外部服务器互发邮件问题求助
解决iRedMail无法收发外部邮件的实操步骤
嘿,你这情况很典型——内部互发正常,说明本地邮件系统本身没毛病,问题肯定出在外部连通、DNS验证或者端口配置上,咱们一步步排查:
一、先搞定基础网络连通性
- 先测服务器能不能连外网邮件服务器:跑个
ping gmail-smtp-in.l.google.com,如果ping不通,先检查服务器的防火墙、路由,或者是不是VPS服务商给你封了出站网络。 - 测试邮件端口能不能走通:用
telnet smtp.gmail.com 587或者nc -zv smtp.gmail.com 587,看看25、587、465这几个SMTP常用端口能不能建立连接。要是25端口连不上,十有八九是ISP默认封了25(很多VPS都这么干),要么联系ISP解封,要么改Postfix用587端口发邮件。 - 入站端口也要测:找个外部机器跑
telnet 你的服务器公网IP 25,看看外部能不能访问你的25端口——这是接收外部邮件的关键。如果连不上,先检查你的端口转发是不是配置对了,再看服务器本地防火墙(比如ufw)有没有开25端口:ufw allow 25/tcp,然后ufw reload生效。
二、核对DNS记录的关键细节
你提到了MX、A、TXT记录,这几个地方错一个都不行:
- MX记录:必须指向你的服务器公网域名(比如mail.yourdomain.com),优先级设个10就行,绝对不能指向内部私网IP,外部服务器根本找不到。
- A记录:MX指向的那个域名,必须有对应的A记录解析到你的服务器公网IP,不能是localhost或者内部域名。
- SPF记录(TXT类型):一定要包含你的服务器公网IP,比如写
v=spf1 ip4:xxx.xxx.xxx.xxx -all,这样外部邮件服务器才会认你的邮件是合法来源,不会直接当垃圾拒收。 - PTR反向解析:这个是很多人忽略的坑!你的服务器公网IP必须反向解析到你的邮件域名(比如mail.yourdomain.com),大部分主流邮件服务器(比如Gmail、Outlook)都会检查这个,不匹配直接拒收。这个得找你的IP服务商帮你设置,自己改不了。
三、检查iRedMail的核心配置
- 打开Postfix的主配置文件
/etc/postfix/main.cf:- 确认
myhostname是你的公网邮件域名,不是localhost或者内部局域网域名。 mydestination里只留本地域名和localhost,别加外部域名,不然Postfix会把外部邮件当成本地邮件处理,自然发不出去也收不到。relayhost留空就行,除非你专门用中继服务器发邮件。
- 确认
- 试试临时关闭Amavisd:有时候反垃圾规则太严会误杀外部邮件,跑
systemctl stop amavisd,然后再测收外部邮件,如果能收到了,再去调Amavisd或者SpamAssassin的规则。
四、扒邮件日志找具体错误
日志是排查问题的黄金线索,去看/var/log/mail.log或者/var/log/mail.err:
- 发不出去的话,日志里会有
relay denied、connection refused这类明确的错误提示,照着提示改就行。 - 收不到的话,日志里会显示
rejected的原因,比如no reverse DNS(没设PTR)、SPF check failed(SPF记录错了)。
比如如果日志里出现550 5.7.1 Reverse DNS lookup failed,那不用想,就是PTR记录没配置对,赶紧找ISP处理。
五、做个实际收发测试
- 发测试邮件:跑
echo "这是测试邮件" | mail -s "测试" 你的外部邮箱地址,然后看日志有没有报错。 - 收测试邮件:用Gmail、Outlook这类外部邮箱给你的iRedMail用户发邮件,然后去服务器日志和用户邮箱的收件箱、垃圾邮件箱里找。
内容的提问来源于stack exchange,提问作者Max Kulik
相关产品推荐
相关产品推荐

