Уведомление об ошибках (спуфинг)
В Core_Log письмо об ошибках отправляется следующей функцией:
Core_Mail::instance()
->to($email)
->from($email)
->subject($subject)
->message($message_mail)
->contentType('text/plain')
->header('X-HostCMS-Reason', 'Alert')
->header('Precedence', 'bulk')
->send();
В значениях ->to и ->from стоит один и тот же email. Из-за чего Gmail такие письма помечает как "Будьте осторожны! Возможно, это спуфинг".
Предлагаю значение ->from брать из настроек SMTP. Например, как-то так:
if (isset($config['smtp'][CURRENT_SITE]['username'])) {
$email_from = $config['smtp'][CURRENT_SITE]['username'];
} elseif (isset($config['smtp']['username'])) {
$email_from = $config['smtp']['username'];
} else {
$email_from = $email_to;
}
Комментарии
-
> Из-за чего Gmail такие письма помечает как "Будьте осторожны! Возможно, это спуфинг".
Вообще Gmail должен помечать так письма, которые отправлены от имени вашего ящика, но отправлены не через SMTP Gmail. Упоминание такого сообщения в сети более не нашлось, только на этой странице.> "Внимание. Возможно, это письмо отправлено не тем пользователем, который был указан в качестве отправителя. Будьте осторожны при использовании ссылок в этом письме и предоставлении личной информации отправителю"
Что соответствует правде. Ведь отправляется с ящика указанного в конфиге SMTP, а подписывается ящиком получается.Так если вы настраиваете отправку через внешний сервис для домена, то адрес для сайта и в константе нужно указывать от этого домена, а не на gmail.
Задача отправлять с одного ящика, а получать на другие (для каждого сайта свой). Почему отправитель и получатель должны совпадать?
Логи отправляются на адрес, указанный для сайта, если он в этот момент еще не определен, то на адрес, содержащийся в константе SUPERUSER_EMAIL. Отправителем указывается тот же адрес, ибо иного адреса не имеется.
Для каждого сайта вы имеете возможность указать свои SMTP-настройки.
В случае использования Gmail вышеприведенное сообщение вполне обоснованно, т.к. отправлены данные не через сервера Gmail, а через указанный вами сторонний SMTP.
В системе логов добавлять вышеприведенную проверку не планируем, отправитель никак не должен зависеть от настроек какого-то драйвера.
-
Пропустил получение конфига:
$config = Core::$config->get('core_mail');
-
Нужно правильно настроить почтовый сервер на сервере сайта
В данном случае идет речь про отправку не через сервер сайта, а через внешний почтовый сервер (SMTP) – например, Яндекс Почта для Домена. Причем, когда почта отправки отличается от почты получения. Например, отправка от noreply@site.ru, а получение на private@gmail.com. Приведенный код решает такой случай, оставляя и прежний вариант.