Как я могу зафиксировать ошибку, вызванную почтой ()?

Кто-либо знает, как я могу зафиксировать почтовую ошибку (ошибка отображена при отправке электронного письма, и ошибка вызывается 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
[Глобальный обработчик ошибок]
-->

28
задан YakovL 12 September 2017 в 20:22
поделиться

3 ответа

Это примерно лучшее, что вы можете сделать:

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() окажется слишком зыбким и негибким, я бы рассмотрел вариант б). Отключение ошибок усложняет отладку и вообще нехорошо.

46
ответ дан 28 November 2019 в 02:58
поделиться

PHPMailer отлично обрабатывает ошибки, также хороший скрипт для отправки почты через SMTP...

if(!$mail->Send()) {
  echo "Mailer Error: " . $mail->ErrorInfo;
} else {
  echo "Message sent!";
}
6
ответ дан 28 November 2019 в 02:58
поделиться

Вы можете использовать классы и методы PEAR Mail , которые позволяют вам проверять наличие ошибок через:

if (PEAR::isError($mail)) {
    echo("<p>" . $mail->getMessage() . "</p>");
} else {
    echo("<p>Message successfully sent!</p>");
}

Вы можете найти пример здесь .

1
ответ дан 28 November 2019 в 02:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: