配置外部域名后Postfix无法向Ubuntu本地用户收发邮件求助
解决Postfix本地账户无法收发邮件的问题
你遇到的核心问题是Postfix没有把你的本地域识别为本地投递范围,导致它把root这类本地用户自动拼接成root@mydomain.com,然后试图通过外部SMTP服务器投递——但你的外部域名服务器要么没开放25端口,要么被防火墙拦截了,这才出现了日志里的Connection refused错误。
下面是具体的修复步骤:
1. 修改Postfix核心配置
打开Postfix的主配置文件:
sudo nano /etc/postfix/main.cf
找到mydestination参数,确保它包含你的服务器主机名、localhost,以及你的外部域名。例如:
mydestination = $myhostname, localhost.$mydomain, localhost, mydomain.com
$myhostname是你的服务器主机名(比如日志里的media),localhost是本地回环地址,加上你的外部域名mydomain.com后,Postfix就会知道这些域下的收件人是本地用户,直接投递到本地邮箱,而不会转发到外部。
同时确认local_recipient_maps参数没有被注释,默认配置应该是:
local_recipient_maps = unix:passwd.byname $alias_maps
这个参数用来验证本地用户是否存在,避免投递到不存在的账户。
2. 重启Postfix生效
保存配置文件后,重启Postfix服务:
sudo systemctl restart postfix
3. 测试本地邮件投递
执行测试命令:
echo "Test local mail content" | mail -s "Local Mail Test" root
然后可以通过以下方式查看邮件:
- 直接查看本地邮箱文件:
cat /var/mail/root - 用系统自带的
mail命令进入收件箱查看
为什么之前会失败?
从你的日志可以看到,Postfix把root解析成了root@mydomain.com,然后尝试连接mydomain.com的外部IP的25端口。大部分VPS提供商默认会拦截出站25端口(反垃圾邮件),或者你的域名MX记录指向的服务器没有开放25端口,导致连接被拒绝,邮件一直处于延迟状态。通过修改mydestination,我们告诉Postfix:这些域的邮件不需要往外发,直接在本地处理。
内容的提问来源于stack exchange,提问作者Dibly
相关产品推荐
相关产品推荐

