AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 48428
Accepted
kcode
kcode
Asked: 2009-07-31 21:53:20 +0800 CST2009-07-31 21:53:20 +0800 CST 2009-07-31 21:53:20 +0800 CST

如何发送电子邮件并避免它们被归类为垃圾邮件?

  • 772
想要改进这篇文章?提供这个问题的详细答案,包括引文和解释为什么你的答案是正确的。没有足够细节的答案可能会被编辑或删除。

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

  • 防止您看起来像垃圾邮件发送者的最佳做法
  • 打击垃圾邮件 - 作为电子邮件管理员、域所有者或用户,我能做什么?

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

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

email spam spam-filter
  • 8 8 个回答
  • 187647 Views

8 个回答

  • Voted
  1. Best Answer
    splattne
    2009-07-31T23:15:40+08:002009-07-31T23:15:40+08:00

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

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

    使用电子邮件验证方法,例如SPF和DKIM来证明您的电子邮件和您的域名属于同一个。好的副作用是您可以帮助防止您的电子邮件域被欺骗。还要检查您的反向 DNS以确保您的邮件服务器的 IP 地址指向您用于发送邮件的域名。

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

    • 90
  2. wg
    2009-08-01T05:23:58+08:002009-08-01T05:23:58+08:00

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

    • 23
  3. Chris S
    2014-03-26T13:03:13+08:002014-03-26T13:03:13+08:00

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

    如今,这些最低要求基本上是必需的:

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

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

    3. 确保您的 IP 地址不在任何 DNSRBL(黑名单)中。如果是,请处理好。

    4. 使用更受欢迎的声誉服务检查您的 IP 的声誉(SenderScore 现在是一个很大的服务,但随着时间的推移可能不会持续)。这些服务通常具有提高您的声誉的指导方针,但不像 RBL 那样完全“通过/不通过”。

    5. 不要伪造标题,不要在标题中撒谎,并确保您在消息中包含最少的标题(Date并且From是必需的,应该有Subject, Sender,Reply-To和To/ Cc/ Bcc[如适用])。这是我最大的烦恼之一,我希望收到的有效时事通讯最终以垃圾邮件结尾,因为它们伪造了 Outlook Express 标题、遗漏了日期或类似的东西。

    或者,您应该考虑设置 SPF、DKIM 和 DMARC。这些有助于提高可传递性,但不是必需的(绝大多数电子邮件服务器都不需要)。

    • 15
  4. David Spillett
    2009-07-31T23:24:14+08:002009-07-31T23:24:14+08:00

    不幸的是,有许多不同的过滤技术,一些主要的邮件提供商不会公布他们使用的内容和/或各种测试/过滤器的权重,因此很难知道如何通过。基本上,垃圾邮件已将 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
  5. Bart Silverstrim
    2009-08-01T04:44:52+08:002009-08-01T04:44:52+08:00

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

    您可能要考虑的一件事是向您的客户发送一封纯文本电子邮件,其中包含实际包含快速描述/问候语的每个时事通讯,然后是“单击此处查看我们的最新时事通讯!” 信息; 这样您就可以在 Web 服务器上托管您的消息,您正在减少电子邮件的大小(并在您的邮件服务器上加载)并且作为奖励,您可以检查您的 Web 服务器上的日志以获取有关有多少客户的反馈实际阅读您的消息与删除它们。

    • 9
  6. Krista K
    2012-06-06T11:34:40+08:002012-06-06T11:34:40+08:00

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

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

    • 7
  7. Basj
    2017-09-02T02:21:32+08:002017-09-02T02:21:32+08:00

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

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

    如果您遵循以下所有步骤,它应该可以解决 99.9% 的问题。(我一开始以为可以只做其中的几个,例如跳过 DKIM,但最后都需要它们来解决我遇到的所有问题)。

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

      当您的 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,ok 这意味着我们已经postfix安装了。

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

    3. 正如Jeff Atwood 的博客中提到的,是时候查看反向 PTR 记录了。(更多细节将在此处添加)。

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

      inet_protocols=ipv4
      

      然后用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 步(这对您来说可能是不必要的?)。

    5. SPF DNS 记录。为了证明您被允许发送电子邮件@example.com,您可以在域的 DNS 记录中添加 SPF 记录example.com。我在某个地方找到了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]的身份发送邮件(请参见此处的屏幕截图) 。如果我不添加这些,Gmail 将无法从.include:@example.com

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

      • 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:8891@localhost" # 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
  8. Henry
    2018-03-27T18:16:31+08:002018-03-27T18:16:31+08:00

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

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

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

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

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

    • 1

相关问题

  • 你使用什么样的邮件服务器?

  • 针对大量邮件的 SMTP 服务的建议 [关闭]

  • 多操作系统环境的首选电子邮件客户端

  • Exchange 2007 的备份解决方案

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve