Ловля ошибок при отправке почты с сайта
Добрый день, сообщество!
Как многим известно, у объекта 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
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Можно передавать subject, from, fromName, sender и html (флаг, указывающий, отправлять ли письма текстом или в виде html).
Я обычно передаю туда только
Остальное подтягивается из системных настроек.
Подробнее можно глянуть тут:
https://github.com/modxcms/revolution/blob/develop/core/model/modx/moduser.class.php#L796
Если изучать исходники, массу интересного можно найти!