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


434

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

最近,我以编程方式发送的某些电子邮件已开始自动被改编到人们的垃圾邮件文件夹中,我不知道该怎么办。

尽管有这样的事实,这些特定的电子邮件不是人类会标记为垃圾邮件的电子邮件,特别是,它们是包含人们为之付出高昂代价的许可证密钥的电子邮件,因此我认为他们不会将其视为垃圾邮件

我认为这是一个大话题,从本质上讲,我是一个愚昧无知的人。

Answers:


338

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

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

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

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

在“收件人”字段中使用收件人的全名,而不只是电子邮件地址(例如"John Smith" <john@blacksmiths-international.com>)。

监视您的滥用帐户,例如abuse@yourdomain.com和postmaster@yourdomain.com。这意味着-确保这些帐户存在,阅读发送给他们的内容,并对投诉采取行动。

最后,取消订阅真的很容易。否则,您的用户将通过按垃圾邮件按钮来退订,这将影响您的声誉。

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


您能详细说明滥用帐户吗?我不确定您的意思
marcgg

26
brandonchecketts.com/emailtest.php,您可以测试您的邮件服务器设置是否符合DomainKeys,DKIM,SPF和其他反垃圾邮件方法。
乔纳斯(Jonas)2010年

3
另外,制作退回电子邮件检测算法以验证不良的电子邮件地址(例如,如果邮件退回3次,停止向该地址发送邮件)
clyfe

11
+1表示“那是说,让Hotmail接受您的电子邮件仍然是一种妖术。” Hotmail对垃圾邮件和非垃圾邮件几乎没有区别。一切都在收件箱或垃圾邮件箱中(根据您的设置)。
HalilÖzgür12年

2
Brandon Checketts将他的邮件服务器整合工具移至:dkimvalidator.com
Dana Wheeler,

30

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


2
一些垃圾邮件系统会考虑个人的阅读习惯。(从该发件人发送的电子邮件是否被阅读或被删除而不被阅读?等等。)因此,这肯定会帮助您查找被标记的邮件(真否定),但是此步骤不能证明它们不会为其他用户使用在同一系统上(误报)。
乔恩·亚当斯

26

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

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

您可以尝试的其他方法:

  • 将您的网站名称或地址作为主题
  • 将邮件中的所有链接都指向您的域(而不是email.com)
  • 在电子邮件中放入地址或其他联系信息

24

先前答案的几点要点:

  • 最重要:发件人地址(“发件人”)是否属于在您发送电子邮件的服务器上运行的域?如果不是,请这样做。切勿使用类似的发件人地址xxx@gmail.com。用户reply-to是否需要答复才能到达其他地址。

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

  • 邮件是否被垃圾邮件过滤器过滤?使用带有垃圾邮件文件夹的freemailer开一个帐户,然后查找。另外,请尝试将邮件发送到一个完全没有任何垃圾邮件过滤功能的地址。

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

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

  • 您是否检查“发件人:”地址中是否存在退回邮件(“退回发件人”)?您也可以设置一个单独的“ errors-to”地址。

22

发送电子邮件之前,请确认您具有正确的电子邮件地址。如果有人在注册时输入了错误的电子邮件地址,请尽快将其打败。

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

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


11
+1为唯一的URL(单击1单击取消订阅)。我讨厌登录以退订。我将其标记为垃圾邮件!
Shyju 2012年

16

除了所有其他答案之外,如果要发送包含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
您好迈克,我有两个域,即domain1.com和domain2.com。您的代码适用于domain1.com,但不适用于domain2.com。不知道为什么 我没有改变任何想法。stackoverflow.com/questions/42200904/...
那仁维尔马

1
@NarendraVerma在这种情况下,我的答案似乎并不适用于您。我建议在这里查看其他答案,看看是否还有其他适合您的方法。最后,由电子邮件提供商决定他们认为什么是垃圾邮件以及允许哪些邮件通过,并且每个因素都有各自不同的考虑因素。Gmail实际上为您提供了简短的说明,如果您单击垃圾邮件,为什么将邮件标记为垃圾邮件。
迈克,

1
感谢您回覆Mike先生,实际上,我已将您的答案套用到domain1上,并且运作正常。我正在使用PHpMailer,并且添加了类似$ email_body =“ <a href=' domain1.com'> View </ a >”。这很正常。
Naren Verma

1
我不知道为什么第二个domain2无法正常工作。当然,我会与Gmail小组联系。此代码中还有其他建议吗?
Naren Verma

@NarendraVerma您的代码没有任何问题。
迈克,

15

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

  • 确切目标
  • 垂直响应
  • 持续接触
  • 广告活动监控
  • 艾玛
  • 返回路径
  • IntelliContact
  • SilverPop

15

有时,发送电子邮件就像是黑魔法。反向DNS确实很重要。

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

如果您需要一次发送大量客户服务电子邮件,则最好在每个电子邮件之间放置一个延迟,因为如果您一次向一个域发送太多几乎相同的电子邮件,则一定会结束它们黑名单。

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

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


2
什么是NDR?您能详细说明一下吗?
Pykih 2012年

2
未送达报告,又称退回邮件
2014年

14

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

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

我什至有自己发来的电子邮件发送到垃圾邮件箱,因为(1)我通常不向自己发送电子邮件,并且(2)有垃圾邮件发送者在发送给我的垃圾邮件中伪造了我的回信地址。

因此,要摆脱垃圾邮件的标识,我必须考虑到您的邮件可能是合法的(来自发件人和主题信息),并首先以纯文本格式打开(无论是否为垃圾邮件,这都是我的默认设置),以查看其是否合法。我的垃圾邮件文件夹不会使用电子邮件中的任何链接,因此可以防止棘手的图像链接和其他不良行为。

如果我希望以后来自同一来源的邮件进入我的收件箱,而不是被转用于垃圾邮件审阅,则将其指定给我的电子邮件客户端。对于那些在每个邮件中使用批量邮件转发器和唯一发件人地址的组织,这太糟糕了。它们永远不会得到我的认可,并且总是显示在我的垃圾邮件文件夹中,如果我很忙,我也永远不会看它们。

最后,如果即使以HTML格式发送的电子邮件也难以理解为纯文本格式,除非有消息来源和以前的宝贵经验,否则我可能会删除该电子邮件,除非我知道对它感兴趣。

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


13

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

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

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

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


这种方法对于不使用HTML的电子邮件客户端的安全意识也很有帮助,
Jasen

13

雅虎使用一种称为“发件人ID”的方法,该方法可以在“ SPF设置向导”中进行配置并输入到您的DNS中。对于Exchange,Hotmail,AOL,Yahoo等而言,重要的一项也是为您的域提供反向DNS。这些将解决大多数问题。但是,您永远无法防止有人故意阻止您的规则或自定义规则。


3
雅虎使用SPF记录和DomainKeys。SenderID是一种不同的技术(在许多方面都是不兼容,不安全且设计不良的技术),因此不应使用。
丹·乌迪

11

您需要反向DNS条目。您无需两次将相同的内容发送给同一用户。您需要使用一些常见的Webmail和电子邮件客户端对其进行测试。我个人是通过一个新安装的垃圾邮件刺客,一个受过训练的垃圾邮件刺客以及多个hotmail,gmail和aol帐户进行操作的。

但是,您是否看到垃圾邮件似乎没有链接到或发布任何广告?这是垃圾邮件制造者,试图影响您的贝叶斯过滤器。如果他能获得很高的评价,然后在他将来的电子邮件中加入一些单词,它可能会自动被认为是很好。因此,您无法真正猜出在邮件发送时将要设置的用户过滤条件。

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


10

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


8

在英国,最好的做法是包括您公司的真实地址及其注册号。

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


7

我会补充:

单击“取消订阅”后,提供真正的取消订阅。我看过真正的新闻通讯提供了一个虚拟的取消订阅链接,单击该链接会显示“已成功取消订阅”,但我仍然会收到更多新闻通讯。


7

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

  • 确保您已将电子邮件发送给的人的许可。永远不要将电子邮件发送给没有您要求的人。

  • 在每封邮件的顶部清楚地标识您是谁,以及该人为什么接收电子邮件。

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

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

  • 让人们轻松选择退出进一步的交流。

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

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

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


6

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


6

极有可能是注册您的服务的人正在输入带有您无法纠正的输入错误的电子邮件。例如:chris @ gmial.com -or- james @ hotnail.com

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

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


1
这个。如果您首先不练习基本的订阅卫生,那么当前接受的答案中的任何内容都没有任何区别。
三胞胎

4

听起来您好像要依靠一些反馈来确定什么东西卡在了接收端。您应该自己检查出站邮件是否存在明显的“麻烦”。

购买任何体面的垃圾邮件控制系统,然后通过它发送出站邮件。如果您发送大量邮件,则无论如何都要这样做,因为存在发送出站病毒的风险,尤其是如果您有桌面Windows用户。

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

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


3

Google为此提供了工具和指南。您可以在以下网址找到它们:https//postmaster.google.com/注册并验证您的域名,然后Google提供该IP地址和域的单独评分。

根据批量发件人指南

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

为确保Gmail可以识别您的身份,请执行以下操作:

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

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

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

1

我一直使用: https //www.mail-tester.com/

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


0

若要允许DMARC通过SPF的检查并在使用sendmail时也进行对齐,请确保将信封发件人地址(-f-r参数)设置为与From:标头地址。

使用PHP:

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

例如,假设您要domain.comhost.comWeb服务器上托管网站。如果不设置其他参数,则参数:

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

电子邮件收件人将收到带有以下邮件标题的电子邮件:

Return-Path: <your-website-user@server.host.com>
From: <your-website-user@domain.com>

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

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

mail($to,$subject,$message,$headers, '-r bounce_email@domain.com'); // Right way

在这种情况下,电子邮件收件人将收到带有以下邮件标题的电子邮件:

Return-Path: <bounce_email@domain.com>
From: <your-website-user@domain.com>

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.