Intereting Posts
Проверьте, есть ли временная метка x часов? Потоковое видео с php-сервера на Android Что означает предупреждение XDEBUG NOT LOADED AS ZEND EXTENSION? Путь к исполняемому файлу драйвера должен быть установлен с помощью системного свойства webdriver.chrome.driver (php) Получить контрольные значения из флажков Имена переменных PHP / function / class с использованием специальных символов Parse js / css как файл PHP с использованием htaccess Laravel / Eloquent – Яркие загруженные скрытые / видимые свойства PHP – преобразование XML в массив в PHP – синтаксический анализ мыла xml в php и сохранение его в базе данных Сортировка заголовков и отображение в алфавитном порядке, с буквой алфавита, предшествующей записи Разделить массив на N массивов – PHP Динамические галереи Colorbox с использованием Ajax Перенос PHP-рендеринга Handlebarsjs PHP Неустранимая ошибка: вызов функции-члена функции find () для не-объекта, однако моя функция работает EasyPHP Devserver 16.1 Curl Win 10

Улавливание ошибок PHP mail () и отображение разумного сообщения об ошибке пользователя

Я пишу довольно простой скрипт регистрации php, который использует встроенную функцию mail() PHP, чтобы отправить пользователю ссылку активации.

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

Например, на данный момент я получаю следующее:

Предупреждение: mail () [function.mail]: ответ SMTP-сервера: 554: адрес получателя отклонен: доступ к ретрансляции запрещен ** в строке 70

Любые идеи, что я могу сделать с ошибками? Я знаю использование символа @ для подавления ошибки, но я вроде бы хочу сделать больше, чем это, и справиться с этой проблемой.

Используйте boolean result для обнаружения ошибки:

 $success = @mail(...); 

Затем вы хотите узнать, какая внутренняя ошибка вызвала проблему, поэтому используйте:

 $error = error_get_last(); preg_match("/\d+/", $error["message"], $error); switch ($error[0]) { case 554: ... default: ... 

Обратите внимание, что это работает только с php 5.2.

Невозможно проверить доставку или просмотреть сообщения об ошибках при отправке с помощью PHP. Для этого вам понадобится обработчик опроса pop3.

Тривиальная ошибка, от которой я страдала, была просто отсутствием «sendmail» в моей системе. В конце концов, я установил exim4 и настроил его, а затем почта php (…) работала нормально.

Смотрите также:

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

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

Установите почтовый заголовок с адреса в место, где вы можете проверить наличие неудачных поставок:

 $headers = 'From: webmaster@example.com' . "\r\n"; 

Вы также можете проверить, что почта выполнена так, как ожидалось:

 if(mail($to,$subject,$message)) 

И последнее, вы, вероятно, не хотите отображать предупреждения в живой среде, вы можете отключить их либо через ini-файл, либо с помощью ini_set .

Лучше всего было бы использовать библиотеку, например Swift Mailer, которая генерирует исключения, которые можно легко обрабатывать.