【问题标题】:How do you make sure email you send programmatically is not automatically marked as spam?如何确保以编程方式发送的电子邮件不会自动标记为垃圾邮件?
【发布时间】:2010-09-05 05:58:20
【问题描述】:

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

最近,我以编程方式发送的一些电子邮件已开始自动进入人们的垃圾邮件文件夹,我想知道我能做些什么。

尽管这些特定的电子邮件不会被人类标记为垃圾邮件,具体来说,它们是包含许可证密钥的电子邮件,人们已经为此付出了高昂的代价,所以我认为他们不会这样做将它们视为垃圾邮件

我认为这是一个很大的话题,我本质上是一个无知的傻瓜。

【问题讨论】:

    标签: email email-spam


    【解决方案1】:

    使用SPFDKIM等邮箱认证方式来证明你的邮箱和你的域名是同一的,防止你的域名被冒用。 SPF 网站包含一个为您的网站生成 DNS 信息的向导。

    Check 您的reverse DNS 以确保您的邮件服务器的 IP 地址指向您用于发送邮件的域名。

    确保您使用的 IP 地址是 not on a blacklist

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

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

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

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

    也就是说,让 Hotmail 接受您的电子邮件仍然是一种魔法。

    【讨论】:

    • 您能否详细说明滥用帐户?我不确定你的意思
    • brandonchecketts.com/emailtest.php您可以测试您的邮件服务器设置是否符合DomainKeys、DKIM、SPF和其他反垃圾邮件方法。
    • 另外,制作一个退回的电子邮件检测算法来验证错误的电子邮件地址(例如,如果邮件退回 3 次,则停止向该地址发送邮件)
    • +1 表示“也就是说,让 Hotmail 接受您的电子邮件仍然是一种黑艺术。” Hotmail 几乎不区分垃圾邮件和非垃圾邮件。一切都在收件箱或垃圾邮件箱中(根据您的设置)。
    • Brandon Checketts 将他的邮件服务器一致性工具移至:dkimvalidator.com
    【解决方案2】:

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

    【讨论】:

    • 一些垃圾邮件系统会考虑个人的阅读习惯。 (来自该发件人的电子邮件会被阅读还是被删除而不阅读?等等。)所以这肯定会帮助您找到它们何时被标记(真正的否定),但是这一步并不能证明它们不会为其他用户在同一系统上(误报)。
    【解决方案3】:

    previous answer 中的几个要点:

    • 最重要:发件人地址(“发件人”)是否属于在您发送电子邮件的服务器上运行的域?如果没有,那就这样吧。永远不要使用像xxx@gmail.com 这样的发件人地址。用户reply-to,如果您需要回复以到达其他地址。

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

    • 邮件是否被垃圾邮件过滤器过滤?使用具有垃圾邮件文件夹的免费邮件程序打开一个帐户并找出答案。此外,请尝试将邮件发送到完全不过滤垃圾邮件的地址。

    • 你可能需要mail()的第五个参数“-f”来添加发件人地址吗? (参见 PHP 手册中的 mail() 命令)

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

    • 您是否检查“发件人:”地址以查找可能的退回邮件(“退回给发件人”)?您还可以设置一个单独的“出错地址”。

    【讨论】:

      【解决方案4】:

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

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

      您可以尝试的其他方法:

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

      【讨论】:

        【解决方案5】:

        在发送电子邮件之前,请确认您拥有正确的电子邮件地址。如果有人在注册时提供了错误的电子邮件地址,请尽快击败他们。

        始终在每封电子邮件中包含明确的“如何退订”信息。不要求用户登录退订,它应该是一键退订的唯一url。

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

        【讨论】:

        • +1 用于一键退订的唯一网址。我讨厌登录退订。我将它们标记为垃圾邮件!
        【解决方案6】:

        除了所有其他答案之外,如果您发送的 HTML 电子邮件包含 URL 作为链接文本,请确保 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>
        

        【讨论】:

        • 你好 Mike,我有两个域,即 domain1.com 和 domain2.com。您的代码适用于 domain1.com,但不适用于 domain2.com。我不知道为什么?我没有改变任何想法。 stackoverflow.com/questions/42200904/…
        • @NarendraVerma 在这种情况下,我的回答似乎不适用于您。我建议在这里查看其他答案,看看是否还有其他适合您的方法。最后,由电子邮件提供商决定他们认为什么是垃圾邮件以及他们允许通过什么,并且每个人都会考虑几个不同的因素。 Gmail 实际上会简要说明为什么如果您点击垃圾邮件,邮件会被标记为垃圾邮件。
        • 感谢Mike 先生的回复,实际上我在domain1 中应用了您的答案,并且有效。我正在使用 PHpMailer,并添加了 $email_body="domain1.com'>View</a>"。这工作得很好。
        • 我不知道为什么第二个 domain2 不起作用。当然,我会与 Gmail 团队联系。这段代码还有什么建议吗?
        • @NarendraVerma 您的代码没有问题。
        【解决方案7】:

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

        • 准确目标
        • 垂直响应
        • 经常联系
        • 活动监视器
        • 艾玛
        • 返回路径
        • IntelliContact
        • 银色流行音乐

        【讨论】:

          【解决方案8】:

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

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

          如果您需要一次发送一堆客户服务电子邮件,最好在每封电子邮件之间设置一个延迟,因为如果您一次向一个域发送太多几乎相同的电子邮件,您肯定会胡思乱想在他们的黑名单上。

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

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

          【讨论】:

          • 什么是 NDR?能详细点吗?
          • 未送达报告,又名bounce message
          【解决方案9】:

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

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

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

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

          如果我希望将来来自同一来源的邮件进入我的收件箱,而不是被转用于垃圾邮件审查,我会向我的电子邮件客户端指定。对于那些使用批量邮件转发器和每个邮件的唯一发件人地址的组织来说,这太糟糕了。他们从来没有得到我的认可,总是出现在我的垃圾邮件文件夹中,如果我很忙,我永远不会看他们。

          最后,如果一封电子邮件在明文中无法辨认,即使以 HTML 格式发送,我也可能会删除它,除非我知道它是我根据来源和以前的宝贵经验知道我感兴趣的东西.

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

          【讨论】:

            【解决方案10】:

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

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

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

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

            【讨论】:

            • 这种方法对于不使用支持 HTML 的电子邮件客户端的安全意识也很有帮助,
            【解决方案11】:

            Yahoo 使用一种称为发件人 ID 的方法,可以在 The SPF Setup Wizard 进行配置并输入您的 DNS。对于 Exchange、Hotmail、AOL、Yahoo 和其他人来说,重要的之一是为您的域提供反向 DNS。这些将解决大部分问题。但是,您永远无法阻止有人故意阻止您或自定义规则。

            【讨论】:

            • 雅虎使用 SPF 记录和 DomainKeys; SenderID 是一种不同的(在许多方面是不兼容、不安全和设计不佳的)技术,不应使用它。
            【解决方案12】:

            您需要一个反向 DNS 条目。您不需要将相同的内容发送给同一用户两次。您需要使用一些常见的 webmail 和电子邮件客户端对其进行测试。 就我个人而言,我通过一个新安装的垃圾邮件刺客、一个训练有素的垃圾邮件刺客以及多个 hotmail、gmail 和 aol 帐户来运行我的。

            但是您是否看到过似乎没有链接到或宣传任何内容的垃圾邮件?这是一个试图影响您的贝叶斯过滤器的垃圾邮件发送者。如果他能获得高评价,然后在他未来的电子邮件中包含一些单词,那么它可能会自动学习为好。因此,在您发送邮件时,您无法真正猜测用户的过滤器将被设置为什么。

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

            【讨论】:

              【解决方案13】:

              我发现在正文中使用收件人的真实姓名是通过垃圾邮件过滤器的可靠方法。

              【讨论】:

                【解决方案14】:

                在英国,最好的做法也是为您的公司提供真实的实际地址及其注册号码。

                这样一来,一切都是公开和诚实的,他们不太可能手动将其标记为垃圾邮件。

                【讨论】:

                  【解决方案15】:

                  我会补充:

                  点击“退订”即可提供真正的退订。我见过真实的时事通讯提供了一个虚拟退订链接,点击后会显示“已成功退订”,但我仍会收到更多时事通讯。

                  【讨论】:

                    【解决方案16】:

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

                    • 请确保您已获得要向其发送电子邮件的人的许可。永远不要向不是您要求的人发送电子邮件。

                    • 在每封邮件的顶部清楚地标明您是谁,以及此人收到电子邮件的原因。

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

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

                    • 让人们可以轻松地选择退出进一步的通信。

                    • 使用像 SendGrid 这样努力维护良好 IP 声誉的电子邮件发送服务。

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

                    遵循这些经验法则会有很大帮助。

                    【讨论】:

                      【解决方案17】:

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

                      【讨论】:

                        【解决方案18】:

                        很可能是注册您的服务的人输入的电子邮件中有您没有更正的输入错误。例如:chris@gmial.com -或- james@hotnail.com

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

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

                        【讨论】:

                        • 这个。如果您首先不练习基本的订阅卫生,那么当前接受的答案中没有任何区别。
                        【解决方案19】:

                        听起来您是根据一些反馈来确定接收端卡住了什么。您应该自己检查出站邮件是否存在明显的“垃圾邮件”。

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

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

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

                        【讨论】:

                          【解决方案20】:

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

                          来自bulk senders guidelines

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

                          为确保 Gmail 可以识别您:

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

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

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

                          【讨论】:

                            【解决方案21】:

                            我总是使用: https://www.mail-tester.com/

                            它给了我关于发送电子邮件的技术部分的反馈。像 SPF-records、DKIM、Spamassassin score 等等。即使我知道需要什么,我也会不断地出错,而 mail-tester.com 可以很容易地找出可能出错的地方。

                            【讨论】:

                              【解决方案22】:

                              首先,您需要确保所需的电子邮件身份验证机制(如 SPF 和 DKIM)到位。这两种是证明您是电子邮件的实际发件人并且不是真正的欺骗的突出方式。这样可以减少电子邮件被过滤为垃圾邮件的机会。

                              第二件事是,您可以对照不同的 DNSBL 检查您的域名的反向 DNS 输出。在终端上使用以下简单命令:

                                **dig a +short (domain-name).(blacklist-domain-name)**
                              
                                ie.  dig a +short example.com.dsn.rfc-clueless.org
                                > 127.0.0.2
                              

                              在上述示例中,这意味着您的域“example.com”被列入黑名单,但由于域设置合规性(rfc-clueless.org 列出存在合规性问题的域)

                              注意:我更喜欢 multivalleypepipost tool 来检查域列表。

                              发件人地址/回复 ID 应该是正确的,始终在您的电子邮件正文中使用可见的退订按钮(这将帮助您的用户从您的电子邮件列表中退出而不会损害您的域声誉)

                              【讨论】:

                                【解决方案23】:

                                大多数以编程方式生成的电子邮件的目的通常是事务性的、触发性的或警报性质的 - 这意味着这些是重要的电子邮件,不应成为垃圾邮件。

                                话虽如此,在将电子邮件标记为垃圾邮件之前需要考虑多个参数。虽然电子邮件列表的质量是要考虑的最重要的参数,但我在这里从讨论中跳过它,因为这里我们讨论的是发送给我们自己或已知电子邮件地址的重要电子邮件。

                                除了列表质量,其他三个重要参数是:

                                1. 发件人信誉
                                2. 符合电子邮件标准和身份验证(SPF、DKIM、DMARC、rDNS)
                                3. 电子邮件内容

                                发件人信誉=发送IP地址信誉+返回路径/信封域信誉+发件域信誉。

                                对于您的发件人信誉没有直接的答案。这是因为有多个权威机构,如 SenderScore、声誉权威机构等,他们维护您的域的声誉评分。除了 Gmail、Yahoo、Outlook 等 ISP 还维护每个域的声誉。

                                但是,您可以使用 GradeMyEmail 等免费工具来 360 度全方位了解您的声誉以及电子邮件设置的潜在问题或任何其他与合规相关的问题。

                                有时,如果您使用新域来发送电子邮件,那么这些邮件也会被放入垃圾邮件中。您应该检查您的域是否列在任何全局阻止列表中。同样,GradeMyEmail 和 MultiRBL 是识别黑名单列表的有用工具。

                                一旦您非常确定发件人信誉评分,您应该检查您的电子邮件发送域是否符合所有电子邮件身份验证和标准。

                                1. 防晒系数
                                2. DKIM
                                3. DMARC
                                4. 反向 DNS

                                为此,您可以再次使用 GradeMyEmail 或 MXToolbox 来了解您的身份验证的潜在问题。

                                您的 SPF、DKIM 和 DMARC 应始终通过,以确保您的电子邮件符合标准电子邮件身份验证。 以下是这些身份验证在 Gmail 中的外观示例:

                                同样,您可以使用 Mail-Tester 等工具扫描完整的电子邮件内容并告知可能触发垃圾邮件过滤器的潜在关键字。

                                【讨论】:

                                  【解决方案24】:

                                  要让 DMARC 检查 SPF 通过并在使用 sendmail 时对齐,请确保您设置了信封发件人地址(-f-r参数)到与From: 标头地址中的域匹配的内容。

                                  使用 PHP:

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

                                  例如,假设您在 host.com 网络服务器上托管您的网站 domain.com。如果不设置附加参数参数:

                                  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 检查。

                                  【讨论】:

                                    猜你喜欢
                                    相关资源
                                    最近更新 更多