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

Postfix - Как обрабатывать входящие письма?

Я создаю веб-приложение, в котором пользователи добавляют новый контент, отправляя электронные письма в приложение. Адрес электронной почты, используемый для каждого пользователя, является индивидуальным (например, 123456@myservice.com) и динамически создается как виртуальный почтовый ящик Postfix.

Пользователь должен иметь возможность отправлять электронную почту на свой собственный адрес почтового ящика (as12145ed@myservice.com), и я хочу обрабатывать каждое входящее письмо, анализировать его содержимое и заполнять мою базу данных данными из электронной почты.

Я пробовал использовать Postfix After Queue фильтр но что я действительно хочу, так это обрабатывать электронные письма после того, как они будут сохранены в папке виртуального почтового ящика пользователя.

Я бы применил к этому другой подход.

Вместо того, чтобы создавать отдельные почтовые ящики, я бы создал один общий адрес, а затем через / etc / aliases отправил его в сценарий, в котором я выполнял бы весь свой синтаксический анализ и архивирование. Нет смысла использовать почтовые ящики, если вы не собираетесь хранить в них электронную почту, это огромные накладные расходы.

В / etc / aliases вы можете сделать эту запись

usermail: "|/path/to/myscript.pl" 

а затем вся электронная почта будет отправлена ​​прямо на myscript.pl, и вы сможете обработать ее там.

Есть программа под названием procmail (LDA), который сделает почти то, что вы ищете.

Я могу придумать два возможных решения этого:

Первая возможность: Вы можете установить собственный mailbox_command в Postfix. Для каждого письма, полученного Postfix, он будет вызывать mailbox_command определено в файле конфигурации, и предоставить электронное письмо в виде простого текста на stdin. Таким образом, вы можете решить, как вы хотите обрабатывать каждое электронное письмо. Однако вам нужно будет самостоятельно проанализировать заголовки электронного письма. Вы можете взглянуть на Документация Postfix для получения дополнительной информации о том, как это сделать. Дополнительные приложения, такие как procmail может также действовать как mailbox_command и помочь вам с обработкой входящих писем.

Вторая возможность: Используйте Dovecot для хранения электронной почты. Вам не нужно включать модули POP / IMAP Dovecot. Однако Dovecot предлагает фантастические doveadm утилита, позволяющая запрашивать почтовые ящики и читать из них. С участием doveadm, вы можете автоматически выбирать новые электронные письма, письма за прошлую неделю, читать все письмо целиком, только его часть, удалять старые сообщения и т. д. Это мощная утилита, я использую ее в различных скриптах для очистки старых писем или предоставления learn-as-spam папки для пользователей. Взгляни на документация в вики.

(Примечание: я также разместил это в Stackoverflow, где плакат задавал тот же вопрос)

Я бы опрашивал почтовые ящики, используя POP3 / IMAP, загружал сообщения и обрабатывал их (вместо того, чтобы пытаться интегрировать что-то в стек Postfix). Это также даст вам уровень отказоустойчивости, если ваша система синтаксического анализа сломается или ее нужно отключить на некоторое время.