Прерывания Swiftmailer

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Аватара пользователя
Diplodok
Сообщения: 76
Зарегистрирован: 2012.07.09, 15:55
Контактная информация:

Прерывания Swiftmailer

Сообщение Diplodok »

Помогите обойти прерывания при ошибках отправки почты. проблема в том, что почтовый сервер иногда выдаёт ошибки и выскакивает прерывание:
exception 'Swift_TransportException' with message 'Connection to tcp://smtp.office365.com:587 Timed Out' in /home/store/web-service/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php:404
или такое
exception 'Swift_TransportException' with message 'Expected response code 250 but got code "235", with message "235 2.7.0 Authentication successful target host HE1P18901MB0185.EURP189.PROD.OUTLOOK.COM
или по лимиту отсылаемых писем.
Во всех случаях у пользователей происходит неприятный облом с дальнейшей работой.

Реализовал сохранение не отправленных сообщений в базу для последующих попыток отправить повторно, но вот беда, прерывания не могу перехватить. Мозгов хватило только на это:

Код: Выделить всё

set_error_handler('self::MyErrorHandler');
$result = $mail->send();
restore_error_handler();
Но и это не срабатывает.
someweb
Сообщения: 552
Зарегистрирован: 2017.03.09, 10:12

Re: Прерывания Swiftmailer

Сообщение someweb »

Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа. Роберт Шекли.
Аватара пользователя
Diplodok
Сообщения: 76
Зарегистрирован: 2012.07.09, 15:55
Контактная информация:

Re: Прерывания Swiftmailer

Сообщение Diplodok »

Спасибо. Разобрался как сделать, но не до конца понял как это работает.

Код: Выделить всё

                try {
                    $result = $mail->send();
                } catch (\Swift_TransportException $exc) {
                    // отправка письма не удалась, сохранение в бд
                    $mdlMailStorage = new app\models\MailStorage();
                    $mdlMailStorage->addObjMail($mail, 5);
                }

Теперь работает как мне надо.
Ответить