Разные SMTP на одном сайте и отправка SMTP через API

Приветствую!

Последнее время начали возникать проблемы с почтой, частенько в спам или вовсе не приходят, начал разбираться и решил, что лучше всего делать через SMTP.

Предполагается, что почта на домене от майл и яндекс настроена верно и все записи(mx,dkim,spf) прописаны.

Вопрос №1. (отправка SMPT через API)
Условно мне нужно в каком то скрипте отправить письмо кому либо. Первое что появляется в голове, понятное дело, это стандартная функция mail(). Но это не наш метод, так сказать. У modx есть modPHPMailer.
$message = $modx->getChunk('myEmailTemplate');

$modx->getService('mail', 'mail.modPHPMailer');
$modx->mail->set(modMail::MAIL_BODY,$message);
$modx->mail->set(modMail::MAIL_FROM,'me@example.org');
$modx->mail->set(modMail::MAIL_FROM_NAME,'Johnny Tester');
$modx->mail->set(modMail::MAIL_SUBJECT,'Check out my new email template!');
$modx->mail->address('to','user@example.com');
$modx->mail->address('reply-to','me@xexample.org');
$modx->mail->setHTML(true);
Как сюда передать параметры SMTP? Или же он автоматически использует SMTP который настраивается в админке?

Вопрос №2. (Разные SMPT на одном сайте)
Есть один сайт, т.е. с одной установкой modx. На него направленные разные домены, условно site.ru,site2.ru,site-site.ru и т.д
Когда человек заходит на сайт site.ru SMTP параметры берутся по умолчанию(что в админке прописары в разделе «Почта»)
Заходим на site2.ru, site-site.ru, если отправлять с теми же SMTP то это уже спам или вовсе не отправка.
Значит надо менять параметры:
SMTP пароль
SMTP пользователь — почтовый ящик, с которого будет происходить отправка.
Следующие параметры, нужно менять, в случае например site-site.ru SMTP от яндекса, а site2.ru использует mail.ru.
SMTP Helo сообщение
SMTP хост

Сам вопрос: На каком событии менять параметры и как, чтобы находясь например на site2.ru вся почта отправлялась например с info@site2.ru, а на site-site.ru с info@site-site.ru и все через SMTP
Константин Ильин
22 февраля 2022, 13:21
modx.pro
164
0

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

Евгений Webinmd
22 февраля 2022, 14:12
+2
1) modPHPMailer использует метод отправки обозначеный в системных настройках
2) системные настройки можно переназначить в настройках контекста, не использовал для smtp но по идее должно сработать
    Дима Сайт
    22 февраля 2022, 20:16
    +1
    Я пробовал, работает. Иными словами, в дереве ресурсов выбираешь нужный конекст, правый клик — редактировать, и там создаешь настройки со значениями, аналогичными системным настройкам:
    emailsender (эта важная, про неё часто забывают), mail_smtp_user, mail_smtp_pass ну и другие mail_smtp_xxx которые отличаются.

    P.S. Пожалуйста, @Константин Ильин опечатку в заголовке вопроса. SMPT не тоже самое Simple Mail Transfer Protocol
Александр Мельник
22 февраля 2022, 21:04
+1
Мне кажется, что у автора нет разных контекстов на сайте, у которых можно было бы переназначить системные настройки. У него просто много доменов направлены на одну директорию в которой лежит сайт.
    Евгений Webinmd
    22 февраля 2022, 21:39
    0
    тогда осталось узнать как сделаны домены
    Константин Ильин
    22 февраля 2022, 23:06
    +1
    Спасибо всем за отзывы и Спасибо за пояснение Евгению! И спасибо за исправления заголовка, чет косячнул.

    Подмечу.
    В комментах верно написали, что домены реализованы без контекстов, поэтому сделал по другому.
    Домены прописаны у ресурсов в отдельном контексте, в доп поле скрин прикладываю.
    prnt.sc/iN53u16cimo8

    Получилось повесить плагин на событие OnMODXInit. Код на коленке, но думаю смысл понятен.
    if ($modx->event->name != "OnMODXInit" || $modx->context->key == 'mgr') {
        return;
    }
    $host = $_SERVER['HTTP_HOST'];
    $SMTParr = [];
    $pos = strripos($host, 'site.ru');
    if ($pos === false) {
       /* тут основной домен или же ничего не делать*/
    } else {
        $SMTParr = [
            'mail_smtp_helo' => 'smtp.mail.ru', //тут меняем на яндекс если надо
            'mail_smtp_hosts' => 'smtp.mail.ru', //тут меняем на яндекс если надо
            'mail_smtp_user' => 'info@site.ru',
            'mail_smtp_pass' => 'парольпароль',
            'mail_smtp_single_to' => 1,
            'mail_smtp_prefix' => 'ssl',
            'mail_smtp_port' => 465,
            'mail_smtp_auth' => 1,
            'mail_use_smtp' => 1,
        ];
    }
    
    if(!empty($SMTParr)){
        foreach ($SMTParr as $k => $v){
            //Тут как раз переназначаем настройки
            $modx->setOption($k, $v);
            $modx->config[$k] = $v;
        }
    }
    Попробовал отправить форму через ajaxForm все прошло ок. Грубо говоря в яндекс почте куда пришло письмо горит зеленый замочек.

    А так резюмируя:
    Смотрим что за домен, из условно базы(оно может быть ресурсами отдельными или в тупую массивами прописано) берем данные для сравнения и данные SMTP, и меняем в цикле данные.
    www.mail-tester.com/ показывает нормально.

    Готов выслушать другие решения.
      Дима Сайт
      23 февраля 2022, 16:46
      +1
      Ну, разве что можно ещё отправлять почту другим способом, через swiftmailer, или чем-то своим (modHelpers тоже вроде умеет, но подозреваю что настройки также глобальные).

      А так годное получилось решение с учетом того, как реализованы домены (раз без контекстов, то тоже плагином), варианты другие в ряд ли и нужны)
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      7