it-swarm.cn

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

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

有时我想向客户发送新闻通讯。问题是,某些电子邮件被作为垃圾邮件捕获。大多数情况下是通过Outlook在客户端(甚至在我自己的Outlook 2007中)。

现在,我想知道如何创建“好”电子邮件。我知道反向查询等,但是,例如,具有唯一ID的退订链接怎么办?这会提高垃圾邮件等级吗?

84
kcode

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

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

使用电子邮件身份验证方法,例如 [〜#〜] spf [〜#〜]域密钥 来证明您的电子邮件和您的域名属于同一类。尼斯的副作用是可以帮助您防止电子邮件域被欺骗。另外 检查 您的 反向DNS ,以确保邮件服务器的IP地址指向用于发送邮件的域名。

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

83
splattne

自动退订电子邮件地址反弹的邮件收件人,并与主要邮件提供商建立投诉反馈循环,并自动退订将您的邮件报告为垃圾邮件/垃圾邮件的收件人。这将大大改善您的声誉和可交付性。

22
wg

这个问题提到基础已经到位,但是当我们向其他人指出这是一个规范问题时,我只想确保我们涵盖了基础。

这些天本质上要求这些最低要求:

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

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

  3. 确保您的IP地址不在任何DNSRBL(黑名单)上。如果是这样,请妥善保管。

  4. 使用更受欢迎的信誉服务来检查IP的信誉(SenderScore目前是一个很大的信誉服务,但是随着时间的流逝,它可能无法维持)。这些服务通常具有提高您的声誉的准则,但并不像RBL那样完全“通过/不通过”。

  5. 不要伪造标题,不要躺在标题中,并确保在消息中包含最小标题(必须为DateFrom,应该有SubjectSenderReply-ToTo/Cc/Bcc [适用])。这是我收到的有效时事通讯中最大的宠物之一,我希望收到这些时事通讯以垃圾邮件结尾,因为它们伪造了Outlook Express标头,省略了日期或类似内容。

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

15
Chris S

不幸的是,有许多不同的过滤技术,并且一些主要的邮件提供商不会发布它们使用的内容和/或对各种测试/过滤器赋予的权重,因此知道如何通过是很困难的。基本上,垃圾邮件已将ISP和用户带入一种情况,有时它们使此类合法消息(尤其是批量消息,如新闻稿)难以通过。我不再认为电子邮件曾经是中途可靠的传输方法。

减少负面影响,提供更多帮助...当您遇到特定客户的特定问题时,程序可能会告诉您一些信息。我不特别了解Outlook,因为我自己不在任何地方使用它,但是许多邮件筛选器将标头注入邮件中,以列出使用了哪些筛选器,结果是什么以及赋予该筛选器的权重是什么。因此,如果您查看邮件的完整来源,它们确实被移至垃圾文件夹,则可能会找到有用的线索。例如,基于SpamAssassin的过滤器将以以下形式注入标头:

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]

(该示例已从我的垃圾堆中真正的垃圾邮件消息中剔除)

尽管这是不确定的,因为贝叶斯过滤和其他涉及用户培训的方法很常见-因此,即使客户端配置为开箱即用,您的过滤器通过和失败的内容也可能与其他人明显不同。您可能需要考虑新闻的其他出路(许多人为此尝试使用社交网络协议,但取得了不同程度的成功)。

11
David Spillett

就像其他人所说的那样,您希望在发送电子邮件时避免像垃圾邮件一样“看起来”,但是由于技术的不同,您不一定能说出什么会使垃圾邮件看起来像垃圾邮件。

您可能要考虑的一件事是,向每封新闻简讯发送给您的客户纯文本电子邮件,其中实际上包含一个简短的说明/问候,然后是“单击此处以查看我们的最新简讯!”信息;这样,您可以将邮件托管在Web服务器上,减少电子邮件的大小(并减少邮件服务器的负载),此外,您可以检查Web服务器上的日志以获取有关有多少客户的反馈。实际阅读您的消息与删除它们。

9
Bart Silverstrim

避免将电子邮件识别为垃圾邮件和/或未到达收件人的详细解决方案

示例情况:您有一台运行PHP _example.com_)网站的服务器,该服务器需要发送电子邮件。您会发现您的电子邮件并不总是可以发送的(如果您是商店的老板,这是个大问题,并且客户在购买后不会收到电子邮件!)。

如果执行以下所有步骤,则应该解决了99.9%的问题。 (我首先认为仅可以执行其中的一些操作,例如跳过DKIM,但最终需要全部使用它们来解决我遇到的所有问题)。

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

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

  2. 查看日志文件_/var/mail/www-data_,以了解未正确发送哪些电子邮件以及原因。这对于后续步骤可能很有用。

  3. Jeff Atwood的博客 所述,现在该看看反向PTR记录了。 (更多详细信息将在此处添加)。

  4. 在postfix配置文件_/etc/postfix/main.cf_文件中添加以下行:

    _inet_protocols=ipv4
    _

    然后使用_service restart postfix_重新启动postfix。为什么?因为当收件人为gmail时我遇到了这样的问题:

    我们的系统检测到此消息确实不满足550-5.7.1的要求,不符合有关PTR记录和550-5.7.1身份验证的IPv6发送准则。请查看550-5.7.1 https://support.google.com/mail/?p=ipv6_authentication_error 了解更多550 5.7.1信息。

    最简单的解决方案 然后仅将postfix切换到ipv4,因此执行了第4步(您可能不需要吗?)。

  5. SPF DNS记录为了证明您被允许从_@example.com_发送电子邮件,可以在域_example.com_的DNS记录中添加SPF记录。我在某处找到了The DNS record type 99 (SPF) has been deprecated,所以我们改用TXT记录。让我们将其添加为TXT DNS记录 (另请参见注释1)

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

    为什么包括这些?因为我的服务器将不是唯一一个从@ example.com发送电子邮件的服务器!我使用受信任的SMTP提供程序 Sendgrid 将Gmail配置为将邮件发送为 [email protected]请参阅此处的屏幕快照 )。如果我不添加_include:_,则Gmail不允许从_@example.com_发送电子邮件。

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

    • _apt-get install opendkim opendkim-tools_

    • 创建密钥(您也可以生成密钥,并使用 http://dkimcore.org/tools/ 生成相关的DNS TXT记录)):

      _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:[email protected]lhost" # Ubuntu default - listen on loopback on port 8891
      _

      最后将其添加到后缀配置文件_/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.txt_中)添加到您域的DNS记录中:

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

      这是我的注册商Namelynx的外观:

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

  7. 测试是否一切正常。最简单的方法是通过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. 如果仍然不起作用,一种解决方案是使用专业的解决方案外包电子邮件,避免日以继夜的调试(不成功)。 这里 是一篇很好的文章。这是一个引号:“从您的应用程序发送电子邮件可能会***。一半时间,从您自己的服务器发送的消息只会被转储到收件人的垃圾文件夹中。”我很遗憾地发现是的,经过数周的调整。


补充笔记:

(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.
_
7
Basj

我的在线业务遇到了将订单确认电子邮件发送给垃圾邮件或什至没有发送(通过邮件服务器避免)的问题。这些都是简单的“这是您的订单摘要”电子邮件,其中包含指向我们网站域的链接。我们最终为我的业务购买了一些Google Apps帐户。您可以设置其中之一作为SMTP服务器。让Google作为我们的邮件发件人可以解决所有这些问题。

至于电子邮件通讯,一定要使用为您处理选择加入/退出的服务。使用除服务之外的任何人发送批量邮件可能会被禁止。

6
Chris K

电子邮件收件箱中发布了新指南

我见过最全面的。 43个不同点的清单,涵盖了如何避免被标记为垃圾邮件的每个水龙头。不断更新。

从设置DNS,配置身份验证,设置信誉监控,降低跳出率,测试电子邮件内容等。

ZeroBounce.NET从头到尾覆盖所有内容

https://www.zerobounce.net/guide-to-improve-inbox-and-delivery.html

1
Henry