设置SPF记录后,我仍然在这里验证为什么我无法收到此电子邮件到hotmail帐户.我可以毫无问题地将它发送到Gmail.请确认代码是否正确,SPF记录是否正确:
<?php
require_once 'PHPmailer/class.phpmailer.php';
$mail = new PHPMailer();
$body = "Thankyou for your Purchase. <br/><br/> Here is your Policy! You are now Protected during your Travels.";
$mail->AddAddress('$payer_email');
$mail->From = "noreply@example.com";
$mail->FromName = "Name";
$mail->Subject = "Thankyou for Your Purchase";
$mail->MsgHTML($body);
$mail->AddAttachment("tosend/xxx.pdf");
if(!$mail->Send()) {
echo "There was an error sending the message";
$sql = "UPDATE purchases SET policy_sent = 'Not Sent' WHERE id = '$lastid' ";
$stmt = $mysqli->query($sql);
$mysqli->close();
exit;
}
echo "Message was sent successfully";
$sql = "UPDATE purchases SET policy_sent = 'Sent', email_to = '$payer_email' WHERE id = '$lastid'";
$stmt = $mysqli->query($sql);
$mysqli->close();
?>
Run Code Online (Sandbox Code Playgroud)
这是SPF:
v=spf1 a mx include:secureserver.net ~all
Run Code Online (Sandbox Code Playgroud)
所有这些都配置正确吗?
使用SMTP验证,然后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
Run Code Online (Sandbox Code Playgroud)
但是.根据您是否可以控制SMTP,您应该确保正确设置反向dns查找等基本内容
由于评论中的讨论,我想添加一些关于我为什么SMTP Auth将解决此问题的想法的信息:
如果您使用的是没有SMTP服务器定义的PHPMailer,PHPMailer将以mail模式运行,这将只调用mail()php 的功能.
邮件函数本身将使用PHP-INI文件中配置的smtp-settings或默认值,这些值列在此处:http://php.net/manual/en/mail.configuration.php
默认值:
SMTP = "localhost"
smtp_port = "25"
Run Code Online (Sandbox Code Playgroud)
由于OP配置了本地邮件服务器(或者为什么要设置MX记录?),php现在将连接到没有身份验证的SMTP服务器.服务器将接受该消息并将其发送到下一个服务器.
(如果使用unix'sendmail,则同样适用)
链中的每个服务器(尤其是接收服务器)现在都可以看到已使用私有 SMTP 且未提供身份验证.这已经是垃圾邮件分数超过9000,因为有这样的设置(理论上)每个人都可以使用该服务器发送邮件!仅限来自localhost的限制是有效的.其他服务器不知道,因此SMTP被认为是一个开放邮件中继 http://en.wikipedia.org/wiki/Open_mail_relay
将PHPMailer切换为SMTP-Auth(如果仍然使用本地SMTP服务器,则将此信息)添加到转发邮件时由服务器创建的条目.条目将如下所示:
Received: from SERVER1 ([xxx.xxx.xxx.xx]) by mydomain.de with ESMTPA
Run Code Online (Sandbox Code Playgroud)
尾随A之后ESMTPA,现在告诉接收服务器,是Server1采用了一个有效的用户帐户mydomain.de,开始搬出的尝试,这意味着SMTP-服务器知道该邮件的来源,并能提供有关发件人.
仍然,本地SMTP服务器不是已知的,因此在这种情况下,它可能最终成为灰名单并检查各种RBL,在这种情况下不应该是任何问题.
如果(本地)SMTP服务器现在通过所有检查(反向DNS查找,灰名单,RBL和什么不是) - 即使没有使用远程smtp,邮件也很有可能成功传递,因为服务器可能是已成功通过身份验证以及使用该服务器的发件人.(否则没有公司可以设置自己的服务器)
因此,即使没有使用远程SMTP服务器,使用SMTP-Auth(或任何其他身份验证方法)也会产生影响.
经过身份验证的邮件并不能保证不会被视为垃圾邮件 - 但未经身份验证的邮件在常见系统的垃圾邮件评分中肯定排名更高.
小智 0
有同样的问题。整个剧本我已经检查了30遍。各设定各。并且,检查并重新检查 dns 记录 dkim 和 spf 100 次。
什么都没起作用。
我向 hotmail/outlook/live 发送了有关该问题的电子邮件。我没想到会得到任何帮助,但几个小时内问题就得到了解决。
剧本里没有。Hotmail 仅阻止通过大多数网页发送的任何电子邮件。即使您的垃圾邮件声誉很好。他们已将服务器的IP列入白名单,问题就解决了。
如果他们发现不良行为,可以将其更改回来。发送电子邮件有限制。如果您的服务器声誉不佳,他们不太可能将该服务器添加到白名单中。这可能是共享托管包的问题。您托管网站的同一服务器上的其他人可能会破坏服务器的声誉。