Ловля ошибок при отправке почты с сайта
        Добрый день, сообщество!
Как многим известно, у объекта 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
                Благодарю. Теперь можно облегчить код, т.к. много где информирую пользователей по почте)            
                    
                Рад, что помог:))
Если изучать исходники, массу интересного можно найти!
                    Если изучать исходники, массу интересного можно найти!
                Хах, вот только делать это некогда, начальству нужно решение задач здесь и сейчас)            
                    
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.