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

Python中使用DKIM签名邮件出现私钥解析错误如何解决?

DKIM签名报错修复方案

错误原因

  • 私钥读取逻辑错误:你以文本模式读取PEM格式的私钥文件,之后又手动调用encode()方法做二次编码,破坏了私钥原始的ASN.1结构,导致dkim库无法解析。
  • 可选优化:当前生成的1024位RSA密钥安全强度不足,主流邮件服务商现在普遍要求DKIM密钥长度至少为2048位,否则即使签名成功仍可能被判为垃圾邮件。

修复步骤

第一步:修改私钥读取与签名逻辑

将原代码中私钥读取和dkim.sign的部分替换为如下内容:

# 用二进制模式直接读取私钥,不需要额外编码转换
with open(<private_key_path>, 'rb') as fh:
    dkim_private_key = fh.read()
# 建议补充更多常用邮件头,避免后续服务商验证签名失败
headers = [b'To', b"From", b"Subject", b"Date", b"Message-ID"]
sig = dkim.sign(
    message=message.as_bytes(),
    selector=str(dkim_selector).encode(),
    domain=domain.encode(),
    privkey=dkim_private_key, # 直接传入读取到的二进制私钥即可
    include_headers=headers,
)

第二步(可选,推荐):重新生成更高强度的密钥对

执行以下openssl命令生成2048位的RSA密钥对:

openssl genrsa -out privateKey.pem 2048
openssl rsa -in privateKey.pem -out publicKey.pub -pubout

第三步:检查DNS配置

确认你的域名DNS记录中已添加正确的DKIM记录:

  • 记录类型:TXT
  • 主机名:default._domainkey(与你代码中的dkim_selector对应)
  • 记录值:v=DKIM1; k=rsa; p=公钥内容,公钥内容需要去掉publicKey.pub文件中的首尾标记行(-----BEGIN PUBLIC KEY-----、-----END PUBLIC KEY-----)以及所有换行符,拼接为连续字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 13:18:02