phpMailer没有抵达Hotmail?

时间:2015-05-14 12:39:35

标签: php phpmailer

设置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(); 
?>

这是SPF:

v=spf1 a mx include:secureserver.net ~all

所有这些都配置正确吗?

6 个答案:

答案 0 :(得分:5)

使用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

但是。取决于你是否可以控制你的SMTP,你应该确保正确设置反向dns查找等基本内容

由于评论中的讨论,我想添加一些关于我的思考的更多信息,了解SMTP Auth将解决这个问题的原因:

如果您使用的是没有定义SMTP-Server的PHPMailer,PHPMailer将以mail模式运行,该模式只会调用php的mail()函数。

邮件功能本身将使用PHP-INI文件中配置的smtp-settings或默认值,这些值列在此处:http://php.net/manual/en/mail.configuration.php

的默认值:

SMTP = "localhost" 
smtp_port = "25" 

由于OP配置了本地邮件服务器(或者为什么要设置MX记录?),php现在将连接到没有身份验证的SMTP服务器。服务器将接受该消息并将其发送到下一个服务器。

(如果使用unix'sendmail,则同样适用)

链中的每个服务器,尤其是接收服务器现在可以看到已使用私有 SMTP且身份验证已被提供。 这已经是Spam-Score超过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 

A之后的ESMTPA现在告诉接收服务器,Server1已使用mydomain.de上的有效用户帐户启动发送尝试,这意味着SMTP-Server 知道邮件的来源,并可提供有关发件人的信息。

尽管如此,本地SMTP服务器并不是已知的,因此在这种情况下,最终可能会出现灰名单并检查各种RBL,在这种情况下这不应该是任何问题。

如果(本地)SMTP服务器现在通过了所有检查(反向DNS查找,灰名单,RBL等等) - 即使没有使用远程smtp,邮件也很有可能成功传递,因为服务器可以成功通过身份验证,也可以使用该服务器进行身份验证。 (否则没有公司可以设置自己的服务器)

因此,即使没有使用远程SMTP服务器,使用SMTP-Auth(或任何其他身份验证方法)也会产生影响。

经过身份验证的邮件不能保证不会被视为垃圾邮件 - 但未经身份验证的邮件在普通系统的垃圾邮件评分中肯定排名更高。

答案 1 :(得分:0)

您是否在实时服务器上进行了测试?如果是的话,你得到了什么错误? 你启用了phpmailer的调试,知道它有什么错误吗?如果您不使用SMTP,可以使用此

进行测试

$mail->do_debug = true;

如果您使用的是SMTP,请使用

$mail->SMTPDebug = true;

您从调试器获得了什么输出?您可以从中找到问题所在的线索。

我还假设@ dognose的回答是要求你更好地使用SMTP。这样,您的电子邮件就会通过身份验证,这有助于表明您的身份已得到确认。

$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

如果$mail->Port = 26;不起作用,您可以尝试$mail->Port = 25;

答案 2 :(得分:0)

您的DNS目前正在发布的SPF无效,因为您有三条记录!:

# dig +short txt immortalinsurance.com
"v=spf1 a mx include:smtp.secureserver.net ~all"
"v=spf1 mx mx:v=spf1 a mx include:secureserver.net ~all include:secureserver.net -all"
"\"v=spf1 a\""

第一个是有效的;你应该删除后两个。

如果您要从182.50.130.73发送邮件,则此记录的内容对您的域名是正确的。 &#39; mx&#39; stanza并不是绝对必要的,因为无论如何它都指向secureserver.net,但它可以在接收服务器上保存DNS查找。

答案 3 :(得分:0)

在开始使用mail()或SMTP发送电子邮件之前,请确保在cpanel中创建有效的发件人电子邮件帐户。

From = "noreply@immortalinsurance.com";

如果不是您发送的所有电子邮件都被标记为垃圾邮件并进入垃圾邮件,这一点非常重要。

完成此操作后,您必须设置domainkeys和SPF记录。使用专用IP而不是使用主机提供的共享也有助于交付。

最后检查您的邮件与所有三个主要的电子邮件提供商,如Hotmail,Yahoo和Gmail。

答案 4 :(得分:0)

您可能需要一步一步地分解原因。我知道Hotmail正在使用基于规则的垃圾邮件过滤器(这是非常严格的),Gmail更像是一个自学系统,这可以解释为什么Gmail接受你的邮件而Hotmail没有。

以下您可以查看:

  1. spf-record仅适用于添加spf记录的域,仅适用于从该spf中定义的ips / domains发送的邮件。因此,请确保您的代码是从spf中存在的服务器执行的。
  2. 如上所述使用SMTP可以提高存活性(但它实际上取决于接收者和垃圾邮件过滤器)。如果您在本地服务器上进行测试,则可以使用SMTP通过spf中定义的邮件服务器发送邮件。否则
  3. 如果您使用的邮件服务器是开放中继,那么可能(并且可能会)是添加额外垃圾邮件点的原因。因此,请确保您使用的是封闭式中继(例如,您使用的邮件服务器不允许向未经身份验证的用户发送邮件)
  4. 检查您发送的邮件服务器是否不在任何黑名单上(http://mxtoolbox.com/blacklists.aspx提供了一个很棒的工具);
  5. 使用Gmail中的邮件标题查看Gmail是否认为有任何理由在邮件中添加垃圾邮件点数(如何:https://support.google.com/mail/answer/22454?hl=en)。在那里你可以找到你的spf是否有效(通过搜索&#39; spf = pass&#39;)。如果您的邮件将被删除到垃圾邮件文件夹中,这也可能适用于Hotmail。
  6. 垃圾邮件过滤器应用的众多规则之一是关键字检查(我认为您的邮件包含一些关闭),文本数量等。确保邮件的整体质量良好;
  7. PHPMailer默认使用php的邮件功能。您可以将此更改为sendmail($mail->isSendmail();,如果未正确设置sendmail,则可能无法在Windows上运行)或者可能检查您的php.ini设置使用了哪个邮件服务器(使用{{1}覆盖,但这只适用于Windows,据我所知)。

答案 5 :(得分:0)

有同样的问题。我已经检查了整个脚本30次。每个设置。并且,检查并重新检查dns记录dkim和spf 100次。

没有任何效果。

我通过电子邮件发送了关于此问题的hotmail / outlook / live。我没想到任何帮助,但在几个小时内问题就解决了。

它不在剧本中。 Hotmail只会阻止通过大多数网页发送的任何电子邮件。即使你的垃圾邮件声誉很好。他们将服务器的ip放在白名单上,问题就解决了。

如果发现不良行为,他们可以改回来。发送电子邮件是有限制的。如果您的服务器名声不好,则他们不太可能将服务器添加到白名单中。这可能是共享主机软件包上的问题。您托管网站的同一台服务器上的其他人可以提高服务器的声誉。