/ftn

Primary LanguagePerl

Лицензия распространения: GPLv3
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Copyrigh (C) 2006 Dmitry E. Oboukhov <dimka@uvw.ru>

что надо доделать:
~~~~~~~~~~~~~~~~~~
1. разбор юю-ков во входящей почте и вкладывание их в виде аттачей в RFC822
письмо 
2. разбор RFC822 писем с аттачами и вкладывание non-text аттачей в письмо 
ftn в виде ююков.
3. выделить в отдельный модуль хрень заменяющую русские буквы Н на
олбанские. модуль нужен для того чтобы если вдруг в других языках другие
буквы менять чтобы не искать по коду где это было.
4. пересмотреть структуру пакетов (написано все за несколько часов, потому
неоптимально)
5. модуль MD5 заменить на Digest::MD5 (потому что последний идет в
стандартном перле любом)
6. приделать отправку обратных писем если что-то не так и письмо не
отправилось (впрочем по инбаунду видно это возможно это не надо)
7. Продумать что делать с письмами у которых не удается определить
обратный ftn-адрес (сейчас он ставится своим адресом, то есть если ответить
нетмылом человеку с неопределенным адресом то оно вернется назад)

что в идеале:
~~~~~~~~~~~~~

1. придумать механизм авторизации (сейчас по email/From) и можно превратить
в публичный ftn-email-гейт
2. решить что делать с нодовым софтом (тут нет ареафиксов и прочая)

известные баги:
~~~~~~~~~~~~~~~
1. при конверте строк с юникодными символами отсутствующими в CP866 если
в строке такой встречается, то остаток строки отбрасывается.
надо убрать варнинги при енкодинге нафиг (лучше пусть символы отдельные
теряет чем куски строк)

эта неприятность возникает в основном при копипастинге из инета (типа
русские кавычки итп), но меня пока не донимала сильно да я и не фиксил
(еще)

краткое описание чего тут и как:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

про модули если какой скрипт будет ругаться доставить нужный

все скрипты вызываются с установленной переменной в 
енвиронменте FMAIL_CONF она должна указывать на конфиг-файл.

fmail.conf - мой рабочий конфиг для работы скриптов
(там пароли только изменены).


в кратце работает примерно так:

по крону я запускаю распаковщик входной почты и входной гейт.
распакованная почта гейтится в RFC822 и кормится сортировщику (в моем
случае это procmail).
исходящая почта перехватывается MTA и кормится выходному гейту.

в итоге на хосте получаем базу писем RFC822, которая рассортирована по эхам

ftn-адреса rfc822 по аналогии с другими гейтами (типа
p24.f1042.n5020.z2@домен)

unpack.pl
~~~~~~~~~
распаковывает входящую почту прямо в инбаунде

ftn2rfc.pl
~~~~~~~~~~
ищет в инбаунде неупакованную (распакованную) почту и конвертит
все в rfc-формат и скармливает по указанному в конфиге адресу (в моем
случае скармливает procmail'у)

ftn2rfc.pl доставляет корректные заголовки List-Id (mutt во всяком случае
их нормально воспринимает, другой вопрос что какой-либо thunderbird может
их воспринимать не полностью, ну да это мелочи, работать он будет
может не полнофнукционально)


procmail положит письма туда где вы их храните

вот мое правило procmail для фидо:

= начало вырезки
LOW_CASE_SED_CMD="y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/"
SED=/bin/sed

:0
* ^X-Fido-Area: *\/.*
$MAILDIR/.f_`echo -n $MATCH|$SED "s/ //"|$SED $LOW_CASE_SED_CMD|$SED 's/\./_/g'`/

= конец вырезки

он создает maildir на каждую эху заменяя точки в имени эхи на подчеркивания
(это нужно если почту мы читаем через imap, если локальная почта то можно и
убрать эту замену)

rfc2ftn.pl
~~~~~~~~~~
его настраиваем так чтобы exim его вызывал когда почта идет в фидо

вот секции моего exim.conf:

транспорт:

= начало вырезки

fidogate:
  driver = pipe
  command = "/home/dimka/.ftn/fm/rfc2ftn.pl /home/dimka/.ftn/fm/fmail.conf"
  user = dimka
  group = ftn
  umask = 002

=конец вырезки

роутинг:

= начало вырезки
fidonet:
  driver = manualroute
  domains = ! +local_domains
  route_list = fidonet.domain.org
  transport = fidogate
= конец вырезки

то есть exim перехватывает всю почту идущую на домен fidonet.domain.org и
сплавляет ее в пайп скрипту /home/dimka/.ftn/fm/rfc2ftn.pl.

этот скрипт по адресу From ставит адрес ftn/from в письма при
преобразовании, далее кладет это в аутбаунд (и себе в инбаунд кстати тоже
кладет чтобы мы видели что в фидо ушло)