消息标题显示 dkim = 失败,统计数据显示 = 通过。为什么会发生冲突,以及如何解决?

消息标题显示 dkim = 失败,统计数据显示 = 通过。为什么会发生冲突,以及如何解决?

在一些(并非全部)收到的电子邮件中(特别是仅通过“批量”服务发送的电子邮件),我收到 DKIM 失败:“签名验证失败”。以下是一个例子:

Received message headers
    DKIM-Filter: OpenDKIM Filter v2.10.3 mail.example.com 3rfbq51KBTz2xF0
    Authentication-Results: dkim.example.com/3rfbq51KBTz2xF0;
        dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=proxyvote.com [email protected] header.b=XjB07H1q

但检查“dkim-stats”时,它显示“已通过”

opendkim-stats dkim-stats
    Job 3rfbq51KBTz2xF0 at edge (size 12124)
            received via 127.0.0.1 at Wed Jun 29 01:45:37 2016
            from domain = 'proxyvote.com'
            Signature 1 from proxyvote.com
                    PASSED
                    signed bytes: (whole message)
                    Signature properties: 
                    Key properties:  
                    DNSSEC status: INSECURE

以下是该消息的附带转储

cat dkim.3rfbq51KBTz2xF0.4dDfiv
    Date: Wed, 29 Jun 2016 03:10:40 -0400
    From: "PROXYVOTE"  <[email protected]>
    To:   [email protected]
    Subject: Semi-Annual Report
    message-id: <[email protected]>
    Reply-To: "PROXYVOTE" <[email protected]>
    MIME-Version: 1.0
    DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
      d=proxyvote.com; [email protected]; q=dns/txt;
      s=edppsuirna01; t=1467189937; x=1498725937;
      h=date:from:to:subject:message-id:reply-to:mime-version;
      bh=H5lkhcTIjxd0B3N4Kdj314qELLpSKZvAAtPAS+XcM1A=;

为什么我会同时得到“失败”和“通过”的结果?我需要做什么才能解决这个问题?

答案1

Jason,您能将 改为 吗c=simple/simplec=relaxed\relaxed我见过很多次不同的 DKIM 验证器在空格折叠方面遇到困难。您说它只在“Bulk”时失败,所以这告诉我您正在通过某些 SMTP 服务发送此邮件,这让我更倾向于相信标头正在被重写,而 simple/simple 的空格折叠是罪魁祸首。您也可以运行邮件测试它会使用 4 个不同的 DKIM 验证器对其进行测试 - 如果四个都失败。当您通过批量服务发送时,可能就会发生这种情况。

以下更新部分

由于您收到了电子邮件,因此您仍然可以重新处理它并使用另一个验证器检查 DKIM。当我认为我的电子邮件服务器可能错误地处理 DKIM 时,这就是我进行健全性检查的方法。我使用 Limilabs Mail.dll 来处理 EML 的发送,但您可以使用任何您想要的,使用任何您熟悉的编程语言。DKIM 保持完整,您将能够使用在线自动回复程序根据其他 DKIM 验证器对其进行验证。

    Dim email As IMail
    Dim mb As New Limilabs.Mail.MailBuilder
    Dim smtpMail As SmtpMail = SmtpMail.CreateFromEmlFile("D:\ValidateDKIM\BadDKIM.eml")
    email = mb.CreateFromEml(smtpMail.RawEmlData)

     Using client As New Smtp()
            client.ConnectSSL("mailserver", 465)
            client.Login("mailserver", "password")
            Dim stream As System.Net.Security.SslStream = client.ReadStream()

            Dim reader As IO.StreamReader = New IO.StreamReader(stream)
            client.SendMessage(New SmtpMail("Mail Check", { "[email protected]","[email protected]"}, smtpMail.RawEmlData))
            client.Close()
    End Using

相关内容