【问题标题】:PHP mail() not sendingPHP邮件()不发送
【发布时间】:2014-06-18 02:08:42
【问题描述】:

我有一个WebFaction 服务器和以下代码:

$to = "outreach@bmun.org";
$reply_to = "From: " . $_POST['email'];
$name = $_POST['name'];
$subject = "Outreach Request Session for " . $_POST['school'] . " on " . $_POST['date'];

$em = $_POST['message'] . "\n-" . $name;

$sentmail = mail($to, $subject, $em, $reply_to);

$sentmail 返回 true,但电子邮件由于某种原因没有发送。

【问题讨论】:

  • true的返回值仅表示该消息已被服务器接受传递。未到达可能意味着它已成为垃圾邮件,服务器未正确配置为发送邮件等。您可能应该尝试使用 serverfault.com。
  • 如果 PHP mail() 函数返回 true 则问题不在于 PHP。您应该查看邮件服务器的日志。邮件也可能在垃圾邮件文件夹中......

标签: php email webfaction


【解决方案1】:

$sentmail 返回 true,但电子邮件由于某种原因没有发送。

PHP 中的mail 函数只是通过服务器上的 MTA(邮件传输代理)发送邮件。 true 可能意味着本地 MTA 接受了它。但这并不是您所需要的全部。

首先,您的托管服务提供商是否真的允许外发邮件?还是将消息发送到虚拟“黑洞”?

现在,让我们假设您的本地 MTA(很可能是 sendmail)有效,并且邮件从服务器跳出并进入了现实世界。好的,太好了!

但没那么快……

事情只是因为你发送一封邮件,并不意味着接收端认为邮件是有效的。接收端很可能认为从随机服务器发送的随机电子邮件只是垃圾邮件。

我已经发布了a more detailed answer here,但是当涉及到垃圾邮件时,它基本上可以归结为:您是否为您的域设置了SPF (Sender Policy Framework) 记录?您是否还为该域设置了a PTR (reverse DNS) record

如果您没有 SPF 或 PTR 记录,您的邮件被标记为垃圾邮件的可能性非常高。

如果您认真对待从服务器发送邮件,您至少需要获得您的 SPF 记录和 PTR 记录集。

【讨论】:

    【解决方案2】:

    您的电子邮件中没有任何标题。 尽管它们似乎不是必需的,但垃圾邮件检查器会更快地阻止您的电子邮件。

    这是一个例子:

    <?php
            $headers = "MIME-Version: 1.0\n" ;
            $headers .= "Content-Type: text/html; charset=\"iso-8859-1\"\n";
            $headers .= "X-Priority: 1 (Highest)\n";
            $headers .= "X-MSMail-Priority: High\n";
            $headers .= "Importance: High\n";
    
     $status   = mail($to, $subject, $message,$headers);
    ?> 
    

    【讨论】:

    • 在您不同意的情况下说您发送 html 电子邮件更有可能让您被屏蔽。
    • 这只是一个如何使用标题的示例。一个标准,仅此而已。看着海报,我想他会知道如何处理它。
    猜你喜欢
    • 1970-01-01
    • 2014-08-17
    • 1970-01-01
    • 1970-01-01
    • 2018-10-11
    • 2016-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多