Mail возвращает false

В настоящее время я использую пользовательскую библиотеку на своей работе. Довольно просто библиотека работала отлично. Похоже, что он вернулся с сегодняшнего дня.

В самой библиотеке это оболочка вокруг функции mail. Он строит "границы" частей и всего.

Поскольку класс достаточно велик, я не буду публиковать его здесь... но мне интересно, каковы причины в теории того, почему почта вернет false?

  • SMTP установлен в PHP.ini
  • Отправитель настроен в заголовках
  • Отправитель имеет форму: sender<[email protected] >
  • Все отправлено правильно (body + headers + subject)
  • Предположим, что 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: <[email protected]>\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([email protected], [email protected], utf8_decode("the subject"), "<h1>test</h1>");

Ответ 1

Если класс является только оберткой вокруг функции mail, я бы попытался напечатать в файле параметры, используемые при вызове функции почты

Ответ 2

У меня была такая же проблема. После обновления php функция почты всегда возвращает false.

Я использовал этот маленький фрагмент, чтобы проверить его:

<?php
error_reporting(E_ALL|E_STRICT);
ini_set('display_errors', 1);
echo 'I am : ' . `whoami`;
$result = mail('[email protected]','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 = "[email protected]"
sendmail_path = "/usr/sbin/sendmail -t -i"

(Я использую CentOS 5.3 w/Zend Server CE.)

Вы можете использовать ini_set() для установки значения "sendmail_from", но параметр "sendmail_path" var должен быть настроен в вашем php.ini или http.conf.

Ответ 3

У меня была аналогичная проблема, функция почты всегда возвращает false, даже если письмо успешно получено.

Я нашел в файле конфигурации php php.ini, Я настроил

; For Win32 only.
;sendmail_from = [email protected]

; For Unix only.
sendmail_path = "/usr/sbin/sendmail -t -i -f "[email protected]"

Я изменил его ниже

; For Win32 only.
;sendmail_from = [email protected]

; For Unix only.
sendmail_path = /usr/sbin/sendmail -t -i -f [email protected]

В соответствии с этим sendmail_from для win32, поэтому в * unix OS нам нужно установить значение, как показано в переменной sendmail_path.

Отношения Minesh

Ответ 4

Попробуйте установить

ini_set('sendmail_from', $from);

Если бы вы могли показать нам код, было бы легче увидеть, что происходит не так.

Ответ 5

Возможно, адрес, к которому вы пытаетесь отправить его, сервер, который его обрабатывает, отклоняет почту.

Слишком много переменных, чтобы сказать наверняка.

Ответ 6

Является ли ваше предположение, что функция mail() работает над тем, который вы тестировали? Я бы проверял, чтобы библиотека не просто пропускала функцию mail() вверх.

Если вы протестировали это предположение, я бы рассмотрел операторы return из библиотеки и посмотрел, могу ли я найти то, что может вызвать ложное значение. Это часто возможно даже в недокументированном коде.

Ответ 7

Хорошее место для начала - проверить журнал ошибок.

Для apache и Ubuntu (например) журнал ошибок находится в /var/log/apache2/error.log.

Это может дать вам подсказку о том, что именно терпит неудачу.