邮件返回false

时间:2009-04-24 15:02:36

标签: php

我目前正在使用自定义库。直到这个图书馆工作得非常好。从今天开始,它显然是假的。

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

由于课程相当大,我不会在这里发布...但我想知道,理论上为什么邮件会返回错误的原因是什么?

  • SMTP在PHP.ini中设置
  • 发件人设置在标题
  • 发件人的形式为:sender<sender@email.com&gt;
  • 一切都正确发送(正文+标题+主题)
  • 假设mail()在网站上正常工作,但在此特定页面上却没有。我知道它一定是从我这里来的,但是有一个地方可以开始寻找。
  • 哦,是的,图书馆没有证件。

[编辑] 刚刚找到一个较小的功能但仍无法正常工作,我会将其打印出来:

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>");

7 个答案:

答案 0 :(得分:15)

我遇到了同样的问题。 在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_from'和'sendmail_path'设置一个值。 我的案例中的正确值是:

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

(我正在使用CentOS 5.3 w / Zend Server CE。)

您可以使用ini_set()来设置'sendmail_from'的值,但必须在php.ini或http.conf中设置'sendmail_path'var。

答案 1 :(得分:6)

我有类似的问题,即使收到成功的电子邮件,邮件功能也总是返回false。

我在php配置文件php.ini中找到了, 我已经设置了

; 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

根据这个sendmail_from是针对win32的,所以在* unix OS中我们需要设置sendmail_path变量中显示的值。

此致 Minesh

答案 2 :(得分:4)

如果该类只是函数邮件的包装器,我会尝试打印一个文件,调用邮件函数时使用的参数

答案 3 :(得分:4)

尝试设置

ini_set('sendmail_from', $from);

如果你能向我们展示代码,那么就会更容易看出出现了什么问题。

答案 4 :(得分:2)

您尝试将其发送到的地址可能是,处理它的服务器拒绝邮件。

有太多变数需要确定。

答案 5 :(得分:0)

您是否认为mail()函数适用于您已测试的函数?我会检查以确保库不仅仅是传递了mail()函数的失败。

如果您已经测试了这个假设,我会检查库中的return语句,看看我是否能找到会导致错误值的内容。即使在未记录的代码中,这通常也是合理可行的。

答案 6 :(得分:0)

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

例如对于apache和Ubuntu,错误日志位于/var/log/apache2/error.log下。

这可以为您提供确切原因的线索。