Здравствуйте,
Я бы хотел написать простого демона на С, проверяющего почту. До этого для *nix ничего не писал, поэтому даже не знаю с чего начать...
Собственно, детали:
1) mail-сервер расположен на том же сервере, что и будет демон (хотя не думаю, что от этого что-то зависит)
2) мне нужно, чтобы демон перехватывал все письма, и, если он найдет нужное письмо (скажем, с заголовком "hello, world"), то демон предпринимает какие-либо действия, например system("perl /usr/local/bin/myprog.pl")Есть идеи, как это реализовать? :)
Можно ли все это сделать на перле, а не на С?
Еще есть одна мутная идея: когда приходят письма, они должны сохранятся на сервере в каком-то файле. Можно с некоторой периодичностью оправшивать этот файл в поисках письма...
>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
И если ты коряво написал свою программу, то тебя очень быстро поимеют...
>И если ты коряво написал свою программу, то тебя очень быстро поимеют...
>
Для безопасности все-же лучши издеваться над копией письма. А сами письма фильтровать через procmail
>Здравствуйте,
>Я бы хотел написать простого демона на С, проверяющего почту. До этого
>для *nix ничего не писал, поэтому даже не знаю с чего
>начать...
>Собственно, детали:
>1) mail-сервер расположен на том же сервере,неплохо было бы узнать, что за MTA. т.к. в большинстве MTA уже заложены средства фильтрации.
В целом идея такова:
а. используя штатные срества MTA реализовать фильтрацию и выполнение каких-либо действий.
алтернативный вариант, на основе той же фильтрации перенаправлять письма на некоторого пользователя этого же домена, для которого в /etc/mail/aliases прописано "| /path/to/binary".
Попутно, на perl-е это сделать не в пример проще, чем на C со всех точек зрения. Экран кода для разбора письма на куски и сборки кусков обратно в письмо. Ну или два экрана, если рисовать красиво и с комментариями :)Я так к постфиксу самописный фильр подключил, который почту проверяет на вирусы и лечит в случае чего. В результате для проверки неограниченного количества писем, объема писем и количества ящиков мне нужна всего одна лицензия на антивирь, да и та для рабочей станции, а не для сервера :)
Спасибо всем за ответы!
Скажу сразу, что все легально, я работаю веб-мастером и хотел бы немного облегчить себе жизнь, да и научиться чему-то новому всегда интересно :)
> robot: "|perl /usr/local/bin/myprog.pl"
На сервере стоит SendMail, от него будут письма переправляться? вместе с заголовком? копии или без сохранения там, где обычно?> А сами письма фильтровать через procmail
Можно поподробнее про procmail? что это такое?> неплохо было бы узнать, что за MTA. т.к. в большинстве MTA уже заложены средства фильтра%
Спасибо всем за ответы!
Скажу сразу, что все легально, я работаю веб-мастером и хотел бы немного облегчить себе жизнь, да и научиться чему-то новому всегда интересно :)
> robot: "|perl /usr/local/bin/myprog.pl"
На сервере стоит SendMail, от него будут письма переправляться? вместе с заголовком? копии или без сохранения там, где обычно?> А сами письма фильтровать через procmail
Можно поподробнее про procmail? что это такое?> неплохо было бы узнать, что за MTA. т.к. в большинстве MTA уже заложены средства фильтрации
Что такое MTA? Я догадываюсь, что это mail transform agent или что-то в этом роде...> Попутно, на perl-е это сделать не в пример проще, чем на C со всех точек зрения. Экран кода для разбора письма на куски и сборки кусков обратно в письмо. Ну или два экрана, если рисовать красиво и с комментариями :)
Мне нужно не совсем это :)
Нужно выкладывать на сайте пресс-релизы, которые мне шлют выше. Так как их идет по нескольку штук в день, то даже через веб-интерфейс их выкладывать сложно :(
А так я бы хотел просто переправлять письма роботу с нужной командой в заголовке, например: !mailbot release.
>> robot: "|perl /usr/local/bin/myprog.pl"
>На сервере стоит SendMail, от него будут письма переправляться? вместе с заголовком?
>копии или без сохранения там, где обычно?Письма будут перенаправляться целиком и без сохранения. Можете проверить это так:
robot: "|cat >/tmp/robot.txt"
о!я как раз недавно писал pop3 клиент под никс.
Правда так до конца и не закончил,но прога может скачать с заданного мылбокса все письма,и сохранить.А дальше добавить функцию по которой письма будут откидыватся несложно.вот.
>о!я как раз недавно писал pop3 клиент под никс.ИМХО, это из разряда велосипедов. Для того же perl'a существует множество модулей, реализующих подобную функциональность. В качестве конечного приложения неплохим выбором служит fetchmail
Не получилось...
SendMail уже сконфигурирован (не мной), я сделал следующее:
1. Добавил юзера robo
2. Написал в /etc/aliases строчку:
robot: "|cat >/tmp/robot.txt"
3. Выполнил newaliases
4. Послал письмо и... ничего :/ по идее должен создаться файл /tmp/robot c текстом, но его не оказалось... почему не знаю :(
Может надо SendMail переконфигурировать?
> На сервере стоит SendMail, от него будут письма переправляться?А куда они денутся, если построишь :)
> вместе с заголовком?
Вместе со всем :)
> копии или без сохранения там, где обычно?
А это зависит от скрипта или того, кому он будет передавать. Можно построить procmail на предмет отправки копий письма по разным назначениям - одну твоему скрипту, другую куда-то там т.д. У этого варианта сразу два плюса - не нужно строить sendmail на предмет разрешения запуска твоего скрипта через smrsh (попутно в какой-то степени защитишься от дырок в своем скрипте), а так же не нужно будет реализовывать эту функциональность в своем скрипте.
> Можно поподробнее про procmail? что это такое?
Дополнение к MTA предназначенное для разбора писем по определенным критериям. Последние ты задаешь в конфигурационном файле, который передается procmail-у.
Например, строка в /etc/aliasesmailuser: |"/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++