Статьи о почте

Новости

Все новости

Разное в мире IT

Все заметки

Мир кровли Цена металочерепица.
mailinfo.ru - Статьи о почте

Сортировка почты с помощью fetchmail

Прислал(а) Влад [4 февраля 2002]

раздел: [Почта в различных ОС]

Обрисуем проблему.
Есть локальная сеть. Есть выделенка к провайдеру. У провайдера имеется один почтовый ящик на всю сетку (локаль). Адрес провайдера provider.ru имеется в базе DNS, а вот с адресом подключаемой фирмы (нашей) проблема. Ну никак он не хочет её регистрировать. И выбора нет. Провайдер один и он не делим как СССР :-).

Как же обеспечить каждого несчастного юзера в локальной сети своим ящиком (это не проблема), чтобы он мог не только писать, но уже и ПОЛУЧАТЬ себе письма, да так, чтобы они не сваливались в общую кучу и каждый видел ВСЕ письма, а ложились в ЕГО ПЕРСОНАЛЬНЫЙ ящик.

Я эту проблему решил так:
Порывшись неделю по сети и конференциям состряпал вот что. Для начала нам нужен неодбходимый перечень программ (все проводилось на машине в RedHat 6.2 и ядром 2.2.18 нересобраным под себя)

1. fetchmail
2. procmail
3. Настроенный sendmail и POP servers
4. Желание и настойчивость.
5. /dev/hends & /dev/head :-)

Первые два есть в дистрибутиве RedHat , третий - дело техники (документации по этому навалом).

Первое что необходимо сделать - завести локального пользователя-"распасовщика", который будет забирать всю почту от провайдера и складывать её у себя. Я завёл (не отличаясь оригинальностью) одноимённого юзера firma. В его ПЕРСОНАЛЬНОМ каталоге, я создал файл .procmailrc (точка в начале названия обязательна!):

bash# touch .procmailrc
bash# chown firma.firma .procmailrc
bash# chmod 600 .procmailrc (ставим на него права)

Добавляю в этот файл следующее (дополнительно можно почитать в доках, но мне и этого хватило):

:0
* ^Subject:.*vasily
! vasily

:0
* ^Subject:.*masha
! masha

:0
* ^Sybject:.*OOPS
! admin

Эти опции говорят программе procmail, что если в теме письма стоит слово vasily, то перенаправить его локальному юзеру vasily, так же с юзером masha. А если попадётся рассылка от разработчиков прокси-сервера OOPS, то направить её админу. Можно задать сортировку по полю От: (From:) После условия ^Subject: стоит точка и *, это означает
. - Любой символ, за исключением возврата каретки
* - Ноль или более раз
Можно комбинировать поля. Общий синтаксис правил такой:

:0 (тут ноль) [опции] [ : [исполняемый файл]
* условие 1
* условие 2
  .
  .
  .
* условие N
команда

Опции:
Н - Условие применяется к заголовку почты
В - Условие ищется в теле письма
D - Условие, при котором будут различаться верхний и нижний регистр букв

Более подробно можно глянуть по адресу http://unix.star.burnet.ru/procmail/procmail.html

Далее в этой же (домашней) директории создаём файл .forward

bash# touch .forward
bash# chown firma.firma .forward
bash# chmod 600 .forward

В нём пишем следующее:

|IFS=\' \' && exec /usr/bin/procmail USER=

Путь к программе procmail можно уточнить

bash# while procmail
/usr/bin/procmail

Дальше создаем тут же файл .fetchmailrc

bash# touch .fetchmailrc
bash# chown firma.firma .fetcmailrc
bash# chmod 600 .fetchmailrc

Добавляем в него:

set postmaster "firma"
poll provider.ru proto POP3 no dns
     user "firma" pass "my_super_password" to firma here
options fetchall

Здесь мы задаём постмастера, которому пойдёт вся почта, которая не попала ни под одно из правил (не выбрасывать же её :-) ) Указывает, откуда (provider.ru) нужно забирать почту. Я у себя написал IP провайдера, и ставим опцию no dns не определять имя узла, даба не тормозить процесс. Следом указываем имя учётной записи у провайдера и пароль :) Всё открытым текстом, так что смотрите, чтобы никто не стоял за спиной :-) и указываем какому пользователю складывать всю почту. Последняя опция - говорит что мы удаляем у провайдера всю почту после её скачивания (пусть меньше читает наши письма) :-)

Вот в принципе и всё.

Да, ещё один немаловажный момент. От какого пользователя будет запускаться процесс сбора почты, то в соответствующем каталоге и должен быть последний файл. Если от root\'а, то просто скопируй .fetchmailrc в каталог к root\'у и соответственно измените права на него. Остальные файлы пусть там и лежат. Мы же форвардим все письма на него :0)

Как запускать? Я рекомендую 2 способа. Один как написано в доках и один использую я.

1. bash# fetchmail -d 6000
   Запуск fetchmail\'а в режиме демона, с периодической (в данном
   случае 10 мин) проверкой почты.
2. Запуск через cron. Я его использую, т.к. даже после перезагрузки он
у меня всё равно периодически включается, а в 1 случае ручками
/dev/hends :-)
    bash# crontab -e
       и вписываем
       0,20,40 * * * * /usr/bin/fetchmail -v

Сохраняем запись и всё! Опция -v означает, что нужно вывести детальную информацию о процессе работы программы. Можно поставить и опцию -а (забирать все письма с сервера) Но в случае ошибки - ничего не видно.

Теперь можно вручную запустить и понаблюдать за работой.

bash# fetchmail -v

Всё!