代码之家  ›  专栏  ›  技术社区  ›  Erick

邮件返回错误

php
  •  12
  • Erick  · 技术社区  · 15 年前

    我目前正在工作中使用定制的库。直到不久前,图书馆工作得很好。从今天起,它显然返回了false。

    库本身基本上是围绕函数mail的包装器。它构建了“边界”部分和所有内容。

    因为班级太大了,所以我不会把它贴在这里。。。但我想知道,从理论上讲,邮件返回错误的原因是什么?

    • SMTP是在PHP.ini中设置的
    • 发件人设置在标题中
    • sender<sender@email.com
    • 所有内容都已正确发送(正文+标题+主题)
    • 哦,是的,图书馆是没有文件的。

    刚找到一个较小的函数,但仍然不起作用,我将打印出来:

    function send_html($from, $email, $subject = "AUCUN", $message, $cc = "", $bcc ="", $priotity = "3") {
        $headers = "";
        $headers .= "MIME-Version: 1.0\r\n"; 
        $headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
    
        if (strpos($from, "ourwebsite.com") != false || strpos($from, "rencontresportive.com") != "") {
            $headers .= "From: Ourwebsite.com <" . $from . ">\r\n";
        } else {
            $headers .= "From: " . $from . " <" . $from . ">\r\n";
        }
    
        $headers .= "X-Sender: <" . $from . ">\r\n";
        $headers .= "X-Priority: " . $priotity . "\r\n";
        $headers .= "X-Mailer: PHP\r\n";
        $headers .= "Return-Path: <admin@ourwebsite.com>\r\n";
    
        if ($cc != "") {
            $headers .= "cc:" . $cc . "\r\n";
        }
        if ($bcc != "") {
            $headers .= "bcc:" . $bcc . "\r\n";
        }
            if (mail($email, $subject, $message, $headers)) {
            return true;
        } else {
            return false;
        }
    }
    

    send_html(contact@ourwebsite.com, me@me.com, utf8_decode("the subject"), "<h1>test</h1>");
    
    6 回复  |  直到 12 年前
        1
  •  18
  •   Ray txyoji    12 年前

    我也有同样的问题。 php升级后,mail函数始终返回false。

    我用这个小片段来检查它:

    <?php
    error_reporting(E_ALL|E_STRICT);
    ini_set('display_errors', 1);
    echo 'I am : ' . `whoami`;
    $result = mail('myaddress@mydomain.com','Testing 1 2 3','This is a test.');
    echo '<hr>Result was: ' . ( $result === FALSE ? 'FALSE' : 'TRUE') . $result;
    echo '<hr>';
    echo phpinfo();
    

    解决方案是在我的php.ini中为“sendmail\u from”和“sendmail\u path”设置一个值。 在我的案例中,正确的值是:

    sendmail_from = "no-reply@mydomain.net"
    sendmail_path = "/usr/sbin/sendmail -t -i"
    

    可以使用ini_set()设置“sendmail_from”的值,但必须在php.ini或http.conf中设置“sendmail_path”变量。

        2
  •  6
  •   Lars    13 年前

    我已经准备好了

    ; For Win32 only.
    ;sendmail_from = me@example.com
    
    ; For Unix only.
    sendmail_path = "/usr/sbin/sendmail -t -i -f "care@mydomain.com"
    

    我把它改成下面的

    ; For Win32 only.
    ;sendmail_from = me@example.com
    
    ; For Unix only.
    sendmail_path = /usr/sbin/sendmail -t -i -f care@mydomain.com
    

    米尼什

        3
  •  4
  •   Razvan Stefanescu    15 年前

    如果该类只是函数mail的包装器,我会尝试将调用mail函数时使用的参数打印到文件中

        4
  •  4
  •   Alix Axel    15 年前

    ini_set('sendmail_from', $from);
    

    如果你能给我们看一下代码,就更容易看出哪里出了问题。

        5
  •  2
  •   Matt    15 年前

    涉及的变量太多,无法确定。

        6
  •  2
  •   Marco7757    5 年前

    一个好的开始是检查错误日志。

    /var/log/apache2/error.log .

    这可以给你一个关于失败的线索。

        7
  •  0
  •   acrosman    15 年前

    您对mail()函数工作的假设是您已经测试过的吗?我会检查以确保库不仅仅是传递mail()函数的失败。