如何确保以编程方式发送的电子邮件不会自动标记为垃圾邮件?

How do you make sure email you send programmatically is not automatically marked as spam?

这是一个棘手的问题,我一直依赖于一些技术,例如基于权限的电子邮件(即只发送给您有权发送的人),而不是使用公然的垃圾术语。

最近,我以程序方式发送的一些电子邮件已经开始自动地被转移到人们的垃圾邮件文件夹中,我想知道我能做些什么。

这是尽管事实上,这些特定的电子邮件不是人类会标记为垃圾邮件的电子邮件,特别是,它们包含的许可证密钥,人们已经支付了很高的钱,所以我认为他们不会认为它们是垃圾邮件。

我认为这是一个大话题,我本质上是一个无知的傻瓜。


使用电子邮件身份验证方法,如SPF和DKIM来证明您的电子邮件和域名属于同一个类别,并防止欺骗您的域名。SPF网站包含一个向导,用于生成站点的DNS信息。

检查反向DNS以确保邮件服务器的IP地址指向用于发送邮件的域名。

确保您使用的IP地址不在黑名单中

确保答复地址是有效的现有地址。

在"收件人"字段中使用收件人的全名,而不仅仅是电子邮件地址(如"John Smith" )。

监控您的滥用帐户,如[email protected][email protected]。这意味着-确保这些帐户存在,阅读发送给他们的内容,并对投诉采取行动。

最后,让退订变得非常容易。否则,您的用户将按垃圾邮件按钮取消订阅,这将影响您的声誉。

这就是说,让hotmail接受您的电子邮件仍然是一种黑色艺术。


在尽可能多的主要电子邮件提供商(gmail/yahoo/hotmail/aol/etc)注册帐户。如果您对电子邮件进行了更改,或者进行了重大修改、更改了发送电子邮件的代码、更改了电子邮件服务器等,请确保将测试邮件发送到所有帐户,并验证它们没有被标记为垃圾邮件。


您可以告诉您的用户在他们完成订单时将您的"发件人地址"添加到他们的联系人中,如果他们这样做,将有很大帮助。

否则,我将尝试从您的一些用户那里获取日志。有时他们会详细说明为什么在邮件头中将其标记为垃圾邮件,您可以使用它来调整文本。

其他你可以尝试的事情:

  • 在主题中输入您的站点名称或地址
  • 保留邮件中指向您的域的所有链接(而不是email.com)
  • 在电子邮件中输入地址或其他联系信息

前一个答案中的几个要点:

  • 最重要的是:发件人地址("发件人")是否属于在发送电子邮件的服务器上运行的域?如果没有,就这么做。不要使用像[email protected]这样的发送方地址。用户reply-to如果您需要回复到其他地址。

  • 您的服务器是否在黑名单上(例如,检查spamhaus.org上的IP)?这是一种可能性,当你在共享主机时,邻居表现不好。

  • 邮件是通过垃圾邮件过滤器过滤的吗?用一个有垃圾邮件文件夹的免费邮箱打开一个帐户,然后找出答案。另外,尝试将邮件发送到一个完全没有垃圾邮件过滤的地址。

  • 您可能需要mail()的第五个参数"-f"来添加发件人地址吗?(请参见PHP手册中的mail()命令)

  • 当然,如果您有权访问日志文件,请检查这些文件。

  • 您是否检查了"发件人:"地址中可能有退回邮件("退回给发件人")?您还可以设置一个单独的"错误到"地址。


发送电子邮件前,请确认您的电子邮件地址正确。如果有人在注册时给出了错误的电子邮件地址,请尽快打他们的头。

在每封电子邮件中始终包含明确的"如何取消订阅"信息。不需要用户登录到取消订阅,它应该是一个唯一的URL,用于单击"取消订阅"。

这将防止人们将您的邮件标记为垃圾邮件,因为"取消订阅"太难了。


除了所有其他答案外,如果您发送的HTML电子邮件包含链接文本的URL,请确保该URL与链接文本匹配。我知道雷鸟会自动标记他们是一个骗局,如果不是。

错误的方式:

正确的方法:

或者使用不相关的链接文本而不是URL:


发送电子邮件有时就像黑色魔法。反向DNS非常重要。

我发现仔细跟踪NDR非常有帮助。我将所有的NDR都指向一个地址,并且有一个Windows服务解析它们(GoogleListnanny)。我把尽可能多的来自发改委的信息放到数据库中,然后对其运行报告,看看我是否突然被某个域阻塞了。此外,您应该避免向以前标记为NDR的地址发送电子邮件,因为这通常是垃圾邮件的一个好迹象。

如果你需要一次发送一堆客户服务邮件,最好在每一封邮件之间加上一个延迟,因为如果你一次向一个域发送太多几乎相同的邮件,你肯定会被列入他们的黑名单。

有些领域有时是不可能交付的。Comcast.net是最差的。

确保您的IP没有在http://www.mxtoolbox.com/blacklists.aspx等网站上列出。


您可以考虑使用第三方电子邮件服务来处理交付问题:

  • 精确目标
  • 垂直响应
  • 常接触
  • 活动监视器
  • 艾玛
  • 返回路径
  • 智能联系人
  • 银发

我不想告诉你,但我和其他人可能使用白名单默认值来控制垃圾邮件的过滤。

这意味着来自未知来源的所有电子邮件都是自动垃圾邮件,并转移到垃圾邮件文件夹中。(我不允许我的电子邮件服务删除垃圾邮件,因为我总是想查看收到的邮件中是否有误报,这是通过快速扫描文件夹很容易做到的。)

我甚至有自己的电子邮件去垃圾邮件桶,因为(1)我通常不给自己发送电子邮件,(2)有垃圾邮件制造者在发送给我的垃圾邮件中伪造我的返回地址。

因此,为了摆脱垃圾邮件的指定,我必须考虑您的邮件可能是合法的(来自发件人和主题信息),并首先以明文(我对所有收到的邮件的默认值,无论是否为垃圾邮件)打开它,以查看它是否合法。我的垃圾邮件文件夹不会在电子邮件中使用任何链接,因此我可以防止棘手的图像链接和其他错误行为。

如果我希望将来从同一个来源到达的人进入我的收件箱,而不是被转移到垃圾邮件审查,我将把它指定给我的电子邮件客户机。对于那些使用批量邮件转发器和每个邮件的唯一发件人地址的组织来说,这太糟糕了。他们从来没有得到我的批准,总是出现在我的垃圾邮件文件夹,如果我很忙,我永远不会看他们。

最后,如果一封电子邮件在纯文本中不清晰,即使是以HTML形式发送,我可能会删除它,除非我知道它是我感兴趣的东西,因为它的来源和以前的宝贵经验。

正如您所看到的,它最终是由用户控制的,并且没有自动化的行为可以使这样一个系统相信您的邮件仅从其结构上是合法的。在这种情况下,您需要表现得很好,不要做任何类似于网络钓鱼的事情,并且让愿意信任您的邮件的用户很容易将您添加到他们的白名单中。


Yahoo使用一个名为sender id的方法,可以在SPF安装向导中配置该方法并将其输入到DNS中。对于Exchange、hotmail、aol、yahoo和其他应用程序来说,重要的一点是为您的域设置反向DNS。这将解决大部分问题。然而,你永远不能阻止一个人故意阻止你的或自定义规则。


我的应用程序的一封电子邮件经常被标记为垃圾邮件。它是带有一个链接的HTML,我在正文中以HTML的形式发送,内容类型为text/html。

我对这个问题最成功的解决方案是撰写电子邮件,所以它看起来像是由电子邮件客户端生成的。

我将电子邮件改为多部分/可选的mime文档,现在生成了text/plain和text/html两个部分。

Outlook不再检测到该电子邮件为垃圾邮件。


您需要一个反向DNS条目。您不需要向同一用户发送相同的内容两次。你需要用一些常见的网络邮件和电子邮件客户端来测试它。就我个人而言,我查过一个新安装的垃圾邮件刺客,一个训练有素的垃圾邮件刺客,以及多个hotmail、gmail和aol帐户。

但是你有没有看到那些看起来没有链接或广告的垃圾邮件?这是一个垃圾邮件发送者试图影响你的贝叶斯过滤器。如果他能得到一个很高的评价,然后在他未来的邮件中包含一些单词,这可能是自动学习的好。所以你不能真的猜测在你邮寄的时候用户的过滤器会被设置成什么。

最后,我没有按域对列表进行排序,而是将其随机分组。


我发现,在正文中使用收件人真实的名字和姓氏是通过垃圾邮件过滤器的一种绝对有效的方法。


在英国,最好的做法是为您的公司提供一个真实的实际地址及其注册号码。

这样一来,它就完全公开和诚实了,而且他们不太可能手动将其标记为垃圾邮件。


我会补充:

点击"取消订阅",提供真正的取消订阅。我已经看到真实的新闻稿提供了一个虚拟的取消订阅链接,点击显示"已成功取消订阅",但我仍然会收到更多的新闻稿。


你能做的最重要的事情就是确保你发送邮件的人在收到你的邮件时不可能点击"垃圾邮件"按钮。因此,请遵循以下经验法则:

  • 确保您拥有向其发送电子邮件的人的权限。永远不要向没有向你请求的人发送电子邮件。

  • 在每封邮件的顶部清楚地标识出你是谁,以及为什么有人收到邮件。

  • 每月至少一次,向列表中的人发送一封提醒邮件(如果您正在运行列表),强制他们选择返回列表,以便继续接收来自您的通信。是的,这意味着你的名单会随着时间的推移而变短,但最重要的是,你名单上的人是"被收买的",并且不太可能标记你的电子邮件。

  • 保持你的内容高度相关和有用。

  • 给人们一个简单的方法来选择退出进一步的交流。

  • 使用像sendgrid这样的电子邮件发送服务,它努力保持良好的IP信誉。

  • 避免使用短链接-这些经常被列入黑名单。

遵循这些经验法则会有很长的路要走。


在过去的工作中,我在很多网站上也遇到过同样的问题。确保用户收到电子邮件的唯一保证方法是建议用户将您添加到安全列表中。任何其他的方法都只能是对它有帮助的,而且不能保证。


很可能是这样的,注册你的服务的人输入的电子邮件中有你不改正的输入错误。例如:[email protected][email protected]

这些域被配置为用作SPAMTRAP,它将自动标记电子邮件服务器的IP和/或域,并损害其声誉。

要避免这种情况,请仔细检查产品订阅时输入的电子邮件地址。此外,在您发送产品密钥或接受其订阅之前,请发送确认电子邮件,以确保此电子邮件地址由输入确认电子邮件的人100%验证。验证电子邮件应要求收件人单击链接或回复,以真正确认邮箱的所有者是注册者。


听起来你是在依靠一些反馈来决定什么会卡在接收端。您应该亲自检查出站邮件是否存在明显的"垃圾邮件"。

购买任何像样的垃圾邮件控制系统,并通过它发送出站邮件。如果您发送的邮件量足够大,那么无论如何都应该这样做,因为有发送出站病毒的风险,特别是如果您有桌面Windows用户。

例如,Proofpoint在单个部署中具有垃圾邮件+反病毒+一些声誉服务。(我以前在那里工作过,所以我不知道这件事。我敢肯定这个领域的其他供应商也有类似的功能。)但你知道。如果你通过一个基本的商业垃圾邮件控制设置发送你的邮件,但它没有通过,它不应该离开你的网络。

此外,还有一些公司可以帮助您提高非垃圾邮件、出站电子邮件(如人身攻击)的发送率。


谷歌对此有一个工具和指导方针。您可以在:https://postmaster.google.com/注册并验证您的域名,google提供该IP地址和域名的单独评分。

根据批量发件人指南:

身份验证确保您的消息可以正确分类。缺乏身份验证的电子邮件可能会被拒绝或放在垃圾邮件文件夹中,因为它们很可能是用于网络钓鱼欺诈的伪造邮件。此外,出于安全原因,未经验证的带有附件的电子邮件可能会被彻底拒绝。

为了确保Gmail能够识别您:

  • 使用一致的IP地址发送批量邮件。
  • 为指向您的域发送邮件的IP地址保留有效的反向DNS记录。
  • 在您发送的每个批量邮件的"发件人:"标题中使用相同的地址。我们还建议:

  • 用dkim签署消息。我们不使用少于1024位的密钥对签名的消息进行身份验证。

  • 发布SPF记录。
  • 发布DMARC策略。

我总是使用:https://www.mail-tester.com网站/

它给了我关于发送电子邮件的技术部分的反馈。像SPF记录,dkim,spamasassin分数等等。即使我知道需要什么,我也会不断地犯错误,mail-tester.com让我很容易找出可能是什么问题。