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

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

提问人:Leon Bambrick 提问时间:8/2/2008 最后编辑:Mathew ThompsonLeon Bambrick 更新时间:6/19/2022 访问量:117476

问:

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

最近,我以编程方式发送的一些电子邮件开始自动进入人们的垃圾邮件文件夹,我想知道我能做些什么。

尽管这些特定的电子邮件不是人类会标记为垃圾邮件的电子邮件,具体来说,它们是包含人们花了很多钱购买的许可证密钥的电子邮件,所以我认为他们不会认为它们是垃圾邮件

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

电子邮件 垃圾邮件

评论


答:

25赞 Daniel Broekman 8/2/2008 #1

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

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

您可以尝试的其他方法:

  • 在主题中输入您的网站名称或地址
  • 保留邮件中指向您的网域的所有链接(而不是 email.com)
  • 在电子邮件中输入地址或其他联系信息
354赞 Michiel de Mare 8/2/2008 #2

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

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

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

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

在“收件人”字段中使用收件人的全名,而不仅仅是电子邮件地址(例如 )."John Smith" <[email protected]>

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

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

也就是说,让 Hotmail 接受您的电子邮件仍然是一门黑艺术。

评论

26赞 Jonas 6/9/2010
brandonchecketts.com/emailtest.php,您可以测试您的邮件服务器设置是否符合 DomainKeys、DKIM、SPF 和其他反垃圾邮件方法。
3赞 clyfe 8/18/2010
此外,制作一个 bounced-emails-detection-algoritm 来验证错误的电子邮件地址(例如,如果邮件被退回 3 次,请停止向该地址发送邮件)
12赞 Halil Özgür 6/6/2012
+1 表示“也就是说,让 Hotmail 接受您的电子邮件仍然是一门黑色艺术。”Hotmail 对垃圾邮件和非垃圾邮件几乎没有区分。所有内容都在收件箱或垃圾邮件箱中(基于您的设置)。
1赞 M. Mimpen 2/24/2014
@HalilÖzgür 如今,Hotmail,或者更确切地说 Outlook.com 在过滤垃圾邮件方面做得很好。除此之外,它还“知道”电子邮件何时是时事通讯(并指出这一点)
2赞 Dana Wheeler 5/9/2017
Brandon Checketts 将他的邮件服务器一致性工具移至:dkimvalidator.com
14赞 Nick Berardi 8/2/2008 #3

Yahoo 使用一种称为发件人 ID 的方法,可以在 SPF 设置向导中配置并输入到您的 DNS 中。对于 Exchange、Hotmail、AOL、Yahoo 和其他公司来说,重要的一个是为您的域提供反向 DNS。这些将消除大多数问题。但是,您永远无法阻止某人故意阻止您的规则或自定义规则。

评论

3赞 Dan Udey 2/9/2009
Yahoo 使用 SPF 记录和 DomainKeys;SenderID 是一种不同的(在许多方面不兼容、不安全且设计不佳)技术,不应使用。
30赞 thelsdj 8/3/2008 #4

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

评论

3赞 Jon Adams 1/3/2017
一些垃圾邮件系统会考虑个人的阅读习惯。(来自此发件人的电子邮件是否会被阅读或未经阅读就被删除?等等)因此,这肯定会帮助您找到它们何时被标记(真阴性),但此步骤并不能证明它们不会用于同一系统上的其他用户(误报)。
23赞 engtech 8/3/2008 #5

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

始终在每封电子邮件中包含明确的“如何取消订阅”信息。不需要用户登录即可取消订阅,它应该是一个唯一的 url 进行一键取消订阅。

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

评论

12赞 Shyju 9/5/2012
+1 表示唯一 URL,用于一键取消订阅。我讨厌登录取消订阅。我将它们标记为垃圾邮件!
11赞 CVertex 8/3/2008 #6

我发现在正文中使用收件人的真实名字和姓氏是通过垃圾邮件过滤器的可靠方法。

12赞 dlamblin 8/6/2008 #7

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

但是你有没有看到那些似乎没有链接或宣传任何东西的垃圾邮件?这是一个垃圾邮件发送者试图影响您的贝叶斯过滤器。如果他能得到很高的评价,然后在他未来的电子邮件中加入一些单词,它可能会自动学习为好。因此,您无法真正猜测用户的过滤器在您邮寄时将设置为什么。

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

16赞 Zack Peterson 8/6/2008 #8

您可以考虑由第三方电子邮件服务来处理递送问题:

  • 精确目标
  • 垂直响应
  • 持续联系
  • 活动监视器
  • 艾玛
  • 返回路径
  • IntelliContact(智能联系人)
  • SilverPop (英语)
7赞 Tanerax 8/7/2008 #9

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

14赞 glob 8/11/2008 #10

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

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

我将电子邮件更改为多部分/替代 MIME 文档,现在我同时生成文本/纯文本和文本/html 部分。

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

评论

0赞 Jasen 6/9/2018
这种方法对不使用具有 HTML 功能的电子邮件客户端的安全意识也很有帮助,
8赞 Keith 8/13/2008 #11

在英国,最佳做法是提供贵公司的真实实际地址及其注册号码。

这样一来,一切都是公开和诚实的,他们不太可能手动将其标记为垃圾邮件。

16赞 Eric Z Beard 8/13/2008 #12

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

我发现仔细跟踪 NDR 非常有帮助。我将所有 NDR 定向到一个地址,并且我有一个 Windows 服务来解析它们 (Google ListNanny)。我尽可能多地将 NDR 中的信息放入数据库中,然后运行报告,看看我是否突然开始被某个域阻止。此外,您应避免向以前标记为 NDR 的地址发送电子邮件,因为这通常是垃圾邮件的良好指示。

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

有些域有时是无法交付的。Comcast.net 是最糟糕的。

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

评论

3赞 Pykih 6/2/2012
什么是 NDR?你能详细说明一下吗?
2赞 tripleee 8/28/2014
未送达报告,又名退回邮件
8赞 Andrei Rînea 8/31/2008 #13

我会补充:

点击“取消订阅”即可提供真正的退订。我见过真正的时事通讯提供了一个虚拟的退订链接,点击后显示“已成功退订”,但我仍然会收到更多的时事通讯。

5赞 benc #14

听起来您正在依靠一些反馈来确定接收端卡住了什么。您应该自己检查出站邮件是否存在明显的“垃圾邮件”。

购买任何像样的垃圾邮件控制系统,并通过它发送您的出站邮件。如果您发送了任何数量可观的邮件,无论如何都应该这样做,因为存在发送出站病毒的风险,尤其是在您有桌面 Windows 用户的情况下。

例如,Proofpoint 在单个部署中具有垃圾邮件 + 防病毒 + 一些信誉服务。(我曾经在那里工作过,所以我碰巧知道这一点。我敢肯定这个领域的其他供应商也有类似的功能。但你明白了。如果您通过基本的商业垃圾邮件控制设置发送邮件,并且邮件没有通过,则它不应该离开您的网络。

此外,还有一些公司可以帮助您提高非垃圾邮件出站电子邮件的送达率,例如 Habeas。

15赞 orcmid 11/9/2008 #15

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

这意味着所有来自未知来源的电子邮件都会自动成为垃圾邮件,并被转移到垃圾邮件文件夹中。(我不让我的电子邮件服务删除垃圾邮件,因为我想始终检查到达的误报,这很容易通过快速扫描文件夹来完成。

我甚至有来自自己的电子邮件进入垃圾邮件桶,因为 (1) 我通常不会给自己发送电子邮件,以及 (2) 有垃圾邮件发送者在发送给我的垃圾邮件中伪造我的回信地址。

因此,为了摆脱垃圾邮件的指定,我必须考虑您的邮件可能是合法的(来自发件人和主题信息),并首先以明文形式打开它(我默认为所有传入邮件,无论是否是垃圾邮件)以查看它是否合法。我的垃圾邮件文件夹不会在电子邮件中使用任何链接,因此可以保护我免受棘手的图像链接和其他不当行为的影响。

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

最后,如果一封电子邮件在明文中无法辨认,即使以 HTML 形式发送,我也可能将其删除,除非我知道它因来源和以前的宝贵经验而引起我的兴趣。

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

27赞 Pekka 4/6/2010 #16

上一个答案的几个要点:

  • 重要:发件人地址(“发件人”)是否属于在您发送电子邮件的服务器上运行的域?如果没有,那就这样做。切勿使用发件人地址,例如 。如果您需要回复以到达其他地址,请使用。[email protected]reply-to

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

  • 邮件是否通过垃圾邮件过滤器进行过滤?使用具有垃圾邮件文件夹的免费邮件打开一个帐户并找出答案。此外,请尝试将邮件发送到完全没有任何垃圾邮件过滤的地址。

  • 您是否需要 mail() 的第五个参数“-f”来添加发件人地址?(参见 PHP 手册中的 mail() 命令)

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

  • 您是否检查“发件人:”地址是否有可能的退回邮件(“退回给发件人”)?您还可以设置一个单独的“错误到”地址。
8赞 Ken Simpson 5/19/2012 #17

您可以做的最重要的事情是确保您向其发送电子邮件的人在收到您的电子邮件时不太可能点击“垃圾邮件”按钮。因此,请遵循以下经验法则:

  • 确保您已获得要向其发送电子邮件的人员的许可。永远不要向没有向您请求的人发送电子邮件。

  • 在每封邮件的顶部清楚地确定您是谁,以及此人收到电子邮件的原因。

  • 每月至少一次,向您列表中的人发送提醒电子邮件(如果您正在运行列表),迫使他们选择重新加入列表,以便继续接收您的通信。是的,这意味着你的列表会随着时间的推移而变短,但好处是你名单上的人被“买进来”了,不太可能标记你的电子邮件。

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

  • 为人们提供一种选择退出进一步通信的简单方法。

  • 使用像 SendGrid 这样的电子邮件发送服务,该服务努力维护良好的 IP 声誉。

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

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

17赞 Mike 10/4/2012 #18

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

错误的方式:

Go to your account now: <a href="http://www.paypal.com.phishers-anonymous.org/">http://www.paypal.com</a>

正确的方法:

Go to your account now: <a href="http://www.yourdomain.org/">http://www.yourdomain.org</a>

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

<a href="http://www.yourdomain.org/">Click here to go to your account</a>

评论

1赞 Naren Verma 2/13/2017
你好迈克,我有两个域,即 domain1.com 和 domain2.com。您的代码适用于 domain1.com,但不适用于 domain2.com。我不知道为什么?我没有改变任何想法。stackoverflow.com/questions/42200904/......
1赞 Mike 2/14/2017
@NarendraVerma 在这种情况下,我的答案似乎不适用于你。我建议您查看此处的其他答案,看看是否有其他适合您的答案。最后,由电子邮件提供商决定他们认为哪些是垃圾邮件,哪些是他们允许通过的,并且每个因素都有几个不同的因素。Gmail实际上会简要说明为什么如果您单击垃圾邮件,邮件会被标记为垃圾邮件。
1赞 Naren Verma 2/14/2017
感谢您回复 Mr.Mike,实际上我在 domain1 中应用了您的答案,并且正在工作。我正在使用 PHpMailer,我添加了 $email_body=“<a href='domain1.com'>View</a>”。这工作得很好。
1赞 Naren Verma 2/14/2017
我不知道为什么第二个域 2 不起作用。当然,我会与Gmail团队联系。此代码中还有其他建议吗?
0赞 Mike 2/14/2017
@NarendraVerma 你的代码没有错。
7赞 Miki Berkovich 1/29/2017 #19

很有可能,注册您的服务的人输入的电子邮件中输入了您没有纠正的输入错误。例如:chris@gmial.com - 或 - james@hotnail.com

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

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

评论

1赞 tripleee 9/7/2017
这。如果您一开始就不练习基本的订阅卫生,那么当前接受的答案中没有任何区别。
3赞 Filip 6/27/2017 #20

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

它为我提供了有关发送电子邮件的技术部分的反馈。像 SPF 记录、DKIM、Spamassassin 分数等。即使我知道需要什么,我也会不断犯错误,mail-tester.com 很容易找出可能出错的地方。

4赞 Kurt Van den Branden 1/3/2018 #21

谷歌有一个工具和指南。您可以在以下位置找到它们: https://postmaster.google.com/ 注册并验证您的域名,Google 会提供该 IP 地址和域名的单独评分。

根据批量发件人指南

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

要确保 Gmail 能够识别您的身份,请执行以下操作:

  • 使用一致的 IP 地址发送批量邮件。
  • 保留指向您的域的发送邮件的 IP 地址的有效反向 DNS 记录。
  • 在您发送的每封群发邮件的“发件人:”标头中使用相同的地址。 我们还建议以下几点:

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

  • 发布 SPF 记录。
  • 发布 DMARC 策略。
1赞 Mike 8/20/2019 #22

为了让 DMARC 检查 SPF 通过并在使用 sendmail 时保持一致,请确保你将信封发件人地址(或参数)设置为与标头地址中的域相匹配的地址。-f-rFrom:

使用 PHP:

使用PHP的内置函数而不设置第5个参数,如果操作不正确,将导致DMARC SPF检查不对齐。默认情况下,sendmail 将以 Web 服务器的用户作为RFC5321发送电子邮件。MailFrom / Return Path 标头。mail()

例如,假设您正在 Web 服务器上托管您的网站。如果不设置附加参数参数:domain.comhost.com

mail($to,$subject,$message,$headers); // Wrong way

电子邮件收件人将收到一封电子邮件,其中包含以下邮件标题:

Return-Path: <your-website-user@server.host.com>
From: <[email protected]>

即使它通过了SPF检查,它也会是未对齐的(因为 domain.com 和 host.com 不匹配),这意味着DMARC SPF检查将因未对齐而失败。

相反,您必须通过在 PHP 函数中包含第 5 个参数将信封发件人地址传递给 sendmail,例如:mail()

mail($to,$subject,$message,$headers, '-r [email protected]'); // Right way

在这种情况下,电子邮件收件人将收到一封电子邮件,其中包含以下邮件标题:

Return-Path: <bounce_[email protected]>
From: <[email protected]>

由于这两个标头都包含来自 的地址,SPF 将通过并对齐,这意味着 DMARC 也将通过 SPF 检查。domain.com

2赞 vikram sahu 6/15/2020 #23

首先,您需要确保所需的电子邮件身份验证机制(如 SPF 和 DKIM)到位。这两种是证明您是电子邮件的实际发件人并且它不是真正欺骗的突出方法。这减少了电子邮件被过滤为垃圾邮件的机会。

第二件事是,您可以根据不同的DNSBL检查域名的反向DNS输出。 在终端上使用以下简单命令:

  **dig a +short (domain-name).(blacklist-domain-name)**

  ie.  dig a +short example.com.dsn.rfc-clueless.org
  > 127.0.0.2

在上面的例子中,这意味着你的域名“example.com”被列入黑名单,但由于域名设置合规性(rfc-clueless.org 列出存在合规性问题的域名)

注意:我更喜欢 multivalleypepipost 工具来检查域列表。

发件人地址/回复 ID 应该是正确的,始终在您的电子邮件正文中使用可见的取消订阅按钮(这将帮助您的用户在不破坏您的域声誉的情况下退出您的电子邮件列表)

2赞 Dibya Sahoo 11/19/2020 #24

大多数以编程方式生成的电子邮件的意图通常是事务性的、触发的或警报性质的——这意味着这些是重要的电子邮件,永远不会落入垃圾邮件。

话虽如此,在将电子邮件标记为垃圾邮件之前,会考虑多个参数。虽然电子邮件列表的质量是要考虑的最重要的参数,但我在这里跳过了讨论,因为在这里我们谈论的是发送到我们自己或已知电子邮件地址的重要电子邮件。

除了列表质量外,其他 3 个重要参数是;

  1. 发件人声誉
  2. 符合电子邮件标准和身份验证(SPF、DKIM、DMARC、rDNS)
  3. 电子邮件内容

发件人信誉 = 发送 IP 地址的信誉 + 返回路径/信封域的信誉 + 发件人域的信誉。

对于您的发件人声誉如何,没有直接的答案。这是因为有多个机构(如 SenderScore、Reputation Authority 等)维护您域的声誉分数。除此之外,Gmail,Yahoo,Outlook等ISP还维护了每个域的声誉。

但是,您可以使用 GradeMyEmail 等免费工具来 360 度全方位了解您的声誉以及电子邮件设置的潜在问题或任何其他与合规性相关的问题。

有时,如果您使用新域发送电子邮件,那么这些域也会被发现是垃圾邮件。您应该检查您的域是否列在任何全局阻止列表中。同样,GradeMyEmail 和 MultiRBL 是识别阻止列表的有用工具。

一旦您非常确定发件人信誉分数,您应该检查您的电子邮件发送域是否符合所有电子邮件身份验证和标准。

  1. 防晒系数
  2. DKIM系列
  3. DMARC的
  4. 反向 DNS

为此,您可以再次使用 GradeMyEmail 或 MXToolbox 来了解身份验证的潜在问题。

你的SPF、DKIM和DMARC应该始终通过,以确保你的电子邮件符合标准的电子邮件认证。 下面是这些身份验证在 Gmail 中的外观示例:Email Authentication

同样,您可以使用Mail-Tester等工具,该工具会扫描完整的电子邮件内容并告诉可能触发垃圾邮件过滤器的潜在关键字。