Почта возвращает ложь - PullRequest
       18

Почта возвращает ложь

13 голосов
/ 24 апреля 2009

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

Сама библиотека это в основном оболочка для функции mail. Он строит «границы» частей и всего.

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

  • SMTP установлен в PHP.ini
  • Отправитель установлен в заголовках
  • Отправитель имеет вид: sender<sender@email.com>
  • Все отправлено правильно (тело + заголовки + тема)
  • Предположим, что 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 ]

15 голосов
/ 08 сентября 2009

У меня просто была такая же проблема. После обновления 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 с Zend Server CE.)

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

6 голосов
/ 18 августа 2011

У меня была похожая проблема, функция mail всегда возвращает 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

4 голосов
/ 24 апреля 2009

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

ini_set('sendmail_from', $from);

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

4 голосов
/ 24 апреля 2009

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

2 голосов
/ 24 апреля 2009

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

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

0 голосов
/ 09 апреля 2019

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

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

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

0 голосов
/ 24 апреля 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...