Назад | Перейти на главную страницу

Как направить электронную почту в скрипт

Я бы хотел создать адрес, например something@myhost.com, который будет принимать все полученные сообщения электронной почты и запускать полное сообщение как STDIN в сценарии оболочки. Хотя я не могу заставить это работать. Пробовал пару решений, в том числе это:

Как я могу перенаправить некоторые электронные письма на скрипт в Postfix?

Но моя установка немного другая. У меня есть установка Postfix / Dovecot / MySQL, поэтому вся электронная почта обрабатывается Dovecot, а Postfix читает свои карты из MySQL. Все, что я добавляю в master.cf, похоже, не работает. У SpamAssassin есть строка, и она работает нормально. Я застрял!

РЕДАКТИРОВАТЬ: Я действительно хочу, чтобы люди внимательно прочитали, прежде чем голосовать против моего вопроса. Я использую MySQL для своих карт псевдонимов, поэтому / etc / aliases не работает, я, конечно, уже пробовал это.

Очевидно, сработает ответ Дугласа Лэнда с небольшим дополнением.
Предположим, у вас есть только localhost.localdomain в $ mydestination в main.cf.
Затем добавьте виртуальный псевдоним:

something@myhost.com -> somelocaluser@localhost.localdomain

В main.cf вам понадобятся:

alias_maps=hash:/etc/aliases

Затем добавьте в / etc / aliases:

somelocaluser: "|/your/script/here"

newaliases + postfix reload, и все готово.

Я бы пошел с Procmail. Мы используем это, чтобы анализировать всевозможные письма, отправляемые рабочим скриптам и IRC-ботам для получения уведомлений.

Вот пример о том, как обращаться с электронной почтой. http://linuxgazette.net/issue14/procmail.html

Соответствующий короткий пример, сделанный здесь для простоты:

  1. Создайте локального пользователя с именем handler, например.

  2. Перейти к handlerдомашний каталог и создайте файл с именем .procmailrc содержащий:

:0
| $HOME/bin/my.script

Это передаст скрипту всю входящую почту. $HOME/bin/my.script через STDIN.

Также здесь мне помогли Procmail, когда я впервые пытался передать электронную почту скрипту: Как использовать procmail для передачи сообщения в переменную

Вы можете передать запись в скрипт через /etc/aliases, RE:

foo: "|/your/script/here"

модифицировать /etc/aliases затем беги newaliases и перезагрузите постфиксный процесс.

Я бы проверил, поддерживает ли sieve конвейер для сценария. Dovecot поддерживает скрипты сита.

В качестве альтернативы вы можете использовать "procmail" в качестве MDA между postfix и dovecot. Procmail может подключаться к сценарию.

(при этом мне интересно, почему ответ Дугласа Лэнда не работает, mysql как бэкэнд не должен делать другого ?!) "

Что не было упомянуто, так это то, что вы можете использовать более одной таблицы поиска (через запятую или пробел):

virtual_alias_maps = mysql:/etc/postfix/mysql-virtual.cf
alias_maps = mysql:/etc/postfix/mysql-aliases.cf hash:/etc/aliases

Первый (virtual_alias_maps) будет искать электронную почту и возвращать имя пользователя (например: info@example.com -> info1234).

Затем второй (alias_maps) будет искать имя пользователя в вашей базе данных, если он не найден, будет искать его в / etc / aliases. Таким образом, вы по-прежнему можете управлять своими псевдонимами в MySQL и устанавливать свои сценарии в / etc / aliases, и вам не нужно добавлять «@ localhost.localdomain» к локальным пользователям.

Чтобы проверить правильность вашей настройки, используйте:

postmap -q info@example.com mysql:/etc/postfix/mysql-virtual.cf
postmap -q info1234 mysql:/etc/postfix/mysql-aliases.cf hash:/etc/aliases

Использование локальных учетных записей с псевдонимами в MySQL:

В одной из моих пользовательских настроек я использую локальные учетные записи для пользователей и MySQL только для псевдонимов. Вот как я это установил:

virtual_alias_maps = hash:/etc/postfix/vusers
smtpd_sender_login_maps = hash:/etc/postfix/vusers
virtual_alias_domains = /etc/postfix/vhosts
alias_maps = mysql:/etc/postfix/mysql-aliases.cf hash:/etc/aliases

Как видите, не стесняйтесь смешивать их как хотите.