Разные SMTP на одном сайте и отправка SMTP через API
Приветствую!
Последнее время начали возникать проблемы с почтой, частенько в спам или вовсе не приходят, начал разбираться и решил, что лучше всего делать через SMTP.
Предполагается, что почта на домене от майл и яндекс настроена верно и все записи(mx,dkim,spf) прописаны.
Вопрос №1. (отправка SMPT через API)
Условно мне нужно в каком то скрипте отправить письмо кому либо. Первое что появляется в голове, понятное дело, это стандартная функция mail(). Но это не наш метод, так сказать. У modx есть modPHPMailer.
Вопрос №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
Последнее время начали возникать проблемы с почтой, частенько в спам или вовсе не приходят, начал разбираться и решил, что лучше всего делать через 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
Комментарии: 7
1) modPHPMailer использует метод отправки обозначеный в системных настройках
2) системные настройки можно переназначить в настройках контекста, не использовал для smtp но по идее должно сработать
2) системные настройки можно переназначить в настройках контекста, не использовал для smtp но по идее должно сработать
Я пробовал, работает. Иными словами, в дереве ресурсов выбираешь нужный конекст, правый клик — редактировать, и там создаешь настройки со значениями, аналогичными системным настройкам:
emailsender (эта важная, про неё часто забывают), mail_smtp_user, mail_smtp_pass ну и другие mail_smtp_xxx которые отличаются.
P.S. Пожалуйста, @Константин Ильин опечатку в заголовке вопроса. SMPT не тоже самое Simple Mail Transfer Protocol
emailsender (эта важная, про неё часто забывают), mail_smtp_user, mail_smtp_pass ну и другие mail_smtp_xxx которые отличаются.
P.S. Пожалуйста, @Константин Ильин опечатку в заголовке вопроса. SMPT не тоже самое Simple Mail Transfer Protocol
Поправил заголовок
Мне кажется, что у автора нет разных контекстов на сайте, у которых можно было бы переназначить системные настройки. У него просто много доменов направлены на одну директорию в которой лежит сайт.
тогда осталось узнать как сделаны домены
Спасибо всем за отзывы и Спасибо за пояснение Евгению! И спасибо за исправления заголовка, чет косячнул.
Подмечу.
В комментах верно написали, что домены реализованы без контекстов, поэтому сделал по другому.
Домены прописаны у ресурсов в отдельном контексте, в доп поле скрин прикладываю.
prnt.sc/iN53u16cimo8
Получилось повесить плагин на событие OnMODXInit. Код на коленке, но думаю смысл понятен.
А так резюмируя:
Смотрим что за домен, из условно базы(оно может быть ресурсами отдельными или в тупую массивами прописано) берем данные для сравнения и данные SMTP, и меняем в цикле данные.
www.mail-tester.com/ показывает нормально.
Готов выслушать другие решения.
Подмечу.
В комментах верно написали, что домены реализованы без контекстов, поэтому сделал по другому.
Домены прописаны у ресурсов в отдельном контексте, в доп поле скрин прикладываю.
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/ показывает нормально.
Готов выслушать другие решения.
Ну, разве что можно ещё отправлять почту другим способом, через swiftmailer, или чем-то своим (modHelpers тоже вроде умеет, но подозреваю что настройки также глобальные).
А так годное получилось решение с учетом того, как реализованы домены (раз без контекстов, то тоже плагином), варианты другие в ряд ли и нужны)
А так годное получилось решение с учетом того, как реализованы домены (раз без контекстов, то тоже плагином), варианты другие в ряд ли и нужны)
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.