Крюки для полученных электронных писем

Вопрос или проблема

Основная цель: Я хотел бы, чтобы мой PHP-скрипт парсил и выполнял действия с входящими письмами, которые попадают в определенные папки

  • Я использую почтовый клиент, который позволяет мне редактировать фильтр sieve, который перемещает электронные письма в разные папки

  • Насколько я понимаю, sieve работает независимо от почтового клиента

  • Для некоторых входящих писем я хотел бы парсить их для получения определенной информации и далее перемещать их в другую папку под названием processed

  • В настоящее время я использую PHP IMAP-клиент, который постоянно подключен к IMAP и отслеживает новые письма, но это не масштабируемо.

  • Я рассматривал другой вариант, добавляя в /etc/postfix/master.cf, но не смог понять, как это будет взаимодействовать с sieve

    forwardhook unix – n n – – pipe
      flags=F user=user-data argv=/my/php/script1.php ${recipient} ${sender} ${size}

Мои 3 связанных вопроса:

  1. Каков порядок выполнения для sieve и script1.php?
  2. Можно ли вызвать script1.php из sieve?
  3. В случае, если script1.php нарушит парсинг из-за изменений в содержании/структуре письма, я хотел бы перепарсить их, переместив письма в конкретную папку. PHP IMAP-клиент может это сделать. Как я могу сделать то же самое с postfix/sieve?

Ответ или решение

Обработка входящих писем с помощью Sieve и PHP

Введение

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

Основные идеи

  1. Работа Sieve и PHP скрипта:
    Sieve — это язык сценариев, использующийся для фильтрации электронной почты непосредственно на почтовом сервере. Он выполняется до того, как письмо окажется в папке вашего почтового клиента. Это означает, что любой сценарий Sieve будет выполнен первично, а ваши PHP скрипты будут работать после.

  2. Вызываем PHP скрипт из Sieve:
    Sieve не поддерживает возможность прямого вызова внешних скриптов, таких как ваши PHP-скрипты. Однако вы можете использовать pipe в Sieve для передачи сообщений на обработку в другом процессе. Это достигается через конфигурацию Postfix.

  3. Повторная обработка ошибочных писем:
    Если вы хотите повторно обработать письма, которые не были корректно распознаны вашим PHP скриптом, вы можете создать отдельную Sieve-правило, чтобы перемещать письма с ошибками в особую папку. Это может быть реализовано через fileinto команду Sieve.

Ответы на ваши вопросы

1. Каков порядок выполнения Sieve и скрипта script1.php?

Порядок выполнения будет следующим:

  • При получении электронного письма сначала выполняются сценарии Sieve.
  • Если Sieve выполняет pipe для передачи письма в script1.php, то только после завершения сценариев Sieve будет вызван PHP скрипт.

В случае ошибок в парсинге, вы можете регистрировать ошибки в логах и затем использовать Sieve для перемещения писем в отдельную папку.

2. Можно ли вызвать script1.php из Sieve?

Да, вы можете вызвать PHP скрипт из Sieve с помощью команды pipe, которая передаст письмо на стандартный ввод вашего скрипта. Пример конфигурации в master.cf:

forwardhook unix - n n - - pipe
  flags=F user=username argv=/usr/bin/php /path/to/script1.php ${recipient} ${sender} ${size}

После этого в вашем Sieve-скрипте можно использовать подобную конструкцию:

if header :contains "Subject" "обработка" {
    pipe "forwardhook";
}

3. Как осуществить повторную обработку писем с помощью Postfix/Sieve?

Чтобы реализовать повторный парсинг писем, вы можете использовать отдельный Sieve-скрипт, который будет проверять наличие ошибок или специфичный заголовок, который вы создадите в случае ошибки. Например:

if header :contains "X-Parse-Error" "true" {
    fileinto "Processed";
}

Таким образом, когда ваш script1.php не сможет обработать письмо корректно, вы можете добавить заголовок с ошибкой, и Sieve переместит это письмо в папку Processed.

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...