我正在通过我控制的 SMTP 服务器使用 PHPMailer 发送电子邮件,并且我已经设置了 DKIM 和 SPF 并且它们运行正常,但是,当我向我的 gmail 帐户发送测试电子邮件时,它会立即进入垃圾邮件文件夹,并声称我的电子邮件与他们的垃圾邮件过滤器检测到的邮件相似。
但是,如果我随后使用 Outlook 通过同一个 SMTP 服务器发送完全相同的消息,它就不会被过滤为垃圾邮件。
这些是垃圾邮件的标题
Delivered-To: [email protected]
Received: by 10.227.117.6 with SMTP id o6csp468220wbq;
Thu, 16 Aug 2012 00:21:15 -0700 (PDT)
Received: by 10.43.117.129 with SMTP id fm1mr196323icc.1.1345101675202;
Thu, 16 Aug 2012 00:21:15 -0700 (PDT)
Return-Path: <bounce+95719fab75@my_smtp_server_domain.com>
Received: from mailapproved.com (mailapproved.com. [199.195.193.140])
by mx.google.com with ESMTP id s18si1547632igi.61.2012.08.16.00.21.14;
Thu, 16 Aug 2012 00:21:15 -0700 (PDT)
Received-SPF: pass (google.com: domain of bounce+95719fab75@my_smtp_server_domain.com designates 199.195.193.140 as permitted sender) client-ip=199.195.193.140;
Authentication-Results: mx.google.com; spf=pass (google.com: domain of bounce+95719fab75@my_smtp_server_domain.com designates 199.195.193.140 as permitted sender) smtp.mail=bounce+95719fab75@my_smtp_server_domain.com; dkim=pass [email protected]
Received: from ml.my_smtp_server_domain.com.com (ml.my_smtp_server_domain.com.com [199.195.193.133])
by my_smtp_server_domain.com.com (Postfix) with ESMTPA id E3CC68E057
for <[email protected]>; Thu, 16 Aug 2012 07:21:12 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=my_smtp_server_domain.com;
s=server1; t=1345101672;
bh=TsyHxri8hUJjEnMBm8JUJzfLs5a3ea9aRZQ15toMNyQ=;
h=Date:To:From:Reply-to:Subject:List-Unsubscribe;
b=hOUSOx/fN8ZwTlEp4KBAKSGRZHgH6kSj0xUeLlq8J2JGBEE2x6c2b5sh/nFwqx45T
kuorzu3TsLDDMHCBLmSNLfrYWqyCzkT4Iwh1NJlCL5zm4GwYDXVrVsd+6AjJNfzPN+
W5idEJ62+MCgsMqgCd6gmpACMcqntgwgp+WcLKFc=
Date: Thu, 16 Aug 2012 15:21:12 +0800
To: Me <[email protected]>
From: Someone <no-reply@my_smtp_server_domain.com>
Reply-to: No Reply <no-reply@my_smtp_server_domain.com>
Subject: Welcome to Blah
Message-ID: <[email protected]_smtp_server_domain.com>
List-Unsubscribe: <mailto:unsubscribe@my_smtp_server_domain.com?subject=Unsubscribe>, <http://ml.my_smtp_server_domain.com.com/unsubscribe/e783daa664>
MIME-Version: 1.0
Content-Type: multipart/alternative;
boundary="b1_f2039f590798697bc998c686920020df"
这里有两个服务器:my_smtp_server_domain.com 是 SMTP 服务器,ml.my_smtp_server_domain.com 是一个邮件应用程序(用于向双重 OP 的人发送合法的新闻通讯)。
该消息本身只是一封简单的邮件列表确认电子邮件。
我不明白为什么使用 Outlook 时可以工作,而使用 PHPmailer 时却失败,有什么不同?
答案1
Outlook 和 PHPMailer 或任何其他邮件程序发送的标头都不同。许多垃圾邮件过滤器会在检测到此类标头时自动增加邮件的垃圾邮件分数。这可能是因为它们在垃圾邮件中非常普遍。
第一步,删除所有将发送系统标识为 PHPMailer 的标头。如果这没有帮助,请查看邮件本身并尝试修改它,使其看起来不那么像垃圾邮件,因为您的邮件可能处于边缘状态。
答案2
我在使用 PHPMailer 时遇到了同样的问题,下面是解决问题的方法:将发件人(这与“发件人”不同)设置为您发送电子邮件的域的有效电子邮件帐户。这会导致 PHPMailer 正确设置“信封发件人”信息,以便电子邮件通过 SPF 和发件人 ID 验证。如果不这样做,“信封发件人”就是操作系统级别的用户 ID 和服务器组合,无法验证。希望这对您有所帮助。
示例代码:
$mail = new PHPMailer;
$mail->From = '[email protected]';
$mail->Sender = '[email protected]';
...