【问题标题】:How to send email with php without the mail landing automaticly in the trash box如何使用php发送电子邮件而不会自动将邮件降落在垃圾箱中
【发布时间】:2010-12-25 06:39:16
【问题描述】:

我正在使用 PHP 的 mail() 函数发送一些电子邮件。但是我所有的邮件都会自动落入垃圾箱。有没有办法防止这种情况?如果是这样,我应该在哪里阅读以了解更多信息。

你会推荐我使用 PHPmailer 吗?

最好的问候, 亚历山大

【问题讨论】:

    标签: php email phpmailer recycle-bin


    【解决方案1】:

    TL;DR:没有灵丹妙药。仅仅因为您可以学习如何在 PHP 中形成电子邮件,并不能保证它会被路由到某人的邮箱,甚至被接受。成功取决于声誉,而不是任何单一的解决方案。

    我是(编辑:曾经是)一名邮件服务器工程师,编写过 SpamAssassin 规则,并且对于发送或接收电子邮件的客户有深层次的问题。

    收件人的邮件服务器扫描您的电子邮件,寻找属性和“历史问题”(缺少邮件代理、来自您的网络服务器 IP 等)。这些获得“积分”。比较总点数,接收方的服务器可能会执行以下一项或多项操作:

    • 列表项
    • 在 SMTP 期间被拒绝,
    • 路由到垃圾邮件文件夹,
    • 路由到收件箱,但标记为“垃圾邮件
    • 黑洞(接受,然后神秘地丢失)。

    “分数”(分数)仅对特定的反垃圾邮件解决方案意味着某些东西。没有公开测试。解决所有可以解决的问题,然后成功。

    *#1 问题是:不要将电子邮件直接发送到收件人的 SMTP 服务器。该网络空间发送 99.9% 的垃圾邮件。扫描电子邮件需要花钱,因此优秀的电子邮件管理员会阻止或拒绝此类连接。

    源 IP 的“修复”是:使用 SMTP 网关。网关可以是我们的 ISP 邮件服务器,也可以是商业服务。首先检查他们的服务条款。他们可能会禁止使用经过身份验证的 Web 表单发送电子邮件,因为这些表单经常被滥用(“有人黑了我”不是借口)。

    如果您有电子邮件托管,请执行以下操作:创建一个名为“website-notification@websitedomain.com”的邮箱。随便叫什么。现在您希望您的 PHP 脚本使用 Authenticated SMTP 通过该地址发送电子邮件。 我将把学习如何使用 PHP 中的 Authenticated SMTP 作为学习练习留给你——网上有很多教程。

    一旦您通过您的有效 SMTP 服务器发送电子邮件,该邮件将被视为“源自”您的 SMTP 网关。它不被视为来自您的脚本。但这不是故事的结局

    1. 正如其他人所指出的,请确保您没有丢失显示标题,例如收件人:发件人:主题:和日期:。严格来说,这些标头在电子邮件握手中不是“必需的”,但实际上没有信誉良好的电子邮件软件会忽略它们。此外,日期必须采用标准日期格式,否则某些垃圾邮件过滤器会对其进行标记。

    不要将本主题与“信封标头”(SMTP 握手中的隐藏内容)混淆,这也会影响您的分数。使用 SMTP 网关通常会解决这个问题(因为收件人的邮件服务器会与您的网关主机握手)。

    1. 您的 FROM 地址必须是有效的。不要使用假域名。不要将您的域名与虚假邮箱名称一起使用。一些反垃圾邮件软件会执行“发件人验证”来测试发件人地址是伪造的还是伪造的(过于简单了:他们会尝试发送回复,看看您是否接受)。

    #1 错误是将您的发件人地址设置为“noreply@yourdomain.com”,而不是创建该邮箱。发生这种情况时,您电子邮件上的每个人的“发件人验证”都会失败,您看起来就像是垃圾邮件发送者,掩盖了他们的踪迹。

    1. 如果您的域 DNS 有 SPF 记录,请 100% 确保它列出了可能为您的域发送电子邮件的每个 IP。这是一个技术话题。拥有有效、正确的 SPF 记录有助于您的交付能力。但是,如果您误解并创建了错误(不正确)的 SPF 记录,您的情况会更糟。在使用它之前花点时间了解一下。

    2. 如果您的企业有真实地址或邮政信箱,请尽量避免使用“域注册隐私”或“域代理”服务。撰写本文时(2011 年),匿名服务可能会阻止您的邮件或“标记为垃圾邮件”,这在过去是非常真实的。这在今天不太正确,但仍然值得考虑。

    3. 了解您的邮件服务器的 IP 地址,并定期检查它是否未在 SpamCop、SpamHaus 或梭子鱼垃圾邮件黑名单中“列入黑名单”。谷歌了解更多。有监控服务和脚本可以提醒您。但是,如果您进入这些列表,则意味着发生了您没有监控的其他事情......

    如前所述,没有简单的答案。 :)

    【讨论】:

      【解决方案2】:

      我想你的意思是接收器端的 thrash box。所以基本上接收电子邮件服务器将其视为垃圾邮件。在以下情况下可能会发生这种情况:

      1) 您发送的 IP 已被列入垃圾邮件黑名单(经常发生在共享主机中)

      2) IP 和域名相对较新且未知。

      (请注意,很多时候,来自知名网站的新闻通讯也会成为垃圾邮件)。

      如果它是您的专用 IP,则为该 IP 设置 RDNS 以匹配域名很可能会解决问题。另一种通常的做法是提醒接收者(如果她在您的网站上订阅)检查他们的 thrash/spam 文件夹并将您的电子邮件地址列入他们的邮件帐户中的白名单。

      问候,

      日本

      【讨论】:

        【解决方案3】:

        JP 的回答部分正确,但也可能是您在电子邮件中的标题,我从经验中知道这会将内容发送到垃圾邮件文件夹,请尝试以下操作;

        将电子邮件设置为您的域,例如不回复或有效回复。

        $to      = 'nobody@example.com';
        $subject = 'the subject';
        $message = 'hello';
        $headers = 'From: webmaster@example.com' . "\r\n" .
            'Reply-To: webmaster@example.com' . "\r\n" .
            'X-Mailer: PHP/' . phpversion();
        
        mail($to, $subject, $message, $headers);
        

        【讨论】:

        • 非常正确..应该先尝试这个修复。
        【解决方案4】:

        这可能与您的邮件客户端和垃圾邮件设置配置有关。尝试在gmail.com 上开设帐户并在那里发送电子邮件,如果没问题,您就知道这是您的邮件服务器/客户端问题。如果不是,请发布您的 PHP 代码和您收到的电子邮件的完整电子邮件标题。

        【讨论】:

          【解决方案5】:

          发生这种情况是因为很多时候,如果不存在众所周知的电子邮件服务器域密钥签名或类似的东西,标头会丢失。如果您已经有一个单独的电子邮件服务器,您应该检查是否可以使用 PHP Pear Mail 包使用您的电子邮件服务器发送电子邮件,而不是直接通过邮件功能。我觉得这很方便,因为它更灵活。

          【讨论】:

            猜你喜欢
            • 2011-10-28
            • 1970-01-01
            • 2011-07-24
            • 1970-01-01
            • 2018-03-16
            • 1970-01-01
            • 1970-01-01
            • 2013-10-17
            • 1970-01-01
            相关资源
            最近更新 更多