Ситуация: почтовый сервер с доступом только по протоколу IMAP. Проблема: я хочу иметь возможность фильтровать письма (помещать некоторые письма в разные папки, отмечать их как прочитанные и т. Д.).
У большинства новых почтовых клиентов есть такая возможность, но мне нужна отдельная программа фильтрации, так как мне нужно использовать различные почтовые клиенты для подключения к этому серверу.
В общем - что-то вроде procmail, но работающее по IMAP.
Программное обеспечение будет работать под управлением Linux или Solaris.
Быстрый гугл подбрасывает IMAPFilter похоже, что он делает то, что вы хотите:
- Поиск сообщений с использованием множества доступных критериев в протоколе IMAP, таких как:
- Статус (недавнее, непрочитанное и т. Д.) Сообщения.
- Размер сообщения.
- Возраст сообщения.
- Сопоставление строки или шаблона регулярного выражения в заголовках или теле сообщения.
- Возможность использовать логические операторы (и / или / нет) при поиске сообщений.
- Для обработки сообщений доступны различные возможности, в том числе:
- Удаление сообщений.
- Перемещение сообщений в почтовый ящик на том же или разных серверах
- Копирование сообщений в почтовый ящик на том же или на разных серверах.
- Пометка сообщений или изменение флагов сообщений.
- Список доступных и / или подписанных почтовых ящиков, а также поддержка расширения IMAP CHILDREN.
- Создание, удаление, переименование, подписка или отмена подписки почтовых ящиков
- Поддержка интернационализации (I18N).
- Поддержка пространства имен сервера с использованием расширения IMAP NAMESPACE.
- Подключения imap с шифрованием Secure Socket Layer (SSL) или Transport Layer Security (TLS) (порт 993).
- Зашифрованные соединения с использованием расширения IMAP STARTTLS.
- Аутентификация пользователя с помощью механизма аутентификации запрос-ответ (CRAM), в частности CRAM-MD5.
- Поддержка Perl-совместимых регулярных выражений (PCRE).
Еще один способ - использовать imap-фильтр ruby gem.
https://github.com/flajann2/imap-filter/blob/master/README.org
И пример DSL,
https://github.com/flajann2/imap-filter/blob/master/examples/default.imap
DSL основан на Ruby, но вам не нужно много знать Ruby, чтобы его использовать. Автор обещает предоставить больше примеров в ближайшем будущем и открыт для запросов функций и запросов на вытягивание.
Для абсолютной легкости вы можете дать Просеять попытка.
Как вы уже упоминали, procmail - правильный способ сделать это, поэтому вы можете спросить своего провайдера электронной почты, поддерживают ли они это на всякий случай - не повредит.
В противном случае, возможно, самый простой способ - это всегда открывать почтовый клиент, который выполняет сортировку и т. Д. Раньше возникали проблемы с блокировкой, когда несколько клиентов обращались к одному и тому же почтовому ящику IMAP, но я не видел их много лет.
В зависимости от вашего IMAP-сервера вы можете просто использовать некоторую реализацию сито. Я думаю, что лучшая опора для сита - это cyrus.
В операционных системах Linux и Unix вы можете использовать fetchmail
для опроса вашей учетной записи электронной почты IMAP и передачи любых новых сообщений на procmail
. Вы можете настроить procmail для запуска сценариев на основе совпадений шаблонов регулярных выражений в полученных сообщениях.
Для этого вам необходимо установить пакеты fetchmail и procmail. Следующая конфигурация позволила мне запускать сценарий для каждого нового сообщения электронной почты, полученного в мою учетную запись электронной почты. Я использовал Ubuntu 12.04 LTS.
В ~/.fetchmailrc
:
# .fetchmailrc checks my e-mail account for new messages, sends them to procmail
set logfile /home/myusername/fetchmail.log
poll mail.domain.com protocol IMAP
user "emailaccountname"
password 'emailpassword'
folder 'INBOX'
keep
ssl
mda "/usr/bin/procmail -f %F"
Обратите внимание keep
указанная выше директива, которая гарантирует, что сообщения не будут удалены с сервера IMAP после их получения.
В ~/.procmailrc
:
# .procmailrc received e-mails from fetchmail and runs a script
PATH=/usr/bin:/usr/local/bin
LOGFILE=/home/username/procmail.log
SHELL=/bin/sh
# This rule triggers for every e-mail message:
:0
| `/home/username/myscript.sh`
В Интернете есть множество руководств по fetchmail и procmail, а также руководств по их интеграции (вот как я пришел к вышеупомянутому).
Теперь, если я убегу fetchmail
или fetchmail -v
сценарий /home/username/myscript.sh
запускается один раз для каждого нового сообщения. Я могу запустить fetchmail в cron или настроить fetchmail для работы в качестве демона с set daemon 600
директива в .fetchmailrc
(где 600 - количество секунд между опросами).