使用 SMTP Auth,那么 Hotmail 就不会再抱怨了。几乎所有接收服务器都将匿名邮件视为垃圾邮件。
$mail->SMTPAuth = true; // enable SMTP authentication
$mail->Host = "mail.yourdomain.com"; // sets the SMTP server
$mail->Port = 26; // set the SMTP port
$mail->Username = "yourname@yourdomain"; // SMTP account username
$mail->Password = "yourpassword"; // SMTP account password
但是ofc。取决于您是否可以控制 SMTP,您应该确保反向 dns-lookup 等基本内容已正确设置
由于评论中的讨论,我想添加更多有关我的信息thinking关于为什么 SMTP Auth 会解决这个问题:
如果您在没有定义 SMTP 服务器的情况下使用 PHPMailer,PHPMailer 将在mail
模式,这只会调用mail()
php 的函数。
邮件功能本身将使用 PHP-INI 文件中配置的 smtp 设置或默认值,如下所示:http://php.net/manual/en/mail.configuration.php http://php.net/manual/en/mail.configuration.php
默认值:
SMTP = "localhost"
smtp_port = "25"
由于 OP 已经配置了本地邮件服务器(或者为什么他要设置 MX 记录?),php 现在将无需身份验证即可连接到该 SMTP 服务器。服务器将接受该消息并将其发送到下一个服务器。
(如果使用unix'sendmail,同样适用)
中的每个服务器chain尤其是接收服务器现在可以看到,private已使用 SMTP 并且no已提供身份验证。
这已经是 Spam-Score 超过 9000 的原因了,因为这样的设置(理论上)everyone可以使用该服务器发送邮件!
限制如仅来自本地主机是ofc。其他服务器不知道,因此 SMTP 被认为是打开邮件中继 http://en.wikipedia.org/wiki/Open_mail_relay http://en.wikipedia.org/wiki/Open_mail_relay
将 PHPMailer 切换到 SMTP-Auth(即使仍然使用本地 SMTP 服务器)会将此信息添加到转发邮件时服务器创建的条目中。该条目将如下所示:
Received: from SERVER1 ([xxx.xxx.xxx.xx]) by mydomain.de with ESMTPA
尾随的A
after ESMTPA
现在告诉接收服务器,Server1
已使用有效的用户帐户mydomain.de
开始尝试发送,这意味着 SMTP 服务器knows邮件的来源,并可以提供有关发件人的信息。
不过,本地 SMTP 服务器不是已知的服务器,因此在这种情况下,它最终可能会被列入灰名单并在各种 RBL 上进行检查,这在这种情况下应该不会有任何问题。
如果(本地)SMTP 服务器现在通过了所有检查(反向 DNS 查找、灰名单、RBL 等) - 即使不使用远程 smtp,邮件也很有可能成功投递,因为服务器可能会以及使用该服务器的发件人已成功通过身份验证。 (否则任何公司都无法建立自己的服务器)
因此,即使不使用远程 SMTP 服务器,使用 SMTP-Auth(或任何其他身份验证方法)也会产生影响。
经过身份验证的邮件并不能保证不被视为垃圾邮件 - 但未经身份验证的邮件在常见系统的垃圾邮件分数中肯定排名较高。