Я запускаю одноразовую службу электронной почты, которая принимает всю входящую почту и перенаправляет ее в сценарий PHP, который хранит ее в базе данных для просмотра людьми. До сих пор я был на виртуальном хостинге с cPanel, который упрощает перенаправление электронной почты в сценарий. Однако теперь у меня есть собственный VPS, и на нем нет cPanel. Как направить электронные письма в сценарий? Кроме того, как направить электронные письма любой обращаться на неких указанных доменах к моему скрипту? Видите ли, помимо основного домена, есть несколько альтернативных доменов, которые люди могут использовать, если основной домен заблокирован, и я хочу, чтобы в каждом домене можно было использовать любой адрес (xyz @ domain1, abc @ domain2, somethingelse @ domain3).
На VPS установлена Ubuntu 9.04, и я экспериментировал с Postfix, хотя могу переключиться на Exim или Sendmail, если это проще.
Наконец-то разобрался. В конце концов, я использовал Sendmail. Я включил функцию virtusertable в sendmail.mc (см. Информацию на Веб-сайт Sendmail), затем поместите в / etc / mail / virtusertable следующую строку:
@disposaldomain.net parser@localhost
Которая направляет всю почту в этот домен пользователю «синтаксический анализатор». Затем я вставляю в конец / etc / mail / aliases эту строку:
parser: "|/path/to/script/parser.php"
После этого мне пришлось запустить эти команды (из / etc / mail):
makemap hash virtusertable.db < virtusertable
newaliases
/etc/init.d/sendmail reload
/etc/init.d/sendmail restart
Вот и все!
В Exim'е это будет обрабатываться псевдонимом с подстановочными знаками и транспортом канала. Ищите аналог для Postfix. Псевдонимы могут быть настроены для указания команды для обработки сообщения.
Если у вас есть другие домены, которые вы хотите обрабатывать по-другому, настройте псевдонимы виртуального домена и поместите подстановочный знак в файл псевдонимов для домена.
Похоже, в Postfix есть демон конвейера для обработки доставки команде.
РЕДАКТИРОВАТЬ: решение Exim с использованием раздельной конфигурации. Это требует установки exim4-daemon-light
пакет. Я бы посоветовал вам также установить exim4-doc-html
пакет для предоставления документации по адресу http://localhost/doc/exim4-doc-html/html/spec_html/
.
Добавить файл в /etc/exim4/conf.d/router
названный 380_local-config_program_router
. Проверьте параметры универсальных маршрутизаторов i (главы 15 и 16 в спецификации). При необходимости измените имя сценария и домен.
# This router runs /usr/bin/your-script for all users in your.domain. program_router: driver = accept require_files = /usr/bin/your-script transport = program_transport domains = your.domain
Добавить файл в /etc/exim4/conf.d/transport
названный 380_local-config_program_transport
. Проверьте варианты транспортировки труб (главы 24 и 29 в спецификации). Вам нужно будет установить параметры, для которых не указано значение. Также установите правильную команду, которая при необходимости может иметь параметры.
program_transport: driver = pipe command = /usr/bin/your-script current_directory = home_directory = user = group =
Я изменил конфигурацию из эта почта.
Edit2: Похоже, вы тоже можете сделать это с Postfix. Решение, использующее групповой адрес для виртуальный домен и непрямая доставка типа maildrop должен это сделать.
Большинство MTA позволяют вам настроить, какой агент доставки использовать (MDA), и я настоятельно рекомендую procmail - он предоставляет огромный набор функций, например его довольно просто настроить для фильтрации входящей почты с помощью spamassassin, пересылки писем на ваш PHP-скрипт, отправки автоматического ответа, пересылки копии самому себе и записи копии в почтовый ящик.
Действительно, у procmail фактически есть свой собственный язык программирования - страницы руководства не отражают его должным образом. Есть некоторые книги доступны. Или попробуйте поискать статьи в Google.
Большинство дистрибутивов используют procmail в качестве MDA с некоторыми MTA (особенно sendmail). Я бы с осторожностью использовал Exim (см. Сообщения в другом месте). Часто, поскольку postfix предоставляет собственный MDA, procmail не настраивается, но его можно легко добавляется.
Обратите внимание, что MDA работает с сообщениями после того, как MTA решил, куда их доставить. Если вы хотите фильтровать сообщения перед доставкой (например, которые ретранслируются вашим MTA), вам, вероятно, следует обратить внимание на milter.