如何发送电子邮件,并避免被分类为垃圾邮件?

这是关于如何处理从您的服务器发送的电子邮件被错误分类为垃圾邮件的规范问题 。 有关其他信息,您可能会发现这些类似的问题有帮

  • 防止您看起来像垃圾邮件发送者的最佳做法
  • 战斗垃圾邮件 – 我可以做什么:电子邮件pipe理员,域名所有者或用户?

有时我想发送通讯给我的客户。 问题是,一些电子邮件被捕获为垃圾邮件。 主要由客户端的Outlook(甚至在我自己的Outlook 2007中)。

现在我想知道应该做些什么来创build“好”的电子邮件。 我知道反向查询等,但(例如),如何取消订阅唯一的ID链接? 这是否会增加垃圾邮件评级?

确保您的电子邮件看起来不像典型的垃圾邮件:不要只插入一个大的图像; 检查字符集是否设置正确; 请勿插入“仅限IP地址”链接。 写下你的通讯,就像写一封正常的电子邮件一样。 使取消订阅或退出非常容易。 否则,您的用户将通过按“垃圾邮件”button取消订阅,这将影响您的声誉。

在技​​术方面:如果你可以select你的SMTP服务器,确保它是一个“干净”的SMTP服务器。 垃圾邮件SMTP服务器的IP地址通常被其他提供商列入黑名单。 如果您事先不知道您的SMTP服务器,最好在您的应用程序中提供configuration选项来控制批量大小和批次之间的延迟。 某些邮件服务器不接受大批量发送或连续活动。

使用电子邮件validation方法(如SPF和域密钥)来certificate您的电子邮件和您的域名属于一个整体。 好的副作用是帮助您防止您的电子邮件域被欺骗。 同时检查您的反向DNS ,确保您的邮件服务器的IP地址指向用于发送邮件的域名。

确保电子邮件的回复地址是有效的现有地址。 在“收件人”字段中使用收件人的完整名称,而不仅仅是电子邮件地址(例如"John Doe" <[email protected]> ),并监控滥用帐户,例如[email protected][email protected]

自动取消订阅电子邮件地址反弹的邮件收件人,并与主要邮件提供商build立投诉反馈循环,并自动取消订阅将您的邮件报告为垃圾邮件/垃圾邮件的收件人。 这将大大提高您的声誉和交付能力。

这个问题提到基础知识已经到位,但正如我们将其他人指向一个典型问题,我只是想确保我们覆盖基础。

这些最低要求现在基本上是必需的:

  1. 确保您正确configuration了正向和反向DNS。 邮件服务器必须在HELO / EHLO交换中标识自己,该名称应该查找服务器正在使用的IP。 同样,该IP的反向查找应该返回名称。

  2. 确保你的服务器实际上在握手中发送主机名。 你的服务器不应该发送一个IP地址。

  3. 确保您的IP地址不在任何DNSRBL(黑名单)上。 如果是这样,那就照顾好了。

  4. 使用更受欢迎的信誉服务来检查您的IP的声誉(SenderScore现在是一个很大的名字,但是这可能不会随着时间的推移)。 这些服务通常有改善你的声誉的指导方针,但不是像RBL那样的“去/不去”。

  5. 不要伪造标题,不要插入标题,并确保在消息中包含最小标题( DateFrom是必需的,应有SubjectSenderReply-ToTo / Cc / Bcc [如适用])。 这是我最大的宠物之一,我希望收到有效的新闻简报,因为他们伪造了一个Outlook Express头,忽略了date或类似的东西。

您也可以考虑设置SPF,DKIM和DMARC。 这些有助于提供,但不是必需的(不是绝大多数的电子邮件服务器)。

不幸的是,有许多不同的过滤技术,一些主要的邮件提供商不会公布他们使用什么和/或什么权重给各种testing/filter,所以知道如何通过是很困难的。 基本上,垃圾邮件已经使ISP和用户陷入了一种情况,他们有时会使这种合法邮件(特别是诸如通讯等大宗邮件)难以通过。 我不再认为电子邮件是曾经的中途可靠的传输方式。

要less一些负面的,更有帮助的…当你对一个特定的客户有特定的问题时,程序可能会告诉你。 我不知道有关Outlook的具体情况,因为我没有在自己的任何地方使用它,但是许多邮件filter会在邮件中注明标题,以列出使用哪些filter,结果是什么,以及给filter赋予的权重。 所以,如果你看看消息的全部来源,他们可能会发现有用的线索。 例如,基于SpamAssassin的filter会注入以下格式的标题:

 X-Spam-Flag: YES X-Spam-Score: 13.371 X-Spam-Level: ************* X-Spam-Status: Yes, score=13.371 tagged_above=-10 required=5.4 tests=[BAYES_99=3.5, FB_GET_MEDS=0.803, RCVD_IN_SORBS_WEB=0.619, RCVD_IN_XBL=3.033, RDNS_NONE=0.1, URIBL_AB_SURBL=1.86, URIBL_BLACK=1.955, URIBL_JP_SURBL=1.501] 

(这个例子已经从我的垃圾堆中真正的垃圾邮件中摘下来)

这是不确定的,因为贝叶斯过滤和涉及用户培训的其他方法是常见的 – 所以即使客户端的configuration完全相同,您的filter通过和失败的方式可能与其他人的显着不同。 你可能不得不考虑一些其他的出路,你的消息(许多人试图使用社交networking协议,取得了不同程度的成功)。

就像其他人说的那样,在发送电子邮件时,您希望避免“看起来”像垃圾邮件,但是您不一定知道什么会使您看起来像垃圾邮件,因为技巧各不相同。

有一件事你可能要考虑的是发送一封纯文本的电子邮件给你的客户,每个简讯实际上包含一个快速的描述/问候,然后是“点击这里查看我们的最新通讯!” 信息; 这样,您可以将您的消息托pipe在Web服务器上,减less了电子邮件的大小(并加载到邮件服务器上),作为奖励,您可以检查Web服务器上的日志,以获取关于有多less客户的反馈实际上阅读您的消息与删除它们。

我的在线业务在订单确认电子邮件发送到垃圾邮件或者没有发送(通过邮件服务器回避)方面遇到问题。 这些简单的“这是您的订单摘要”电子邮件与我们的网站的一个链接的域名。 我们最终为我的业务购买了一些Google Apps帐户。 您可以将其中一个设置为您的SMTP服务器。 让Google成为我们的邮件发件人可以解决所有这些问题。

至于电子邮件通讯,绝对使用一个服务,为您处理opt-in / -out。 使用除服务以外的任何人发送批量邮件可能会使您被禁止。

避免电子邮件被识别为垃圾邮件和/或不到达接收者的详细解决scheme

示例情况:您有一台服务器运行example.com的PHP网站,需要发送电子邮件 。 而且你注意到你的邮件并不总是被发送。 (如果您是店主,并且客户在购买后没有收到电子邮件,这是一个大问题!)。

如果按照以下步骤进行,则应该解决99.9%的问题; 在我的情况下,它的工作。 (我首先想到的只有其中的几个可能,例如跳过DKIM,但是最后他们都被要求解决我所有的问题)。

  1. 首先,谁在发送邮件?

    当您的PHP代码发送电子邮件时,通常使用着名的PHP函数mail(...) 。 但是这个函数在做什么呢? 运行一个包含<?php echo ini_get('sendmail_path'); ?>test.php页面<?php echo ini_get('sendmail_path'); ?> <?php echo ini_get('sendmail_path'); ?> 。 你会得到例如: /usr/sbin/sendmail -t -i 。 好消息,现在我们知道哪个程序真的处理电子邮件!
    现在一个棘手的信息:名称sendmail可以是各种程序 。 即使您在上一步中看到了sendmail ,也可能安装了sendmail或postfix或exim或qmail等。 让我们做dpkg -S /usr/sbin/sendmail 。 答案是postfix: /usr/sbin/sendmail ,好吧,这意味着我们已经安装了postfix

  2. 查看日志文件/var/mail/www-data ,了解哪些电子邮件没有正确发送,以及为什么。 这可能对下一步有用。

  3. 正如Jeff Atwood的博客中提到的 ,现在是时候查看反向PTRlogging。 (更多细节在这里添加)。

  4. 在postfixconfiguration文件/etc/postfix/main.cf文件中添加以下行:

     inet_protocols=ipv4 

    然后重新启动后缀与service restart postfix 。 为什么? 因为当收件人是gmail时,我遇到了这样的问题:

    我们的系统检测到550-5.7.1不符合关于PTRlogging和550-5.7.1authentication的IPv6发送准则。 请查阅550-5.7.1 https://support.google.com/mail/?p=ipv6_authentication_error了解更多550 5.7.1信息。

    最简单的解决scheme是,然后切换postfix只有ipv4,因此这第4步(这可能是不必要的吗?)。

  5. SPF DNSlogging 。 为了certificate您被允许从@example.com发送电子邮件,您可以在域example.com的DNSlogging中添加SPFlogging。 我发现The DNS record type 99 (SPF) has been deprecated ,所以我们使用TXTlogging。 我们将其添加为TXT DNSlogging(另请参阅注释1)

     v=spf1 a mx include:_spf.google.com include:sendgrid.net ~all 

    为什么包括这些? 因为我的服务器不会是@ example.com发送电子邮件的唯一服务器! 我使用受信任的SMTP提供商Sendgrid将Gmailconfiguration为以 [email protected] 发送邮件 ( 请参阅此处的屏幕截图 )。 如果我不添加这些内容,Gmail将不被允许从@example.com发送电子邮件。

  6. DKIM数字签名。 如此处所述,DKIM的目标是确保邮件内容在传输过程中不被篡改。 这里是Ubuntu的安装过程( 这里也是有用的指南):

    • apt-get install opendkim opendkim-tools

    • 创build密钥(您也可以使用http://dkimcore.org/tools/生成密钥和相关的DNS TXTlogging):

       mkdir /etc/opendkim cd /etc/opendkim opendkim-genkey -t -s mail -d example.com 
    • 我们把它放在/etc/opendkim.conf

       Syslog yes Domain * KeyFile /etc/opendkim/mail.private Selector mail AutoRestart yes Background yes Canonicalization relaxed/relaxed DNSTimeout 5 Mode sv SubDomains no 

      这在/etc/default/opendkim

       SOCKET="inet:8891@localhost" # Ubuntu default - listen on loopback on port 8891 

      最后在postfixconfiguration文件/etc/postfix/main.cf最后加上:

       # DKIM milter_default_action = accept milter_protocol = 2 smtpd_milters = inet:localhost:8891 non_smtpd_milters = inet:localhost:8891 
    • 现在让我们将公钥(在/etc/opendkim/mail.txtfind)添加到您的域的DNSlogging中:

       mail._domainkey.example.com. IN TXT "v=DKIM1; k=rsa; p=OqYHd...waPaQAX" 

      以下是我的注册商Namelynx的外观:

    • DKIM的最后一步:使用service restart opendkim ; service restart postfix重新启动邮件服务service restart opendkim ; service restart postfix service restart opendkim ; service restart postfix

  7. testing一切正常。 最简单的方法是通过PHP发送一封电子邮件到[email protected] (这个非常有用的工具由Port25 Solutions提供):

     $emailfrom = "Example <[email protected]>"; $headers = "MIME-Version: 1.0 \n"; $headers .= "Content-Transfer-Encoding: 8bit \n"; $headers .= "Content-type: text/plain; charset=utf-8\n"; $headers .= "Reply-To: " . $emailfrom . "\n"; $headers .= "From: " . $emailfrom . "\n"; $headers .= "Bcc: [email protected]\n"; mail("[email protected]", "Hello", "Hello!", $headers); 

    然后看到这个工具的答案,它应该是这样的:

     ========================================================== Summary of Results ========================================================== SPF check: pass DKIM check: pass SpamAssassin check: ham 

    mail-tester.com服务也很有用。

  8. (可选)尝试postmaster.google.com。 我用它,但我不记得是否帮助。

  9. 如果仍然不行 ,一个解决scheme可能是用专业的解决scheme外包电子邮件,以避免(不成功)debugging的日夜。 这里有一篇很好的文章。 这是一个引用: “从您的应用程序发送电子邮件可以***一半的时间,从您自己的服务器发送的消息只是被转储到收件人的垃圾文件夹。 经过几个星期的调整之后,我很遗憾地发现了这个事实。


补充笔记:

(1)

 -all : Fail: All mail servers not listed in the SPF record are explicitly not authorized to send mail using the sender's domain. ~all : Soft Fail: All mail servers not listed in the SPF record are not authorized to send mail using the sender's domain, but the owner of the domain is unwilling to make a strong assertion to that effect. ?all : Neutral: The domain controller cannot or does not want to assert whether or not all mail servers not listed in the SPF record are authorized to send mail using the sender's domain. +all : Pass: All mail servers are authorized to send mail on behalf of the sender's domain.