为什么我无法向Hotmail发送电子邮件?

3

这是我的代码:

$boundary = sha1('whatever');

$headers = 'MIME-Version: 1.0'."\r\n";
$headers .= 'From: "Domainname" emailname@domain.com'."\r\n";
$headers .= 'Reply-to: Domainname <emailname@domain.com>'."\r\n";
$headers .= 'X-Priority: 3'."\r\n";
$headers .= 'X-Mailer: Mail 1.0'."\r\n";
$headers .= 'Subject: '.$subject."\r\n"; 
$headers .= 'Content-Type: multipart/alternative; boundary="'.$boundary.'"'."\r\n\r\n";

$message = '--'.$boundary."\r\n";
$message .= 'Content-Type: text/plain; charset="utf-8"'."\r\n\r\n";
$message .= $text."\r\n";
$message .= '--'.$boundary."\r\n";
$message .= 'Content-Type: text/html; charset="utf-8"'."\r\n\r\n";
$message .= $html."\r\n";
$message .= '--'.$boundary.'--';

mail($email, $subject, $message, $headers);

它适用于Gmail、Yahoo、GMX...但不适用于Hotmail/Live/MSN。

因为它适用于Gmail,所以我可以假设它与我的服务器无关,对吗?

我也尝试了只使用以下内容:

mail('username@hotmail.com', 'This is a subject', 'This is the body');

我也遇到了同样的问题,邮件甚至没有被发送到我的垃圾邮件文件夹中。

3个回答

7

原回答:

Hotmail会阻止没有SPF记录的域名。您可以在这里创建一个。

编辑:

截至2015年6月,常见要求为:

1)启用DKIM:在Exim中启用DKIM是减少电子邮件被标记为垃圾邮件的机会的一种非常重要的工具。强烈建议为您的域启用DKIM。

2)使用-all而不是~all的SPF记录

3)DMARC记录:帮助远程服务器决定如何处理失败的DKIM / SPF消息。

4)通常的要求包括:a)按发送IP进行反向IP查找,b)按rDNS值进行正向查找,最好指向同一IP,c)在主机名上设置MX记录。

示例:

"v=spf1 a mx ip4:1.2.3.4 -all"

其中1.2.3.4是您服务器的IP地址。


1
哇,这是我第一次听到有人提到SPF记录。我现在会尝试一下。谢谢! - user317005
没问题 :) 但你还需要正确的头部。也许你可以使用phpmailer类?这个类对各种类型的电子邮件都有很好的支持。 - Vince V.

1

微软依靠各种身份验证过滤器来确定电子邮件是否为垃圾邮件。

常见的行业做法包括检查所接收电子邮件中是否存在SPF验证、发件人ID和DKIM记录。

Sender ID Framework 是一种电子邮件认证技术协议,通过验证发送电子邮件的域名,有助于解决欺诈和网络钓鱼问题。

SPF(发件人策略框架)本质上是额外的DNS记录,直接指定远程邮件服务器应该从哪里接收邮件。

DKIM(DomainKey Identified Mail)是对旧版DomainKeys系统的更新实现,本质上是一种更复杂的SPF/邮件验证方法,要求使用私钥签署邮件,并根据DNS记录中找到的公钥进行检查。这本质上是SPF的更安全版本。

您可以向test@domain.com发送电子邮件以检查验证DKIM、DomainKeys、SPF、SpamAssassin和Sender-ID,当发送时,将返回一封电子邮件,确认验证结果。

然而,最近几个月,我发现即使在发送的电子邮件中包含这些元素,微软仍然会丢弃合法的电子邮件。微软建议使用Sender Path服务,这是一项付费认证服务。
但是,我发现一旦收件人将我们的电子邮件地址列为已保存的联系人,他们就可以正常收到我们的电子邮件。因此,我为我们的公司创建了一个vCard,并敦促使用Hotmail或Windows Live电子邮件服务的客户将vCard保存为联系人,以确保我们的电子邮件被正确传递。

1

所有的互联网服务提供商和邮件服务器都有不同的垃圾邮件检测方法和黑名单。你应该使用第三方代表你解决交付问题,例如SendGrid。通过SendGrid发送电子邮件与你现在所使用的方式一样简单。你可以查看这个例子。此外,他们还有相当公平的定价和免费层。

如果你正在使用EC2,那么你应该查看Amazon SES(简单电子邮件服务)。这里有FAQ


1
谢谢,但我真的不想为本应该正常工作的东西付费。 - user317005
3
我明白你不想支付看似如此简单和标准的东西。问题是,最终你会因为交付能力不佳而付出代价。试用一下这些服务的免费版本。如果你发送的电子邮件少于他们的免费配额,那么你将不需要支付任何费用并获得所有好处。如果你发送的邮件更多,那么你一定需要考虑使用第三方邮件投递服务。 - PPrice

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接