使用PHP发送邮件并避免被Hotmail的垃圾邮件过滤器拦截

7

我一直在尝试使用PEAR::mail成功地向hotmail用户发送电子邮件,而不被标记为SPAM并最终进入垃圾邮件文件夹,对于yahoo/gmail却没有任何问题,但是与hotmail存在问题。

谷歌建议这是一个常见的hotmail问题,可能的原因包括:

  • 服务器主IP的反向DNS不正确
  • 缺乏SenderId/SPF记录
  • 被列入黑名单

在检查了上述所有内容后,我只能想到另外一个原因-头信息格式错误?

为了测试这个理论,我设置Outlook通过与PEAR::mail相同的地址发送电子邮件,并发送了一个快速测试 - 它直接投递到我的收件箱中。

因此,我将从PEAR::mail发送的电子邮件头与Outlook发送的电子邮件头进行比较,发现只有几个差异 - 我仅列出差异以节省空间(和人们的眼睛)。

PEAR::mail头(不包含在Outlook头中)

X-PHP-Script: www.example.com/register.php for [users ip address]

Outlook头部信息(不包括PEAR::mail头部信息)

X-Mailer: Microsoft Office Outlook 11
Thread-Index: Ack6CWSQlgV8s6+6SWyifka2NNpB7g==
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.3350

我能看到的唯一其他差异是:

  • 发件人和收件人标头的顺序被颠倒了
  • 在标头的“已接收”部分

Outlook

Received: from myhomehostname.com ([ip address] helo=simber) 
by mywebhostname.com with local (Exim 4.67)

PEAR::mail

Received: from apache by mywebhostname.com with local (Exim 4.67)

这些头部的微小差异可能是原因吗?还是我在错误的地方寻找?我知道这可能会有问题,因此选择使用PEAR::mail类而不是自己编写代码,但现在我真的不知道该怎么办了,非常感谢任何帮助。
更新:根据changelog的建议,我尝试将MS头部添加到PEAR::mail类中,并尝试使用PHPMailer替换PEAR::mail(带或不带额外的头部)- 它们都最终进入垃圾邮件文件夹。
我开始相信这可能并不是头部的问题。
更新2:我应该提到这些电子邮件只是注册确认,以验证用户注册时使用的电子邮件地址 - 没有群发邮件等操作,因此我们的数量非常少。
我考虑警告提供@hotmail/live电子邮件地址的用户将我们添加到他们的通讯录中或检查垃圾邮件文件夹 - 但这对我来说似乎不专业 - 可能我必须采取这种方法。
至于成为发件人评分认证 - 考虑到这些电子邮件的低数量和目的,我很难证明这个成本。
4个回答

8

我的公司专业从事电子邮件营销活动(通过strongmail服务器),我们每天向各种地址发送数千封(经过征求同意的)电子邮件。

您面临的问题是您没有权限。您可能只是一些试图发送大量垃圾邮件的垃圾邮件发送者。

您需要做的事情是:

  • 添加退订链接
  • 申请hotmail的垃圾邮件报告计划(JMRP),并确保按下“这是垃圾邮件”按钮的人不会再次收到邮件。这将提高您在hotmail上的“发件人分数”,并允许您的消息通过。
  • 添加SPF和其他反垃圾邮件解决方案。
  • 不要向@hotmail.com发送超过50封电子邮件/分钟(其他域名有其他限制)

顺便说一句,我们使用PHPMailer来撰写我们的邮件,这一点都没有问题:-)现在问题真正出现在限制接收邮件服务器上。


7
电子邮件可达性更像是一门艺术而非科学。我可以几乎保证它与您的标头无关。尝试欺骗标题可能是您能做的最糟糕的事情。当邮件服务器接收到消息时,received: 标头将被添加:欺骗这将导致您的电子邮件被标记为垃圾邮件。常用的一种垃圾邮件过滤器是计算中继数量(即 received: 标头)。如果太多,则会获得更高的垃圾邮件评分。
反向DNS和SPF是最低的进入门槛。特别是对于hotmail而言,在您排除SPF和DNS记录之后,还有三个非常重要的因素:
  • IP/域名声誉
  • 容量
  • 在地址簿中
声誉并不等同于被列入黑名单。您需要与hotmail建立信任。Hotmail使用Sender Score Certified作为他们的主要信誉经纪人-如果您愿意,您可以检查您的信誉,但这可能需要花费您的钱。
如果您正在共享主机或具有不良历史记录的IP地址上,则无法在hotmail上获得成功。
通过具有低垃圾邮件投诉的一致容量来建立声誉。您可以每天全天发送1M条消息,只要每天都这样做。如果您每天发送少于10,000封电子邮件,则可能无法建立良好的声誉。您可以在Sender Base上获取有关您容量的报告。
最后,确保您的用户将发送电子邮件地址添加到他们的通讯录中,以确保您的邮件出现在收件箱中。Hotmail将其用作安全发件人列表。实际上,我认为Hotmail现在还有一个额外的受信任发件人选项(我已经很久没有参与此类工作了,也不使用hotmail)。
以下是发送电子邮件的其他最佳实践:
  • 始终使用相同的IP地址
  • 始终使用相同的发件人地址
  • 如果您有一个大型列表,向其发送新闻简报,请确保退休旧地址(即检查开放率)
  • 如果您有一个大型列表,请尝试根据风险(即较新的地址可能会将消息标记为垃圾邮件)对其进行分段并从不同的IP地址发送

1

我在我的项目中一直使用PHPMailer,为了避免Hotmail的垃圾邮件文件夹,我调用了他们的一个方法,将MS Headers添加到消息中。

看一下源代码,并自己添加这些头部信息。

此外,如果您发送HTML电子邮件,我建议包括文本版本。


0
我建议您修改发送的标题,使其与Outlook发送的完全匹配,并查看是否解决了问题。但实际上这是一个棘手的问题,Hotmail以拥有超级糟糕的垃圾邮件过滤器而闻名,将许多合法的电子邮件发送到垃圾邮件中,同时将大量垃圾邮件发送到您的收件箱中。

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