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



防止垃圾邮件发送者的最佳做法
打击垃圾邮件-作为垃圾邮件,我该怎么办:电子邮件管理员,域所有者还是用户?




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

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

评论

在superuser.com上类似问题的良好答案中,可以找到分步清单和故障排除指南。

#1 楼

确保您的电子邮件看起来不像典型的垃圾邮件:不要只插入大图片;检查字符集设置是否正确;不要插入“仅IP地址”链接。像编写普通电子邮件一样,编写您的通讯。取消订阅或退出非常容易。否则,您的用户将通过按“垃圾邮件”按钮退订,这将影响您的声誉。
在技术方面:如果可以选择SMTP服务器,请确保它是“干净的” SMTP服务器。垃圾邮件SMTP服务器的IP地址通常被其他提供商列入黑名单。如果您不预先了解SMTP服务器,那么最好在应用程序中提供配置选项以控制批量大小和批量之间的延迟。某些邮件服务器不接受大量发送或连续活动。
使用SPF和DKIM之类的电子邮件身份验证方法来证明您的电子邮件和域名属于同一类。不错的副作用是,您可以帮助防止电子邮件域被欺骗。另外,请检查反向DNS,以确保邮件服务器的IP地址指向用于发送邮件的域名。
请确保电子邮件的回复地址是有效的现有地址。在“收件人”字段中使用收件人的全名,而不只是电子邮件地址(例如"John Doe" <john.doe@example.com>),并监视您的滥用帐户,例如abuse@example.com和postmaster@example.com。

评论


并使用仅包含文本的html电子邮件的分段/替代版本。这意味着垃圾邮件扫描程序在分类时将有更多有用的东西要经过。

–马特
13年4月17日在3:48

#2 楼

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

评论


这很有趣。我对这些反馈回路一无所知。所有提供商都提供这样的程序吗?

– kcode
2009年7月31日14:46

并非所有提供商,都不是。但是大多数主要公司,包括Yahoo和AOL等。我知道,所有投诉反馈循环都要求消息是通过DKIM或DomainKeys进行身份验证的域发送的。我相信有些人也需要SPF,但这种情况很少见。

– wg
09年7月31日在14:53

#3 楼

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

这些天这些最低要求实际上是必需的:


确保正确配置了正向和反向DNS。邮件服务器必须在HELO / EHLO交换中标识自己,该名称应查找到服务器正在使用的IP。同样,对该IP进行反向查找应返回该名称。
确保您的服务器实际上在该握手中发送了主机名。您的服务器不应发送IP地址。
请确保您的IP地址不在任何DNSRBL(黑名单)上。如果是这样,请妥善处理。
使用更流行的信誉服务来检查IP的信誉(SenderScore现在是一个很大的信誉服务,但是随着时间的流逝,它可能会持续存在)。这些服务通常都有提高声誉的准则,但不是像RBL那样的完全“通过/不通过”的方法。
不要伪造标题,不要躺在标题中,并确保您包括消息中的最小标头(需要DateFrom,应该有SubjectSenderReply-ToTo / Cc / Bcc [适用])。这是我收到的有效时事通讯中最大的宠物之一,由于它们伪造了Outlook Express标头,忽略了日期或类似内容,因此我希望将其收成垃圾邮件。

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

#4 楼

不幸的是,有许多不同的过滤技术,并且一些主要的邮件提供商不会发布它们使用的内容和/或对各种测试/过滤器赋予的权重,因此知道如何通过是很困难的。基本上,垃圾邮件已将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]


(该示例已从我的垃圾邮件中真正的垃圾邮件中删除)

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

#5 楼

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

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

评论


嗯我以前从未见过垃圾邮件发送者使用这种策略...

–Ernie
09年7月31日在16:22

通常,带有合法链接或两个链接的纯文本(通常不会大量散布)容易通过...否则,如果没有链接被标记为垃圾邮件,我将无法通过电子邮件将链接发送给自己或其他人。就像说您从未见过垃圾邮件发送者发送带有“脏话”的即时消息来诱使人们做出响应。合法流量也是如此。关键不是要“垃圾邮件过多” ...像bevans这样的用户名可能不会像“ hottienakedchick69”那样可疑,即使内容相同,您知道我的意思吗?

–巴特·银线
09年7月31日在18:33

#6 楼

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

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

评论


这是一种解决方法。正确的解决方案是纠正有故障的系统,并确保您至少在DNS中具有正确的SPF记录。

–约翰·加迪尼尔(John Gardeniers)
2012年9月22日下午0:52

实际上,如果您的邮件服务器所在的ISP被标记为垃圾邮件,那就祝您好运。当时我们在Rackspace上。由于Google确保未将其列入黑名单,因此将Google用作SMTP很有帮助。

–克里斯K
2012年9月25日在20:04

#7 楼

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

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

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



首先,谁发送电子邮件?

当您的PHP代码发送电子邮件时,通常使用著名的PHP函数mail(...)。但是,该功能在后台有什么作用?让我们运行一个包含test.php<?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

查看日志文件/var/mail/www-data可以知道哪些电子邮件没有正确发送,为什么。这可能对后续步骤很有用。
如Jeff Atwood的博客所述,现在该看看反向PTR记录了。 (更多详细信息将在此处添加。)

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

inet_protocols=ipv4


然后使用以下命令重新启动postfix service restart 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(可能对您来说是不必要的?)。


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配置为作为contact@example.com发送邮件(请参见此处的屏幕快照)。
如果不添加这些include:,则Gmail将无法通过@example.com发送电子邮件。


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


apt-get install opendkim opendkim-tools

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

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


,最后在postfix配置文件/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重新启动邮件服务。



测试是否一切正常。最简单的方法是通过PHP向auth-results@verifier.port25.com发送电子邮件(此非常有用的工具由Port25 Solutions提供):

$emailfrom = "Example <contact@example.com>";
$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: example@gmail.com\n";
mail("check-auth@verifier.port25.com", "Hello", "Hello!", $headers);


然后查看此工具的答案,它看起来应该像这样:

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


service mail-tester.com也是有用的。

(可选)尝试postmaster.google .com。我用过它,但我不记得它是否有用。
如果仍然不能使用,一种解决方案是使用专业的解决方案外包电子邮件,避免日以继夜的调试(不成功)。这是一篇很好的文章。这是一句名言:“从您的应用程序发送电子邮件可能会***。一半时间,从您自己的服务器发送的消息只会被转储到收件人的垃圾文件夹中。”经过数周的调整后,我遗憾地发现它是正确的。


附加说明:

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


#8 楼

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

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

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

ZeroBounce全面覆盖了所有内容。 NET

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