如何强制Postfix从25端口切换至587端口发送外发邮件
如何强制Postfix从25端口切换至587端口发送外发邮件
看起来你已经精准定位了问题——端口25被拦截导致无法直接投递到Gmail的MX服务器,而587端口是正常连通的。要让Postfix强制走587端口发邮件,核心是配置SMTP中继,而不是只改TLS设置,具体步骤如下:
1. 修改Postfix主配置文件(main.cf)
打开/etc/postfix/main.cf,找到或添加以下关键配置:
指定Gmail的SMTP中继服务器及587端口:
relayhost = [smtp.gmail.com]:587这里的方括号
[]是为了避免Postfix对域名做MX记录查询,直接使用指定的SMTP服务器地址。启用SMTP身份验证(Gmail的587端口要求验证身份):
smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd smtp_sasl_security_options = noanonymous完善TLS加密配置(你之前的设置已经生效,这里补充证书验证确保安全):
smtp_tls_security_level = encrypt smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
2. 创建SMTP认证密码文件
创建/etc/postfix/sasl_passwd文件,写入你的Gmail账号和应用专用密码(注意:如果你的Gmail开启了两步验证,必须使用应用专用密码,不能用普通登录密码):
[smtp.gmail.com]:587 your-gmail-account@gmail.com:your-app-specific-password
然后生成Postfix能识别的哈希数据库文件:
postmap /etc/postfix/sasl_passwd
最后修改文件权限,确保只有root能访问:
chmod 600 /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db
3. 重启Postfix服务使配置生效
systemctl restart postfix
4. 测试邮件发送
用你之前的命令测试:
echo "This is the body of the email" | mail -s "This is the subject line" user@gmail.com
之后可以查看邮件日志确认是否成功:
tail -f /var/log/mail.log
为什么之前改TLS设置没用?
你之前修改的smtp_tls_security_level只是控制加密级别,但Postfix默认的投递逻辑是直接连接收件方域名的MX服务器(比如Gmail的gmail-smtp-in.l.google.com)的25端口。只有配置了relayhost,Postfix才会把所有外发邮件转发到指定的SMTP中继服务器(这里是Gmail的smtp.gmail.com:587),从而避开被拦截的25端口。
备注:内容来源于stack exchange,提问作者laplasz




