You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Postfix通过Gmail中继发送邮件并保留本地域名邮件本地投递

如何配置Postfix通过Gmail中继发送邮件并保留本地域名邮件本地投递

看你的需求是让Postfix把非本地域名的邮件通过Gmail中继发送,同时像nick@mordor.saundersconsulting.tech这类本地域名的邮件,依然直接投递到本地邮箱,不用走Gmail中继。结合你用的Ubuntu 22.04环境,咱们一步步来配置:

一、先搞定Gmail的应用专用密码

现在Gmail不允许直接用账号密码登录第三方SMTP工具了,必须先做两步验证,再生成专属的应用密码:

  • 登录你的Gmail账号,进入「账号设置」→「安全」板块
  • 先开启「两步验证」(如果还没开的话)
  • 找到「应用专用密码」选项,生成一个专门给Postfix用的密码,把这个密码记好,后面要用到。

二、安装必要的软件包

打开终端,先安装Postfix和SASL认证模块(Postfix靠这个和Gmail的SMTP服务器做身份校验):

sudo apt update && sudo apt install postfix libsasl2-modules

安装过程会弹出Postfix配置向导,先选「Internet Site」,然后输入你的本地域名(比如mordor.saundersconsulting.tech),后续我们还要手动改配置,这里先填好基础信息就行。

三、修改Postfix主配置文件

编辑/etc/postfix/main.cf文件,用nano或者你习惯的编辑器都可以:

sudo nano /etc/postfix/main.cf

找到并修改以下关键配置项,如果没有就手动添加:

1. 配置中继主机(指向Gmail SMTP)

relayhost = [smtp.gmail.com]:587

加方括号是为了让Postfix直接连接这个服务器,不用查询它的MX记录。

2. 开启SMTP认证并指定密码文件

smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous

3. 开启TLS加密(Gmail强制要求)

smtp_use_tls = yes
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt

4. 确保本地域名邮件本地投递

确认mydestination配置已经包含你的本地域名,这样Postfix会把发往这个域名的邮件直接投到本地邮箱,不走中继:

mydestination = $myhostname, mordor.saundersconsulting.tech, localhost.localdomain, localhost

$myhostname就是你的服务器主机名,确保它也在列表里。

改完后按Ctrl+O保存,Ctrl+X退出编辑器。

四、创建并配置SASL密码文件

现在创建存储Gmail账号和应用密码的文件:

sudo nano /etc/postfix/sasl_passwd

在里面添加一行内容,格式是「中继主机 用户名:应用密码」:

[smtp.gmail.com]:587 your-gmail-account@gmail.com:your-app-specific-password

把your-gmail-account@gmail.com换成你自己的Gmail邮箱,your-app-specific-password换成刚才生成的应用专用密码。

保存退出后,用Postfix的postmap工具生成加密的hash文件:

sudo postmap /etc/postfix/sasl_passwd

五、设置文件权限保证安全

密码文件不能让其他用户读取,所以修改权限:

sudo chmod 600 /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db
sudo chown root:root /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db

六、重启Postfix让配置生效

sudo systemctl restart postfix

七、测试配置是否正常

1. 测试本地邮件投递

像你之前那样用swaks测试本地邮件,确认还是能正常投递到本地邮箱:

swaks --to nick@mordor.saundersconsulting.tech --server localhost

查看/var/log/postfix.log,应该会看到类似你之前日志里的status=sent (delivered to mailbox)记录,说明本地投递没问题。

2. 测试中继发送到外部邮箱

测试发送到Gmail或者其他外部邮箱:

swaks --to saunders.nicholas@gmail.com --from nicholas@mordor.saundersconsulting.tech --server localhost

查看日志,如果看到relay=smtp.gmail.com[xxx.xxx.xxx.xxx]:587这类记录,并且最终显示status=sent,说明中继配置成功了。

常见问题排查

如果遇到投递失败,先看/var/log/postfix.log找原因:

  • 要是提示认证失败,检查应用密码是否正确,或者两步验证有没有开启、应用密码是不是对应Postfix生成的。
  • 要是TLS相关错误,确认smtp_tls_CAfile路径正确,也可以运行sudo update-ca-certificates更新证书。
  • 要是本地邮件还是走中继,检查mydestination是否正确包含你的本地域名,Postfix会优先处理这个列表里的域名,直接本地投递。

备注:内容来源于stack exchange,提问作者Nicholas Saunders

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.20 12:44:35