Ловля ошибок при отправке почты с сайта

Добрый день, сообщество!

Как многим известно, у объекта 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. Не претендую на «великое открытие», очевидно, многие знали об этом способе и без меня. Но возможно кому-то эта заметка поможет сэкономить несколько минут:))
Антон Фомичёв
18 июля 2014, 07:57
modx.pro
13
3 460
+10

Комментарии: 7

Илья Уткин
18 июля 2014, 13:35
+1
Я, кстати, не знал даже о существовании метода modUser::sendEmail, так что пост однозначно полезный.
    Антон Фомичёв
    18 июля 2014, 15:55
    0
    Хехе:)) Приятно слышать это от того, с чьих статей я начинал изучать MODX и кто подкинул замечательную идею управления контентом из фронтенда.
    Пётр Молчанов
    18 июля 2014, 15:08
    0
    Кстати, да. тоже не знал об этом методе. Подскажи, что можно складывать в $options?
      Антон Фомичёв
      18 июля 2014, 15:27
      0
      $options — массив значений.
      Можно передавать subject, from, fromName, sender и html (флаг, указывающий, отправлять ли письма текстом или в виде html).
      Я обычно передаю туда только
      array('subject' => 'Тема письма')
      Остальное подтягивается из системных настроек.
      Подробнее можно глянуть тут:
      https://github.com/modxcms/revolution/blob/develop/core/model/modx/moduser.class.php#L796
        Пётр Молчанов
        18 июля 2014, 15:44
        0
        Благодарю. Теперь можно облегчить код, т.к. много где информирую пользователей по почте)
          Антон Фомичёв
          18 июля 2014, 15:53
          0
          Рад, что помог:))
          Если изучать исходники, массу интересного можно найти!
            Пётр Молчанов
            18 июля 2014, 16:05
            0
            Хах, вот только делать это некогда, начальству нужно решение задач здесь и сейчас)
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      7