- Вопрос или проблема
- Ответ или решение
- Обработка входящих писем с помощью Sieve и PHP
- Введение
- Основные идеи
- Ответы на ваши вопросы
- 1. Каков порядок выполнения Sieve и скрипта script1.php?
- 2. Можно ли вызвать script1.php из Sieve?
- 3. Как осуществить повторную обработку писем с помощью Postfix/Sieve?
- Заключение
Вопрос или проблема
Основная цель: Я хотел бы, чтобы мой PHP-скрипт парсил и выполнял действия с входящими письмами, которые попадают в определенные папки
-
Я использую почтовый клиент, который позволяет мне редактировать фильтр sieve, который перемещает электронные письма в разные папки
-
Насколько я понимаю, sieve работает независимо от почтового клиента
-
Для некоторых входящих писем я хотел бы парсить их для получения определенной информации и далее перемещать их в другую папку под названием
processed
-
В настоящее время я использую PHP IMAP-клиент, который постоянно подключен к IMAP и отслеживает новые письма, но это не масштабируемо.
-
Я рассматривал другой вариант, добавляя в
/etc/postfix/master.cf
, но не смог понять, как это будет взаимодействовать с sieveforwardhook unix – n n – – pipe
flags=F user=user-data argv=/my/php/script1.php ${recipient} ${sender} ${size}
Мои 3 связанных вопроса:
- Каков порядок выполнения для sieve и
script1.php
? - Можно ли вызвать
script1.php
из sieve? - В случае, если
script1.php
нарушит парсинг из-за изменений в содержании/структуре письма, я хотел бы перепарсить их, переместив письма в конкретную папку. PHP IMAP-клиент может это сделать. Как я могу сделать то же самое с postfix/sieve?
Ответ или решение
Обработка входящих писем с помощью Sieve и PHP
Введение
Современные системы обработки электронной почты требуют эффективных решений для автоматизации управления входящими сообщениями. В вашем случае основная задача заключается в парсинге электронной почты и перемещении писем в определенные папки. Давайте рассмотрим, как вы можете оптимизировать этот процесс с использованием фильтров Sieve и PHP.
Основные идеи
-
Работа Sieve и PHP скрипта:
Sieve — это язык сценариев, использующийся для фильтрации электронной почты непосредственно на почтовом сервере. Он выполняется до того, как письмо окажется в папке вашего почтового клиента. Это означает, что любой сценарий Sieve будет выполнен первично, а ваши PHP скрипты будут работать после. -
Вызываем PHP скрипт из Sieve:
Sieve не поддерживает возможность прямого вызова внешних скриптов, таких как ваши PHP-скрипты. Однако вы можете использоватьpipe
в Sieve для передачи сообщений на обработку в другом процессе. Это достигается через конфигурацию Postfix. -
Повторная обработка ошибочных писем:
Если вы хотите повторно обработать письма, которые не были корректно распознаны вашим 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 скрипты для парсинга данных, вы можете создать мощную и устойчивую систему. Не забывайте тщательно тестировать ваши конфигурации на небольшом объеме данных перед окончательным развертыванием.