Решено: exim4 (обработка виртуального ящика)

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС для молодых и начинающих системных администраторов.

Модераторы: SLEDopit, Модераторы разделов

shine
Сообщения: 35
ОС: Debian

Решено: exim4

Сообщение shine »

Есть Ubuntu 2.6.24 с exim4(4.69-2) на борту. Из MySQL достается список адресов на которые принимаем почту. Все эти адреса объединены в один виртуальный mailbox т.е. все письма пришедшие на эти адреса скидываются в этот общий ящик.

А теперь мне нужно как-то обрабатывать каждое приходящее письмо. То есть нужно навесить что-то вроде обработчика события на каком-то скриптовом языке (оптимально Ruby или Python) который будет что-то вытворять с содержимым письма.

Мне говорили что-то про procmail который сидит в основе exim но никакой нормальной документации нагуглить не удалось.

Подскажите пожалуйста как проще всего такое реализовать?
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: Решено: exim4

Сообщение diesel »

нормальная документация к procamail - это

Код: Выделить всё

diesel@:~$ apropos procmail
procmail (1)         - autonomous mail processor
procmailex (5)       - procmail rcfile examples
procmailrc (5)       - procmail rcfile
procmailsc (5)       - procmail weighted scoring technique


iУведомление от модератора
к программированию тема имеет мало отношения, переношу в администрирование для начинающих
Спасибо сказали:
Аватара пользователя
butch
Сообщения: 331
ОС: :OC

Re: Решено: exim4

Сообщение butch »

shine писал(а):
29.07.2009 14:58
мне нужно как-то обрабатывать каждое приходящее письмо. То есть нужно навесить что-то вроде обработчика события на каком-то скриптовом языке (оптимально Ruby или Python) который будет что-то вытворять с содержимым письма.

внутри экзима можно делать оооочень многое =)
конкретнее содержимое задачи пожалуйста.
Спасибо сказали:
shine
Сообщения: 35
ОС: Debian

Re: Решено: exim4

Сообщение shine »

butch писал(а):
29.07.2009 16:17
внутри экзима можно делать оооочень многое =)
конкретнее содержимое задачи пожалуйста.


Давайте так. На то чтобы объяснять алгоритм обработки текста письма уйдет много времени. Точнее даже очень много времени. Чтобы вы имели общее представление это будет несколько независимых классов валидирующих, парсящих и привязывающих данные письма к другим данным в системе.

Поэтому я и задал вопрос не о реализации своего алгоритма - с этим я сам справлюсь - а о доступе к данным письма. Мне нужно получить доступ к телу письма, его теме, его заголовку и т.д. Формат в котором это будет доступно особого значения не имеет. Это может быть аргумент в функции, значения в ARGV, атрибуты какого-то объекта или что-то еще типа глобальных переменных.

Я где-то краем уха слышал что возможно организовать вызов определенного скрипта когда приходит новое письмо. Ничего более конкретного вспомнить не могу.

Мысли? Идеи? Предложения?
Спасибо сказали:
Аватара пользователя
Ленивая Бестолочь
Бывший модератор
Сообщения: 2760
ОС: Debian; gentoo

Re: Решено: exim4

Сообщение Ленивая Бестолочь »

shine писал(а):
29.07.2009 14:58
А теперь мне нужно как-то обрабатывать каждое приходящее письмо.

что именно вы хотите сделать с письмом?
в exim есть фильтры, а также можно вставлять вызов перловых функций из внешних скриптов.

не совсем понятно - почему вы хотите делать это именно экзимом. ну получил экзим ваше письмо, сложид его в maildir.
вот оно лежит(например) в /var/spool/maildir/ в совершенно открытом виде.
разделывайте его дальше чем хотите - bash/awk/grep/perl/php/....
Солнце садилось в море, а люди с неоконченным высшим образованием выбегали оттуда, думая, что море закипит.
Спасибо сказали:
shine
Сообщения: 35
ОС: Debian

Re: Решено: exim4

Сообщение shine »

Ленивая Бестолочь писал(а):
29.07.2009 20:17
что именно вы хотите сделать с письмом?

В конечном счете я буду валидировать его контент, парсить все значения в его содержании и добавлять БД то что получилось в результате. Вот только до всего этого нужно дотянуться до содержимого письма: тема, от кого, кому, текст письма, атрибуты письма и т.д. Как все это достать и есть главный вопрос который меня интересует.

Ленивая Бестолочь писал(а):
29.07.2009 20:17
в exim есть фильтры, а также можно вставлять вызов перловых функций из внешних скриптов.

не совсем понятно - почему вы хотите делать это именно экзимом. ну получил экзим ваше письмо, сложид его в maildir.
вот оно лежит(например) в /var/spool/maildir/ в совершенно открытом виде.
разделывайте его дальше чем хотите - bash/awk/grep/perl/php/....

Проблема со складыванием и чтением в задержке. Все письма нужно обрабатывать так быстро как только можно. Для этого лучше всего обрабатывать их сразу же после прихода не откладывая в долгий почтовый ящик :)
Про фильтры - это интересно. Сейчас попробую порыть в их сторону.
Спасибо сказали:
Аватара пользователя
Ленивая Бестолочь
Бывший модератор
Сообщения: 2760
ОС: Debian; gentoo

Re: Решено: exim4

Сообщение Ленивая Бестолочь »

shine писал(а):
29.07.2009 21:33
Проблема со складыванием и чтением в задержке. Все письма нужно обрабатывать так быстро как только можно. Для этого лучше всего обрабатывать их сразу же после прихода не откладывая в долгий почтовый ящик

гуглите в строну FAM + fileschanged.
описание: http://fileschanged.sourceforge.net/
и сделайте скрипт, который срабатывает сразу же (почти).

еще, как вариант - в экзиме можно задавать свои транспорты - сделайте транспорт в какой-нибудь пайп, который будет ловить ваш скрипт.
пришло письмо и сразу в скрипт.
Солнце садилось в море, а люди с неоконченным высшим образованием выбегали оттуда, думая, что море закипит.
Спасибо сказали:
shine
Сообщения: 35
ОС: Debian

Re: Решено: exim4

Сообщение shine »

Ленивая Бестолочь писал(а):
29.07.2009 22:41
гуглите в строну FAM + fileschanged.


Расскажу что в результате получилось может кому-то еще пригодится.

Сладкая парочка FAM+fileschanged позволяет отслеживать изменения файлов. То есть при создании, изменении и удалении файлов FAM регистрирует это событие. Для моего случая идеально подошли две опции FAM: фильтр по типу события (в моем случае создание файла с письмом) и запуск стороннего скрипта с передачей в этот скрипт имени нового файла. Сторонний скрипт написан на bash и все что он делает это дерганье rake задачи, передавая в нее имя файла как аргумент командной строки. Ну а в rake уже доступны все возможности ruby и можно вытворять все что захочется.
Спасибо сказали:
Аватара пользователя
Ленивая Бестолочь
Бывший модератор
Сообщения: 2760
ОС: Debian; gentoo

Re: Решено: exim4

Сообщение Ленивая Бестолочь »

тоесть я так понимаю, что вопрос решен, о чем можно отметить в заголовке.
поздравляю ;-)
Солнце садилось в море, а люди с неоконченным высшим образованием выбегали оттуда, думая, что море закипит.
Спасибо сказали: