Ответ 1
Если класс является только оберткой вокруг функции mail, я бы попытался напечатать в файле параметры, используемые при вызове функции почты
В настоящее время я использую пользовательскую библиотеку на своей работе. Довольно просто библиотека работала отлично. Похоже, что он вернулся с сегодняшнего дня.
В самой библиотеке это оболочка вокруг функции mail. Он строит "границы" частей и всего.
Поскольку класс достаточно велик, я не буду публиковать его здесь... но мне интересно, каковы причины в теории того, почему почта вернет false?
sender<[email protected]
> [править] Просто нашел меньшую функцию и все еще не работает, я распечатаю ее:
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>");
Если класс является только оберткой вокруг функции mail, я бы попытался напечатать в файле параметры, используемые при вызове функции почты
У меня была такая же проблема. После обновления 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.
У меня была аналогичная проблема, функция почты всегда возвращает 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
Попробуйте установить
ini_set('sendmail_from', $from);
Если бы вы могли показать нам код, было бы легче увидеть, что происходит не так.
Возможно, адрес, к которому вы пытаетесь отправить его, сервер, который его обрабатывает, отклоняет почту.
Слишком много переменных, чтобы сказать наверняка.
Является ли ваше предположение, что функция mail() работает над тем, который вы тестировали? Я бы проверял, чтобы библиотека не просто пропускала функцию mail() вверх.
Если вы протестировали это предположение, я бы рассмотрел операторы return из библиотеки и посмотрел, могу ли я найти то, что может вызвать ложное значение. Это часто возможно даже в недокументированном коде.
Хорошее место для начала - проверить журнал ошибок.
Для apache и Ubuntu (например) журнал ошибок находится в /var/log/apache2/error.log
.
Это может дать вам подсказку о том, что именно терпит неудачу.