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

能否仅通过Python包实现DKIM或SPF邮件认证?

解决方案:纯Python实现DKIM签名及SPF适配

DKIM签名(纯Python实现)

可以用dkimpy这个纯Python包完成DKIM签名,不需要依赖外部MTA,仅需提前在你的发件域名DNS中配置好DKIM公钥(这是DKIM认证的必要前提,收件方会通过DNS查询公钥验证签名)。

操作步骤:

  1. 安装dkimpy:
pip install dkimpy
  1. 在代码中对已构建的EmailMessage对象进行签名:
import dkim

# 假设已创建好邮件对象email_msg = EmailMessage()
# 加载DKIM私钥(建议用文件存储,打包时需将私钥文件一同分发)
with open("dkim_private_key.pem", "rb") as f:
    private_key = f.read()

# 配置DKIM参数
dkim_config = {
    "privkey": private_key,
    "domain": "your-sender-domain.com",  # 发件邮箱对应的域名
    "selector": "your-dkim-selector",    # 域名DNS配置时使用的DKIM选择器
    "headers": ["From", "To", "Subject", "Date"],  # 需要签名的邮件头字段
}

# 生成签名并添加到邮件头
dkim_signature = dkim.sign(email_msg.as_bytes(), **dkim_config)
email_msg["DKIM-Signature"] = dkim_signature.decode().strip()
  1. 完成签名后,再通过smtplib.SMTP发送邮件即可。

SPF相关说明

SPF并非通过Python代码实现,它是域名DNS中的一条TXT记录,用于声明哪些IP地址被授权发送该域名的邮件。你当前直接从客户端IP发件,若该IP不在发件域名的SPF记录中,Gmail等服务商就会判定SPF认证失败。

适配方案:

  • 若用户使用固定IP:在发件域名的DNS中添加SPF记录,包含这些固定IP(例如v=spf1 ip4:192.168.1.100 -all)。
  • 若用户使用动态IP:这种场景下直接发件很难通过SPF认证,建议优先通过DKIM签名提升邮件可信度,或者权衡是否引入第三方SMTP服务(但这会增加外部依赖)。

打包注意事项

用PyInstaller打包时,dkimpy作为纯Python包可被直接打包,需注意将DKIM私钥文件作为资源一同分发,代码中通过相对路径或打包后的资源路径读取私钥。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 09:58:11