Некоторое время назад я размещал материал, посвященный Ошибке, связанной с добавлением новых сообщений в гостевую книгу Phoca GuestBook для Joomla. В тот раз проблема была связана с использованием почтового сервиса Яндекс.Почта для домена, который в целях безопасности не позволяет отправлять письма с адресом отправителя, отличным от адреса, под которым осуществляется соединение (отправка ведется по протоколу SMTP).
В этот раз я столкнулся с аналогичной проблемой, но уже при отправке автоматических личных сообщений с сайта Joomla (в частности при создании уведомления о добавлении новой статьи (материала) в Joomla.
Итак, на одном из моих сайтов существует возможность добавления и публикации материалов другими авторами. И какое-то время назад я обратил внимание на странную особенность: раньше я получал по электронной почте сообщения-уведомления о новых материалах (статьях) на сайте. А сейчас эти уведомления перестали приходить.
Разобраться в проблеме все никак не хватало времени, да и проблема была неочевидной до тех пор, пока я не столкнулся сам с ошибкой при попытке добавить новый материал не от имени администратора а другого пользователя (который был создан для тестирования возможностей автора в системе Joomla). Итак, я заполнил все поля, добавил материал и нажал на кнопку Сохранить материал... и вот тут вылезла ошибка:
Ошибка в перечисленных адресах отправителей: Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.
Ошибка SMTP: 5.7.1 Sender address rejected: not owned by auth user.
И тут я вспомнил о проблеме с Phoca Guestbook, о которой писал ранее и до меня вдруг дошло, почему перестали приходить уведомления о новых авторских статьях.
Точно! Яндекс.Почта для домена, видя попытку отправить мне сообщение о новом материале, сравнивает адрес отправителя (а подставляется реальный e-mail автора) с адресом под которым происходит аутентификация по протоколу SMTP (это адрес ящика для моего сайта на сервисе Почта для домена) и, понимая что адреса различны, прерывает процесс отправки письма с целью предотвращения возможного мошенничества (ну он так думает).
И всё. Я получаю ошибку:
Ошибка SMTP: 5.7.1 Sender address rejected: not owned by auth user
Примерно час ушел на поиски решения. Поначалу я пытался найти код отправки сообщения непосредственно в компоненте com_content, но в конце концов оказалось, что копать нужно непосредственно в компоненте сообщений com_messages. Итак открываем файл administrator/components/com_messages/models/message.php и меняем строку:
JFactory::getMailer()->sendMail($fromUser->email, $fromUser->name, $toUser->email, $subject, $msg);
на
$app = JFactory::getApplication();
JFactory::getMailer()->sendMail($app->getCfg('mailfrom'), $fromUser->name, $toUser->email, $subject, $msg);
Где $app->getCfg('mailfrom') - это обратный почтовый адрес, который Вы используете в настройках Вашей Joomla!, для подключения к серверу smtp.yandex.ru на сервисе Яндекс. Почта для домена.
Всё. Письма стали приходить.
Comments
Яндекс рекомендует еще настроить SPF-записи - http://help.yandex.ru/pdd/records.xml#spf
Сейчас изменения в DNS пропишутся, посмотрим что изменится.
RSS feed for comments to this post