URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 3812
[ Назад ]

Исходное сообщение
"Написание mail-робота "

Отправлено vx , 12-Янв-05 11:02 
Здравствуйте,
Я бы хотел написать простого демона на С, проверяющего почту. До этого для *nix ничего не писал, поэтому даже не знаю с чего начать...
Собственно, детали:
1) mail-сервер расположен на том же сервере, что и будет демон (хотя не думаю, что от этого что-то зависит)
2) мне нужно, чтобы демон перехватывал все письма, и, если он найдет нужное письмо (скажем, с заголовком "hello, world"), то демон предпринимает какие-либо действия, например system("perl /usr/local/bin/myprog.pl")

Есть идеи, как это реализовать? :)
Можно ли все это сделать на перле, а не на С?
Еще есть одна мутная идея: когда приходят письма, они должны сохранятся на сервере в каком-то файле. Можно с некоторой периодичностью оправшивать этот файл в поисках письма...


Содержание

Сообщения в этом обсуждении
"Написание mail-робота "
Отправлено gyn61 , 12-Янв-05 11:12 
>2) мне нужно, чтобы демон перехватывал все письма, и, если он найдет
>нужное письмо (скажем, с заголовком "hello, world"), то демон предпринимает какие-либо
>действия, например system("perl /usr/local/bin/myprog.pl")

Добавляете в /etc/aliases псевдопользователя с нужным правилом. Например:

robot: "|perl /usr/local/bin/myprog.pl"

В этом случае все письма для пользователя robot идут на стандартный ввод /usr/local/bin/myprog.pl


"Написание mail-робота"
Отправлено dimus , 12-Янв-05 11:54 
И если ты коряво написал свою программу, то тебя очень быстро поимеют...

"Написание mail-робота"
Отправлено adi , 14-Янв-05 14:38 
>И если ты коряво написал свою программу, то тебя очень быстро поимеют...
>
Для безопасности все-же лучши издеваться над копией письма. А сами письма фильтровать через procmail


"Написание mail-робота "
Отправлено chip , 15-Янв-05 22:51 
>Здравствуйте,
>Я бы хотел написать простого демона на С, проверяющего почту. До этого
>для *nix ничего не писал, поэтому даже не знаю с чего
>начать...
>Собственно, детали:
>1) mail-сервер расположен на том же сервере,

неплохо было бы узнать, что за MTA. т.к. в большинстве MTA уже заложены средства фильтрации.

В целом идея такова:
а. используя штатные срества MTA реализовать фильтрацию и выполнение каких-либо действий.
алтернативный вариант, на основе той же фильтрации перенаправлять письма на некоторого пользователя этого же домена, для которого в /etc/mail/aliases прописано "| /path/to/binary".


"Написание mail-робота "
Отправлено XMan , 16-Янв-05 01:52 
Попутно, на perl-е это сделать не в пример проще, чем на C со всех точек зрения. Экран кода для разбора письма на куски и сборки кусков обратно в письмо. Ну или два экрана, если рисовать красиво и с комментариями :)

Я так к постфиксу самописный фильр подключил, который почту проверяет на вирусы и лечит в случае чего. В результате для проверки неограниченного количества писем, объема писем и количества ящиков мне нужна всего одна лицензия на антивирь, да и та для рабочей станции, а не для сервера :)


"Написание mail-робота "
Отправлено vx , 17-Янв-05 11:39 
Спасибо всем за ответы!
Скажу сразу, что все легально, я работаю веб-мастером и хотел бы немного облегчить себе жизнь, да и научиться чему-то новому всегда интересно :)
> robot: "|perl /usr/local/bin/myprog.pl"
На сервере стоит SendMail, от него будут письма переправляться? вместе с заголовком? копии или без сохранения там, где обычно?

> А сами письма фильтровать через procmail
Можно поподробнее про procmail? что это такое?

> неплохо было бы узнать, что за MTA. т.к. в большинстве MTA уже заложены средства фильтра%


"Написание mail-робота "
Отправлено vx , 17-Янв-05 11:42 
Спасибо всем за ответы!
Скажу сразу, что все легально, я работаю веб-мастером и хотел бы немного облегчить себе жизнь, да и научиться чему-то новому всегда интересно :)
> robot: "|perl /usr/local/bin/myprog.pl"
На сервере стоит SendMail, от него будут письма переправляться? вместе с заголовком? копии или без сохранения там, где обычно?

> А сами письма фильтровать через procmail
Можно поподробнее про procmail? что это такое?

> неплохо было бы узнать, что за MTA. т.к. в большинстве MTA уже заложены средства фильтрации
Что такое MTA? Я догадываюсь, что это mail transform agent или что-то в этом роде...

> Попутно, на perl-е это сделать не в пример проще, чем на C со всех точек зрения. Экран кода для разбора письма на куски и сборки кусков обратно в письмо. Ну или два экрана, если рисовать красиво и с комментариями :)
Мне нужно не совсем это :)
Нужно выкладывать на сайте пресс-релизы, которые мне шлют выше. Так как их идет по нескольку штук в день, то даже через веб-интерфейс их выкладывать сложно :(
А так я бы хотел просто переправлять письма роботу с нужной командой в заголовке, например: !mailbot release.



"Написание mail-робота "
Отправлено gyn61 , 17-Янв-05 19:38 
>> robot: "|perl /usr/local/bin/myprog.pl"
>На сервере стоит SendMail, от него будут письма переправляться? вместе с заголовком?
>копии или без сохранения там, где обычно?

Письма будут перенаправляться целиком и без сохранения. Можете проверить это так:

robot: "|cat >/tmp/robot.txt"


"Написание mail-робота "
Отправлено zZz , 17-Янв-05 20:43 
о!я как раз недавно писал pop3 клиент под никс.
Правда так до конца и не закончил,но прога может скачать с заданного мылбокса все письма,и сохранить.А дальше добавить функцию по которой письма будут откидыватся несложно.вот.


"Написание mail-робота "
Отправлено chip , 19-Янв-05 19:41 
>о!я как раз недавно писал pop3 клиент под никс.

ИМХО, это из разряда велосипедов. Для того же perl'a существует множество модулей, реализующих подобную функциональность. В качестве конечного приложения неплохим выбором служит fetchmail


"Написание mail-робота "
Отправлено vx , 31-Янв-05 12:52 
Не получилось...
SendMail уже сконфигурирован (не мной), я сделал следующее:
1. Добавил юзера robo
2. Написал в /etc/aliases строчку:
robot: "|cat >/tmp/robot.txt"
3. Выполнил newaliases
4. Послал письмо и... ничего :/ по идее должен создаться файл /tmp/robot c текстом, но его не оказалось... почему не знаю :(
Может надо SendMail переконфигурировать?

"Написание mail-робота "
Отправлено XMan , 20-Янв-05 02:11 
> На сервере стоит SendMail, от него будут письма переправляться?

А куда они денутся, если построишь :)

> вместе с заголовком?

Вместе со всем :)

> копии или без сохранения там, где обычно?

А это зависит от скрипта или того, кому он будет передавать. Можно построить procmail на предмет отправки копий письма по разным назначениям - одну твоему скрипту, другую куда-то там т.д. У этого варианта сразу два плюса - не нужно строить sendmail на предмет разрешения запуска твоего скрипта через smrsh (попутно в какой-то степени защитишься от дырок в своем скрипте), а так же не нужно будет реализовывать эту функциональность в своем скрипте.

> Можно поподробнее про procmail? что это такое?

Дополнение к MTA предназначенное для разбора писем по определенным критериям. Последние ты задаешь в конфигурационном файле, который передается procmail-у.
Например, строка в /etc/aliases

mailuser:     |"/usr/bin/procmail /etc/mail/procmail/mailuser_process"

скажет MTA отдать письмо procmail-у, который обработает его в соответствии с правилами из файла /etc/mail/procmail/mailuser_process

> Что такое MTA?

Mail Transport Agent. Это sendmail, postfix, qmail и др.

> Нужно выкладывать на сайте пресс-релизы, которые мне шлют выше.

Вот для этого я и предлагаю перл. Разобрать письмо на составные части, в частности, выдрать из него вложенные файлы и сложить, куда нужно - это как раз куда как проще сделать на perl, чем на c/c++