在一些没有收到的电子邮件中 - 特别是那些通过“批量”服务发送的 – 我得到一个DKIM失败:“签名validation失败”。 这里有一个例子:
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”中input“PASSED”
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=;
为什么我同时得到“失败”和“通过”,我需要做些什么来解决这个问题?
杰森,你有可能改变c=simple/simple到c=relaxed\relaxed ? 我曾多次看到不同的DKIMvalidation器与空白折叠拼搏。 你说这只是“Bulk”的失败,所以告诉我你是通过SMTP服务发送出去的,这使得我更倾向于认为头被重写,简单/简单的空白折叠是罪魁祸首。 你也可以运行邮件testing ,它将使用4个不同的DKIMvalidation器进行testing – 如果全部都失败了。 当您通过该批量服务发送时,可能会发生什么情况。
由于您收到电子邮件,您仍然可以重新处理该电子邮件,并使用另一个validation器检查DKIM。 当我认为我的电子邮件服务器可能正在处理DKIM错误时,这是我为了理智检查而做的。 我使用Limilabs Mail.dll来处理EML的发送,但是您可以使用您熟悉的任何编程语言来使用它。 DKIM保持不变,您可以使用在线自动回复器对其他DKIMvalidation器进行validation。
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