最近在鼓捣WP Mail SMTP,发现使用自己域名的SMTP服务都收费,不想掏钱只能使用使用Gmail,发送邮箱显示的是自己的Gmail邮箱地址。如果想使用自己的域名后缀发信,只能自己搭建邮局。宝塔可以配置邮件服务器,不过我只想要个简单的SMTP发信,用来发通知邮件,收信还是用免费企业邮局可靠。
下面我们就搭建一个仅用于 SMTP 发信的邮局系统,在 VPS 上配置 Postfix、启用 DKIM 签名、设置 SPF 记录,并成功实现 WordPress 通知邮件发送的全过程。目标是:只发信,不收信;只用 SMTP,不启用 IMAP;不依赖第三方邮箱服务。
为什么选择手动配置,而不是依赖宝塔邮局?
宝塔邮局的设计初衷是提供一个完整的邮件服务器解决方案,包括SMTP(发件)和IMAP/POP3(收件)。然而,我的域名邮箱服务已经由其网易免费企业邮箱托管,日常收发使用企业邮局,宝塔邮局会为域名添加_domainkey
记录,企业邮局也有这个同名记录,宝塔和企业邮局不能共存。手动配置就可以自定义这个前缀。
我们的目标非常明确:不搭建完整的邮局,仅利用VPS作为SMTP服务器。这样既能让WordPress顺利发信,又完全不影响你原有域名邮箱的收发功能,实现了VPS SMTP与网易域名邮箱的完美共存。
前提条件
必须确保VPS开放25端口,如果服务商屏蔽25端口,只能用第三方SMTP发信。
不完美的地方
不能自定义_dmarc,网易企业邮局不允许添加第三方的_dmarc信息,加入自己的DMARC 策略,企业邮局的验证通不过。
VPS 上安装和配置 Postfix SMTP 服务
1. 安装 Postfix
在 Ubuntu/Debian 上:
sudo apt update && sudo apt upgrade
sudo apt install postfix
安装过程中,Postfix 会提示选择配置类型,选择 Internet Site,并输入你的域名(例如 thuszen.com)。
2. 配置 Postfix
编辑 Postfix 主配置文件 /etc/postfix/main.cf,添加如下配置:
# TLS parameters
smtp_tls_CApath=/etc/ssl/certs
smtp_tls_security_level=may
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
myhostname = mail.thuszen.com
myorigin = thuszen.com
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
inet_interfaces = loopback-only
inet_protocols = all
说明:
- myhostname:设置为你的邮件服务器子域名(如 mail.thuszen.com)。
- myorigin = thuszen.com:发信时的默认域名。(如 user@thuszen.com)。
- mynetworks:限制仅本地网络发送邮件,防止被滥用。
- inet_interfaces = loopback-only:指定服务器监听的网络接口(loopback-only 表示仅本地回环接口)。
- inet_interfaces = all:指定支持的网络协议(IPv4 和 IPv6)。
安装DKIM,提高邮件可信度
1、安装 OpenDKIM:
sudo apt install opendkim opendkim-tools
2、生成 DKIM 密钥对
建议在 /etc/opendkim/keys/
下为域名创建目录:
sudo mkdir -p /etc/opendkim/keys/thuszen.com
生成密钥(以 wpmail 作为 selector 名称,可以自定义,避免与网易邮局冲突):
cd /etc/opendkim/keys/thuszen.com
sudo opendkim-genkey -s wpmail -d thuszen.com
生成两个文件:
→ 私钥(服务器签名用)wpmail
.private
→ 公钥(放 DNS TXT 记录里)wpmail
.txt
配置 OpenDKIM 与 Postfix
在 /etc/opendkim.conf
里添加:
Syslog yes
UMask 007
Mode sv
Canonicalization relaxed/simple
SubDomains no
Selector default
Domain thuszen.com
KeyFile /etc/opendkim/keys/thuszen.com/default.private
Socket inet:8891@localhost
在/etc/postfix/main.cf里添加:
# DKIM 集成
milter_default_action = accept
milter_protocol = 2
smtpd_milters = inet:localhost:8891
non_smtpd_milters = inet:localhost:8891
配置 DNS 记录
A 记录:
- 主机记录:mail
- 类型:A
- 记录值:你的 VPS 公网 IP
SPF 记录(提高邮件送达率,防止被标记为垃圾邮件):
- 主机记录:@
- 类型:TXT
- 记录值:v=spf1 ip4:你的VPS_IP ~all
- 我需要与网易邮局共存:v=spf1 ip4:209.55.108.38 include:spf.163.com -all
TXT 记录:
- 主机记录:wpmail._domainkey
- 类型:TXT
- 记录值:
文件括号里的内容,不要写两个双引号,保留斜杠。wpmail
.txt
_dmarc记录:
网易邮局不允许修改_dmarc,我就没有配置。如果你不用其他服务商的邮局服务可以配置TXT记录:v=DMARC1; p=none; rua=mailto:dmarc@yourdomain.com
到这里WordPress已经可以正常发送通知邮件了,评论通知、插件自动更新都可以收到通知邮件,我的VPS上放了4个网站,每个都可以使用各自的域名发送通知邮件,显示的发件人为wordpress@websitesoez.com、wordpress@oddbbocom,不局限于postfix配置的域名后缀。
也可以使用插件来管理发信,比如WP Mail SMTP:
- SMTP 主机:localhost
- 加密:无
- SMTP 端口:25
- 自动 TLS:启用
- 认证:停用
后记
经测试,发现网易企业邮局不能收到VPS发送的邮件,邮件日志显示:451 4.3.2 Internal server error,Postfix 已经把邮件发给网易服务器,但网易那边拒绝了。收件箱里没有邮件,也没有退信通知。发往163邮箱和阿里企业邮局正常。尝试联系网易企业邮局说明这个问题,未果。
如果你需要向Gmail发信,需要设置反向DNS(PTR 记录),不然会返回550-5.7.25错误,Gmail直接拒收。
host gmail-smtp-in.l.google.com[142.251.2.27] said:
550-5.7.25 [209.54.104.38] The IP address sending this message does not
have a 550-5.7.25 PTR record setup, or the corresponding forward DNS entry
does not 550-5.7.25 match the sending IP. As a policy, Gmail does not
accept messages 550-5.7.25 from IPs with missing PTR records. For more
information, go to 550-5.7.25
最后可以用mail-tester.com测试VPS发送邮件的得分。