我们正在运行 Postfix MTA(版本:3.4.14,操作系统:Debian 10),并且自短时间内发送到某个提供商(Web.de/GMX)的电子邮件不再被接受(这些电子邮件由一个古老的 Perl 程序发送,该程序迄今为止一直运行可靠):
Jan 26 10:21:51 hostname postfix/smtp[24531]: 5915310CD43: to=<[email protected]>, relay=mx-ha02.web.de[212.227.17.8]:25, delay=0.34, delays=0. 01/0/0.18/0.15, dsn=5.0.0, status=bounced (host mx-ha02.web.de[212.227.17.8] said: 554-Transaction failed 554-Reject due to policy restrictions. 554 For explanation visit https://web.de/email/senderguidelines?ip=1.3.5.2&c=hi (in reply to end of DATA command))
我给Web.de的运营商发了一封邮件,得到了以下答复:
如果电子邮件标题中给出的信息不符合 RFC 5321 和 RFC 5322 中的规范,电子邮件将被我们的邮件系统拒绝。这包括以下几点:
- 以下标题在语法上必须正确:日期、发件人、发件人、收件人
- 标题 BCC、CC、日期、发件人、发件人、主题和收件人不得出现超过一次。
因此,请检查系统提供的信息是否正确,如有必要,请联系系统管理员。另请注意我们的发件人指南:
我检查了标题,它们只出现一次(这是我发送到我的私人电子邮件地址的电子邮件):
Return-Path: <[email protected]>
Delivered-To: [email protected]
Received: from mail.mypersonalmta.com
by mail.mypersonalmta.com with LMTP
id Mj4HKoIHEGATFAAA8lfkpQ
(envelope-from <[email protected]>)
for <[email protected]>; Tue, 26 Jan 2021 13:13:54 +0100
Received: from sender.com (sender.com [1.1.1.1])
by mail.mypersonalmta.com (Postfix) with ESMTPS id 311DC3EBDA
for <[email protected]>; Tue, 26 Jan 2021 13:13:54 +0100 (CET)
Received: by sender.com (Postfix, from userid 33)
id DFAF110CBE9; Tue, 26 Jan 2021 13:13:51 +0100 (CET)
X-Priority: 3 (Normal)
Reply-to: "My Name" <[email protected]>
From: "My Name" <[email protected]>
To: "My Name" <[email protected]>
Subject: =?UTF-8?B?U2VydmVya29uZmlndXJhdGlvbg==?=
Mime-Version: 1.0
Content-type: multipart/mixed;
boundary="==Serviceplaner==multipart/mixed==0=="
Message-Id: <[email protected]>
Date: Tue, 26 Jan 2021 13:13:51 +0100 (CET)
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=mydomain.com;
s=dk100; t=1611663234;
h=from:from:reply-to:reply-to:subject:subject:date:date:
message-id:message-id:to:to:cc:mime-version:mime-version:
content-type:content-type; bh=b1FPU+OUKvDQDm+TJNNJ4gnjC2tvP3esicGNZxlMRGU=;
b=NGDHmG4XaGZYCkDB4iT7MlzYTREHbpL5QrJZm1guR2CsL18B6efRf7SU+roM+p9vaY/8VI
5g77bu9XiQ1Uz9g2wqHfKQ45Kh7pPjlxxT9gugKBi+Wb0eo0oQQ/C+dLe/LdRRZqnY+4Gc
lnmpO6FXv9i7sfNXkcHUq62UPQIBT40=
ARC-Seal: i=1; s=dk100; d=mydomain.com; t=1611663234; a=rsa-sha256;
cv=none;
b=xMVJHET/VP+NQdzb2osJo1BVLMgCX60/0SL9ZSywsJiDEkUReK8wedi2Ahw+kSBypj+XWO
TKH7/OZjWxbzUlKeMqFo4kLpHj2ygIu2ThXpYXYbW/D+tNG7CK7f3byz+j8myaddressGj+g9hQ05
I0LnjAInYPniK8qGsFJG4sXvrUb/7CY=
ARC-Authentication-Results: i=1;
mail.mypersonalmta.com;
dkim=none;
spf=pass (mail.mypersonalmta.com: domain of [email protected] designates 1.1.1.1 as permitted sender) [email protected]
X-Spamd-Bar: ++++
X-Spam-Level: ****
Authentication-Results: mail.mypersonalmta.com;
dkim=none;
dmarc=none;
spf=pass (mail.mypersonalmta.com: domain of [email protected] designates 1.1.1.1 as permitted sender) [email protected]
我不知道如何检查电子邮件标头的语法是否正确且是否符合 RFC5321/RFC5322。我有一个想法,但我不太确定:可能是因为主题标头中有 UTF8(转换为 ASCII 的 UTF-8 可能存在问题,我不知道)?在这种情况下您将如何处理?有什么想法吗?:)
答案1
提到修复邮件语法的样板不太可能表明具体存在问题 - 这只是您要做的事情之一能尽管你可能无能为力,例如他们(或他们的信息来源,即 Spamhaus)不喜欢你的托管服务提供商。
一个常见的问题是,由于折叠不一致,收件人看到的标题与您看到的标题不同。
您可能会无意中提前结束标头,从而缺少强制性标头 - 或者在没有 CRLF 的情况下结束一个正文部分,因此收件人无法使用多部分边界,假设邮件不完整。
让其他程序解析你的邮件 - 你的原始邮件,而不是你的编辑器已经整齐地规范化所有内容的复制粘贴版本行尾与 单\n
。
cat ~/MAIL/Sent/cur/ui.uid.a,S | python3 -c 'import sys,email,email.policy; print("\n".join(part.get_content_type() for part in email.message_from_file(sys.stdin, policy=email.policy.SMTP+email.policy.strict).walk()))'