Хочу поделиться азами настройки почтового сервера postfix, идущего в комплекте с MAC OS X для целей локальной разработки интернет-магазинов на Drupal и Ubercart.
Дано:
1. Ноутбук с mac os x
2. Стек Acquia Drupal (просто удобный, мне нравится)
3. Интернет-магазин с Ubercart
Нужно:
Научить интернет-магазин слать заказы через встроенный в Mac OS X почтовик Postfix с использованием внешнего SMTP-сервера.
Допустим у нас есть доступ к внешнему SMTP, требующему авторизацию и корректного адреса в поле FROM для отправляемых писем.
Допустим адрес нашего почтовика smtp.vneshnij.ru, логин и пароль для которого testlogin и testpasswd, а адрес address@test.ru.
Начнем настраивать postfix.
Для начала научим его отправлять почту по требованию программ
% sudo launchctl unload /System/Library/LaunchDaemons/org.postfix.master.plist
выгрузили почтового демона
% sudo defaults write /System/Library/LaunchDaemons/org.postfix.master OnDemand -bool true
записали в системные настройки запуск постфикса по требованию
% sudo launchctl load /System/Library/LaunchDaemons/org.postfix.master.plist
загрузили демона
Шаги не обязательные в общем-то, ну а чего почтовик будет постоянно в памяти болтаться.
Дальше настраиваем отправку писем через внешний smtp
% sudo postconf -e relayhost=smtp.vneshnij.ru
Учим постфикса подключаться с использованием авторизации
% sudo touch /etc/postfix/sasl_passwd
создаем файл для хранения логинов-паролей
% sudo echo smtp.vneshnij.ru testlogin:testpasswd >> /etc/postfix/sasl_passwd
записываем туда нужные
% sudo postconf -e smtp_sasl_auth_enable=yes
включаем в конфиге постфикса авторизацию при отправке сообщений
% sudo postconf -e smtp_sasl_password_maps=hash:/etc/postfix/sasl_passwd
указываем откуда брать логины-пароли
%sudo postmap /etc/postfix/sasl_passwd
обрабатываем наш файлик командой postmap, дабы postfix его правильно подцепил
Перегружаем постфикс.
Кажется все, но давайте попробуем сделать заказ в нашем магазине на Ubercart.
И посмотреть что будет в логах почтовика.
Заказываем товар, а сами смотрим, что происходит в логах
%tail -f /var/log/mail.log
Видим, что постфикс подключается к нашему smtp-шнику, но получает отлуп, т.к. письма имеют в поле FROM странную конструкцию вида ad_apache@compvasi.pupkin
Друпал криво вызывает почтовую функцию php, поэтому поле from идет не заполненным, даже когда вы указали адрес магазина в настройках Ubercart.
Но это не беда, на помощь придет все тот же постфикс.
По методе, указанной выше пишем в конфиг /etc/postfix/main.cf:
строку smtp_generic_maps=hash:/etc/postfix/generic
В файлике /etc/postfix/generic пишем алиас для ad_apache@compvasi.pupkin
Примерно так:
ad_apache@compvasi.pupkin address@test.ru
Говорим
%sudo postmap /etc/postfix/generic
Затем перегружаем почтовик и видим чудную картину — все письма, отправленные через тестовый друпал, который крутится на нашем ноутбуке, отправляются через внешний smtp-сервер на любые внешние адреса.
Можно продолжать разработку!
За помощь в забарывании постфикса огромное спасибо камраду Boatsman-у