Материал просмотрен 417 раз(а)

Ранее я уже писал статью о том, как отправлять почту с сайта не поднимая полноценный почтовый сервер, пользуясь релеем от yandex. Там мы использовали “заглушку” ssmtp, весьма заброшенную, но справляющуюся со своими функциями.

mail

Теперь вот возник вопрос – а как теперь организовать отправку писем, если у нас есть несколько доменов (сайтов)?

Для одного домена проблем нет – просто указываем в конфиге аутентификационные данные для релея. Но если доменов несколько – то второй раз эти данные указать не получится, поддерживается только однократное упоминание управляющих инструкций.

А отправлять почту с другого домена не получится, потому что публичные релеи не принимают почту с другим “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.

Задача решена!