The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Настройка сервера для работы с информагенствами (procmail mail filter sendmail)


<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: procmail, mail, filter, sendmail,  (найти похожие документы)
From: alexch <alexch at alexch.com.ua> Newsgroups: email Date: Mon, 30 Apr 2004 14:31:37 +0000 (UTC) Subject: Настройка сервера для работы с информагенствами Прелюдия: Так вышло, что компания является подписчиком у некоторых инфорагенств. Эти агенства каждый день по мейлу сбрасывают своим подписчикам файлы. Человек в нашей компаниии должен получить эти файлы, положить их в зашаренную папку и на этом как бы все. Но нет! В нашей сети люди работающие с полученными документами работают не только на PC, но и на MAC'ах. Потому и было принято решение содержимое файлов засовывать в конференции, в формате html, чтоб и с MAC'ов и с PC могли одинаково читать документ. И в се было бы хорошо, если бы у каждого из этих ИА были свои сервера новостей для подписчиков. В таком случае они просто вносят IP адрес нашего сервера в свой файл конфигурации, после чего наш сервер тянет у них новости по 119 порту. Таким образом соблюдается единый стандарт подачи новостей. Но толи у них там с админами не сложилось, толи еще по какой дурной причине, но это получается страшно неудобно, так как такой файл нужно принять, вырезать из тела письма, пропустить через конвертор, и даже не через один, и только тогда запостить в конференцию. Однако мы же крутые админы и не хотим, чтобы пользователи вручную постили информацию. Следовательно мы это дело автоматизируем. Но задача осложняется тем, что каждое ИА считает нужным высылать файлы со своим марафетом и в формате ворда 95, 97 или 2000, есть даже такие которые высылают досовский текст - полный отстой на мой взгляд. Представляете какой винегрет получается после всех раскодировок, а особенно когда в файле есть таблицы. Ну да ладно, закроем глаза на бездарность их админов и будем обходится тем что есть. Используем: FreeBSD 4.8 Inn 2.4.0 Wv 0.7.5 Sendmail Procmail Предполагается, что Inn и Sendmail у нас уже заинсталены и работают. Если Inn не установлен - смотри сюда. Инсталяция Procmail ------------------- Ставим из портов cd /usr/ports/mail/procmail make make install make clean Интеграция Sendmail+Procmail Для людей незнакомых с назначением пакета Procmail, рекомендую посетить этот сайт. Предполагаем, что вся почта от ИА будет идти на info@myinfoserver.com. Следовательно создаём учётную запись info adduser info В домашнем каталоге создаем файл .procmailrc где позже мы напишем правила фильтрации. touch .procmailrc Для интерграции Procmail'a c Sendmail'oм дописываем в mc-файл конфигурации Sendmail'а следующее cd /etc/mail vi mysendmail.mc FEATURE(local_procmail) MAILER(local) MAILER(smtp) MAILER(procmail) make cp sendmail.cf sendmail.cf.bak cp mysendmail.cf sendmail.cf killall -1 sendmail Если все сделано правильно, то Sendmail должен работать как и работал раньше. Инсталяция wv ------------- На мой взгляд прекрасный разноплановый конвертер, корректно работающий с украинской буквой "i". Нам же потребуется от него только конвертация доковских документов в html. cd /usr/ports/textproc/wv make (тут он за собой потянет ~60 мег иксовых библиотек + кучу всякого барахла, так что придется подождать) make install make clean Никаких настроек для этого пакета не требуется, поэтому сразу переходим к написанию прокмейловского скрипта Написание скрипта ----------------- Как он будет работать? Мейл с аттачментом проходит через прокмейловский скрипт, где аттачмент выризается, конвертируется в html, формируется новый мейл с содержимым html-файла, пересылается на какой-либо адрес нашего сервера, который мы укажем в aliaes, оттуда постим в конференцию. Переходим в домашнюю директорию пользователя info и создаем необходимые временные каталоги. mkdir temp mkdir temp/ia Владельцем каталогов должен быть пользователь info Открываем файл .procmailrc, который мы создали в домашней директории юзера info. VERBOSE=yes SHELL=/bin/sh PATH=$PATH:/usr/bin:/usr/local/bin:/usr/local/news/bin :0 w:ms.lock * (^From:.*info@infoagency.com|^From:.*info@infoagency2.com) (допускаем, что почта от ИА может приходить с разных серверов) { agency=ia :0 fw: ms.lock | rm -f temp/$agency/* ; \ (очищаем темп-директорию от файлов которые пришли раньше) uudeview -m -p temp/$agency - ; \ (вынимаем аттачмент из тела письма и кладем его в temp/ia) cd temp/$agency ; \ for j in `ls *.doc` ; do \ jh=`echo $i|sed -e 's/\.txt$/.html/'` ; \ wvWare -x wvHtml.xml -c koi8-u $j > $jh ; \ (все файлы с расширением doc мы проганяем через конвертер, на выходе получаем html-файл в кодировке koi8-u) ( formail -A "From: Info-Robot DTKT.COM.UA" \ -A "Subject: $jh" \ -A "Content-Type: text/html; charset=koi8-u" \ -A "Content-Transfer-Encoding: 8bit" ; \ cat $jh ; ) | $SENDMAIL info_ia_html@myinfoserver.com ; done (формируем заголовок нового мейла, вставляем содержимое html - файла и отсылаем) } :0 e | uuencode error.eml|mail -s "Error in HTML" admin@mydomain.com (в случае збоя в работе скрипта, мы будем получать уведомление) Редактирование aliases ---------------------- В файл с алиасами нам нужно добавить строчку info_ia_html: "|/usr/local/news/bin/mailpost infoagency.ia" (разумеется, что группа infoagency.ia уже должна быть создана. man mailpost) newaliases Редактирование файла mailpost ----------------------------- Дело в том, что есть такой глюк у mailpost'a, который проявляется в том, что он не хочет постить документы если абзац содержит более чем 500 символов одной строкой (по крайней мере я так насчитал). В каком-то FAQ'е я прочитал как это дело поправить. cd /usr/local/news/bin Открываем на редактирование mailpost и находим кусок текста my $rest; $rest .= $_ while (<STDIN>); $rest =~ s/\n*$/\n/g; # Remove trailing \n except very last После чего вставляем unless ($rest =~ /\n.+$/) #Assumes no too-long lines if embedded \n { use Text::Wrap; $rest = wrap('','',$rest); #wraps to default of 72 columns } Далее должно следовать print TMPFILE $rest; close TMPFILE ; Таким образом проблема устранена. Однако может случится такое, что и после этого Inn будет кидать ошибку. В таком случае необходимо взять inews из пакета 2.3.х Доставка полученных новостей на сервера филиалов компании --------------------------------------------------------- Разумеется, что свежеполученная новость должна быть доставлена на сервера других филиалов компании. Следовательно нам нужно настроить фидинг. Открываем файл nntpsend.ctl и пишем news.branch1.com:news.branch1.com::-t300 news.branch2.com:news.branch2.com::-t300 (за подробностями man nntpsend.ctl) Еще нам нужно подредактировать файл newsfeeds news.branch1.com\ :infoagency.*,!junk,!control,!control.*\ :Tf,Wnm: news.branch1.com\ :infoagency.*,!junk,!control,!control.*\ :Tf,Wnm: Делаем stop/start Inn. incoming.conf на принимающей стороне Проще пареной репы. Добавляем IP кормящего сервака, выглядеть должно примерно так: peer ME { hostname: "555.555.555.555, 127. 0.0.1" } Делаем stop/start Inn Запуск ------ на кормящей стороне запускаем nntpsend После этого ньюсы которые есть на кормящей стороне, уйдут на принимающую сторону. Если что не получилось, читайте логи. Если все работает как Вам хочется, то nntpsend засовываем в крон и пускай себе работает каждую минуту.

<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>

 Добавить комментарий
Имя:
E-Mail:
Заголовок:
Текст:




Спонсоры:
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2020 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру