Ранее я уже писал статью о том, как отправлять почту с сайта не поднимая полноценный почтовый сервер, пользуясь релеем от yandex. Там мы использовали “заглушку” ssmtp, весьма заброшенную, но справляющуюся со своими функциями.
Теперь вот возник вопрос – а как теперь организовать отправку писем, если у нас есть несколько доменов (сайтов)?
Для одного домена проблем нет – просто указываем в конфиге аутентификационные данные для релея. Но если доменов несколько – то второй раз эти данные указать не получится, поддерживается только однократное упоминание управляющих инструкций.
А отправлять почту с другого домена не получится, потому что публичные релеи не принимают почту с другим “From” (отличным от аутентифицировавшегося юзера).
Выход есть.
Создаём различные конфигурационные файлы для каждого домена:
# cp /etc/ssmtp/ssmtp.conf /etc/ssmtp/ssmtp-domain1.conf
# cp /etc/ssmtp/ssmtp.conf /etc/ssmtp/ssmtp-domain2.conf
В каждом конфиге указываем свои аутентификационные данные.
В файле /etc/ssmtp/revaliases укажем оба домена:
root:webmaster@domain1.ru:smtp.yandex.ru:465
root:webmaster@domain2.ru:smtp.mail.ru:465
Таким образом почта с From:webmaster@domain1.ru пойдёт на smtp.yandex.ru, а с webmaster@domain2.ru на smtp.mail.ru. Разумеется, с учётом того, что будут использоваться разный конфиг ssmtp для своего домена.
Теперь задача. Как нам указать произвольный конфиг для ssmtp?
Нужно открыть файл php.ini и найти параметр sendmail_path= , который нужно раскомментировать и указать следующее:
/usr/sbin/ssmtp -t -C<config>
Собственные настройки PHP в зависимости от виртуального хоста
Теперь надо заставить nginx (у меня nginx, поэтому привожу для него) менять этот параметр в зависимости от домена.
Открываем конфигурационные файлы nginx (где описание виртуальных хостов) и добавляем для каждого домена соответствующую строку:
fastcgi_param PHP_VALUE "sendmail_path=/usr/sbin/ssmtp -t -C/etc/ssmtp/ssmtp-domain1.conf";
У другого домена:
fastcgi_param PHP_VALUE "sendmail_path=/usr/sbin/ssmtp -t -C/etc/ssmtp/ssmtp-domain2.conf";
и так далее.
Теперь для каждого домена применяется собственный путь к sendmail (а значит и параметры аутентификации).
Для проверки кидаем в document_root каталоги каждого домена файлы mail.php следующего содержания:
<?php
mail('наш_адрес@домен.ru','тема','сообщение',"From: webmaster@domain1.ru \r\n"."X-Mailer: PHP/" . phpversion());
?>
в первый каталог и соответственно во второй:
<?php
mail('наш_адрес@домен.ru','тема','сообщение',"From: webmaster@domain2.ru \r\n"."X-Mailer: PHP/" . phpversion());
?>
Открываем в браузере оба файла: http://domain1.ru/mail.php и http://domain2.ru/mail.php
Нам на почту “наш_адрес@домен.ru” падает два письма. Одно соответственно с webmaster@domain1.ru, второе с webmaster@domain2.ru.
Задача решена!
Comments: