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

PHP发邮件至Gmail遭DMARC拦截,求DNS配置(SPF/DKIM/DMARC)指导

解决Gmail因DMARC拒收自托管网站邮件的配置指南

一、核心概念快速梳理

  • SPF:明确告知收件方,哪些服务器有权以你的域名发送邮件
  • DKIM:给邮件添加数字签名,证明邮件未被篡改、确实由你的域名发出
  • DMARC:指定收件方在SPF/DKIM验证失败时的处理规则(如拒收、标记垃圾邮件)

二、第一步:配置SPF记录

  1. 登录GoDaddy域名管理后台,进入DNS记录编辑页面
  2. 添加一条TXT类型记录:
    • 主机名:填@(代表根域名,比如你的域名是example.com,直接用@)
    • 值:v=spf1 a mx ~all
      • 说明:a允许域名A记录指向的服务器发信;mx允许域名MX记录指向的服务器发信;~all表示非允许列表的服务器发信会被标记为软失败(先测试用这个,验证没问题后可改为-all硬失败)
  3. 保存记录,等待DNS生效(一般1-4小时,可通过SPF验证工具确认生效状态)

三、第二步:配置DKIM记录

  1. 在你的网站服务器上用OpenSSL生成DKIM密钥对:
    openssl genrsa -out private.key 1024
    openssl rsa -in private.key -pubout -out public.key
    
  2. 整理公钥为DNS记录格式:
    • 主机名:比如default._domainkey(前缀可自定义,需和PHP发信配置一致)
    • 值:v=DKIM1; k=rsa; p=这里填入公钥内容(去掉-----BEGIN PUBLIC KEY-----和-----END PUBLIC KEY-----,将内容连为一行)
  3. 回到GoDaddy DNS后台,添加这条TXT记录并保存
  4. 在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记录

  1. 在GoDaddy DNS后台添加TXT记录:
    • 主机名:_dmarc
    • 值:v=DMARC1; p=none; sp=none; rua=mailto:dmarc@你的域名.com
      • 说明:p=none为监控模式,不会拒收邮件,仅将验证失败的报告发送到指定邮箱;等SPF/DKIM验证通过后,可改为p=quarantine(归入垃圾邮件)或p=reject(直接拒收)
  2. 保存记录,等待生效

五、验证配置有效性

发送测试邮件到Gmail,点击邮件右上角三点→显示原始内容,查看以下字段:

  • SPF行是否显示pass
  • DKIM行是否显示pass
  • DMARC行是否显示pass

额外注意事项

  • 若使用GoDaddy虚拟主机,可直接在后台邮件设置中开启DKIM,系统会自动生成DNS记录,无需手动生成密钥
  • 无需提前48小时配置SPF/DKIM,DNS生效时间由TTL值决定,GoDaddy默认TTL多为1小时左右,刷新后即可配置DMARC
  • 若使用其他邮件库,可查找对应文档配置DKIM签名

内容的提问来源于stack exchange,提问作者Frankenscarf

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 09:14:56