Кто-либо знает, как я могу зафиксировать почтовую ошибку (ошибка отображена при отправке электронного письма, и ошибка вызывается mailserver вниз) в php?
Ошибка, которая была вызвана emailserver вниз, ниже:
<! - 2010-02-24T14:26:43+11:00 УВЕДОМЛЕНИЕ (5): Неожиданная Ошибка: почта () [<href ='function.mail'> function.mail </a>]: Не удалось соединиться с mailserver в "IP" порте portip, проверить Вашу установку "SMTP" и "smtp_port" в php.ini или использовать ini_set () (№ 2).
24.02.2010 14:26:43
Имя пользователя: администратор
Ошибка в строке 439 из файла D:\test.php
Сценарий:/customer.php
[Глобальный обработчик ошибок]
-->
Это примерно лучшее, что вы можете сделать:
if (!mail(...)) {
// Reschedule for later try or panic appropriately!
}
http://php.net/manual/en/function.mail.php
mail()
возвращаетTRUE
, если почта была успешно принята для доставки,FALSE
в противном случае.Важно отметить, что если почта была принята к доставке, это НЕ означает, что почта действительно достигнет адресата.
Если вам нужно подавить предупреждения, вы можете использовать:
if (!@mail(...))
Будьте осторожны с использованием оператора @
без соответствующих проверок того, удалось ли что-то или нет.
Если mail()
ошибки не подавляются (странно, но сейчас не могу проверить), вы можете:
a) временно отключить ошибки:
$errLevel = error_reporting(E_ALL ^ E_NOTICE); // suppress NOTICEs
mail(...);
error_reporting($errLevel); // restore old error levels
b) использовать другой почтовик, как предлагают fire и Mike.
Если mail()
окажется слишком зыбким и негибким, я бы рассмотрел вариант б). Отключение ошибок усложняет отладку и вообще нехорошо.
PHPMailer отлично обрабатывает ошибки, также хороший скрипт для отправки почты через SMTP...
if(!$mail->Send()) {
echo "Mailer Error: " . $mail->ErrorInfo;
} else {
echo "Message sent!";
}
Вы можете использовать классы и методы PEAR Mail , которые позволяют вам проверять наличие ошибок через:
if (PEAR::isError($mail)) {
echo("<p>" . $mail->getMessage() . "</p>");
} else {
echo("<p>Message successfully sent!</p>");
}
Вы можете найти пример здесь .