PHP发邮件至Gmail遭DMARC拦截,求DNS配置(SPF/DKIM/DMARC)指导
解决Gmail因DMARC拒收自托管网站邮件的配置指南
一、核心概念快速梳理
- SPF:明确告知收件方,哪些服务器有权以你的域名发送邮件
- DKIM:给邮件添加数字签名,证明邮件未被篡改、确实由你的域名发出
- DMARC:指定收件方在SPF/DKIM验证失败时的处理规则(如拒收、标记垃圾邮件)
二、第一步:配置SPF记录
- 登录GoDaddy域名管理后台,进入DNS记录编辑页面
- 添加一条TXT类型记录:
- 主机名:填
@(代表根域名,比如你的域名是example.com,直接用@) - 值:
v=spf1 a mx ~all- 说明:
a允许域名A记录指向的服务器发信;mx允许域名MX记录指向的服务器发信;~all表示非允许列表的服务器发信会被标记为软失败(先测试用这个,验证没问题后可改为-all硬失败)
- 说明:
- 主机名:填
- 保存记录,等待DNS生效(一般1-4小时,可通过SPF验证工具确认生效状态)
三、第二步:配置DKIM记录
- 在你的网站服务器上用OpenSSL生成DKIM密钥对:
openssl genrsa -out private.key 1024 openssl rsa -in private.key -pubout -out public.key - 整理公钥为DNS记录格式:
- 主机名:比如
default._domainkey(前缀可自定义,需和PHP发信配置一致) - 值:
v=DKIM1; k=rsa; p=这里填入公钥内容(去掉-----BEGIN PUBLIC KEY-----和-----END PUBLIC KEY-----,将内容连为一行)
- 主机名:比如
- 回到GoDaddy DNS后台,添加这条TXT记录并保存
- 在PHP邮件代码中配置DKIM签名(以PHPMailer为例):
$mail->DKIM_domain = '你的域名.com'; $mail->DKIM_private = '/path/to/private.key'; $mail->DKIM_selector = 'default'; // 需和DNS记录的主机名前缀一致 $mail->DKIM_passphrase = ''; // 生成密钥时未设密码则留空 $mail->DKIM_identity = '你的发件邮箱地址';
四、第三步:配置DMARC记录
- 在GoDaddy DNS后台添加TXT记录:
- 主机名:
_dmarc - 值:
v=DMARC1; p=none; sp=none; rua=mailto:dmarc@你的域名.com- 说明:
p=none为监控模式,不会拒收邮件,仅将验证失败的报告发送到指定邮箱;等SPF/DKIM验证通过后,可改为p=quarantine(归入垃圾邮件)或p=reject(直接拒收)
- 说明:
- 主机名:
- 保存记录,等待生效
五、验证配置有效性
发送测试邮件到Gmail,点击邮件右上角三点→显示原始内容,查看以下字段:
SPF行是否显示passDKIM行是否显示passDMARC行是否显示pass
额外注意事项
- 若使用GoDaddy虚拟主机,可直接在后台邮件设置中开启DKIM,系统会自动生成DNS记录,无需手动生成密钥
- 无需提前48小时配置SPF/DKIM,DNS生效时间由TTL值决定,GoDaddy默认TTL多为1小时左右,刷新后即可配置DMARC
- 若使用其他邮件库,可查找对应文档配置DKIM签名
内容的提问来源于stack exchange,提问作者Frankenscarf
相关产品推荐
相关产品推荐

