Ловля ошибок при отправке почты с сайта
Добрый день, сообщество!
Как многим известно, у объекта modUser есть замечательный метод modUser::sendEmail, который позволяет отправлять пользователю письмо буквально в одну строчку. Не надо вручную инициировать службу modPHPMailer, выяснять email пользователя — всё это уже сделали за Вас разработчики MODX в этом методе.
Но есть один недостаток — метод возвращает только булево значение. Отправилось успешно — true, не отправилось — false. Причин, по которым письмо не отправилось, метод не даёт. Столкнулся с проблемой, что письма перестали уходить. Причины неясны, в логи их никто не пишет — ни метод sendEmail, ни класс modPHPMailer.
Покопавшись в исходниках, нашел решение. Возможно, оно будет кому-то полезным:
P.S. Не претендую на «великое открытие», очевидно, многие знали об этом способе и без меня. Но возможно кому-то эта заметка поможет сэкономить несколько минут:))
Как многим известно, у объекта modUser есть замечательный метод modUser::sendEmail, который позволяет отправлять пользователю письмо буквально в одну строчку. Не надо вручную инициировать службу modPHPMailer, выяснять email пользователя — всё это уже сделали за Вас разработчики MODX в этом методе.
Но есть один недостаток — метод возвращает только булево значение. Отправилось успешно — true, не отправилось — false. Причин, по которым письмо не отправилось, метод не даёт. Столкнулся с проблемой, что письма перестали уходить. Причины неясны, в логи их никто не пишет — ни метод sendEmail, ни класс modPHPMailer.
Покопавшись в исходниках, нашел решение. Возможно, оно будет кому-то полезным:
if(!$user->sendEmail($message, $options)){
$modx->log(modX::LOG_LEVEL_ERROR, 'Не удалось отправить сообщение пользователю '.$user->get('username').'. Причина: '.$user->xpdo->mail->mailer->ErrorInfo);
}
В логах у вас появится подробное описание ошибки, вплоть до ответа SMTP-сервера.P.S. Не претендую на «великое открытие», очевидно, многие знали об этом способе и без меня. Но возможно кому-то эта заметка поможет сэкономить несколько минут:))
Комментарии: 7
Я, кстати, не знал даже о существовании метода modUser::sendEmail, так что пост однозначно полезный.
Хехе:)) Приятно слышать это от того, с чьих статей я начинал изучать MODX и кто подкинул замечательную идею управления контентом из фронтенда.
Кстати, да. тоже не знал об этом методе. Подскажи, что можно складывать в $options?
$options — массив значений.
Можно передавать subject, from, fromName, sender и html (флаг, указывающий, отправлять ли письма текстом или в виде html).
Я обычно передаю туда только
Подробнее можно глянуть тут:
https://github.com/modxcms/revolution/blob/develop/core/model/modx/moduser.class.php#L796
Можно передавать subject, from, fromName, sender и html (флаг, указывающий, отправлять ли письма текстом или в виде html).
Я обычно передаю туда только
array('subject' => 'Тема письма')
Остальное подтягивается из системных настроек.Подробнее можно глянуть тут:
https://github.com/modxcms/revolution/blob/develop/core/model/modx/moduser.class.php#L796
Благодарю. Теперь можно облегчить код, т.к. много где информирую пользователей по почте)
Рад, что помог:))
Если изучать исходники, массу интересного можно найти!
Если изучать исходники, массу интересного можно найти!
Хах, вот только делать это некогда, начальству нужно решение задач здесь и сейчас)
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.