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

Исходное сообщение
"скрипт переноса почты"

Отправлено slv , 18-Фев-05 14:02 
Привет всем! Помогите со скриптом: Есть ящик (inbox) в который поступает почта, необходимо каждое поступившее сообщение перемещать в другой файл(outbox). Пробывал 2-мя способами:
1. Скрипт на перле с использованием библиотеки Mail:Box:Manager, переносилось так:
# каждые 5 сек.
foreach my $message ($InBox->messages)
{
   $mgr->moveMessage($OutBox, $message);
}
Но видимо библиотека карявая, т.к. с каждым перемещенным сообшением скрипт отжирает память, и так до тех пор пока она не кончается :(((
Пробывал по одному сообщению - без разницы.

2. На перле с использованием проги mail:
# каждые 5 сек.
qx "echo -e 's 1 $OutBox\n d 1\nq\n'|mail -f $Inbox";

Здесь проблема в потерях сообщений, например в inbox посылаешь 30шт., а outbox перемещается 20, остальное теряется. Видимо это связано с одновременной работой с ящиком inbox, т.к если сначала в него положить все сообщения, а потом запустить скрипт, то все нормально. Но мне надо что все работало одновременно.
ОС:FreeBSD4.10, перл 5.8
Жду ваших советов.


Содержание

Сообщения в этом обсуждении
"скрипт переноса почты"
Отправлено aljil , 18-Фев-05 15:09 
берешь создаешь скрипт а-ля вот так:
------ begin --------------------------------
#!/bin/sh
# скрипт пофайлового сохранения пришедших писем
if [ -n "$1" ]
then
   BOXNAME="$1"
else
   BOXNAME='unknown'
fi
PREFIX='mymail'
SUFFIX='0'
MAILPATH='/tmp/mymail'
while [ -f ${MAILPATH}/${PREFIX}.${BOXNAME}.${SUFFIX} ]
do
    SUFFIX=`expr $SUFFIX + 1`
done
cat > ${MAILPATH}/${PREFIX}.${BOXNAME}.${SUFFIX}
------- end ------------------------------------------
даешь ему моду исполнения а-ля chmod 755 и кладешь куданить а-ля /usr/local/bin/savemail.sh.
Суешь его в алиасы:
file /etc/mail/aliases:
...
myaddr1: "| /bin/sh /usr/local/bin/savemail.sh myaddr1"
myaddr2: "| /bin/sh /usr/local/bin/savemail.sh myaddr2"
myaddr3: "| /bin/sh /usr/local/bin/savemail.sh myaddr3"
...
Гришь newaliases.
В директории $MAILPATH из скрипта выше получаешь все локально принятые на адреса myaddr1, myaddr2, myaddr3... письма пофайлово (1 письмо в 1 файле) в виде файликов с именами а-ля mymail.myaddr1.0, mymail.myaddr1.1 и т.д.
И нафиг тот геморр с перлом???
Хотя, конечно, пардон, вкусы у всех разные...

"скрипт переноса почты"
Отправлено slv , 18-Фев-05 15:53 
>И нафиг тот геморр с перлом???
>Хотя, конечно, пардон, вкусы у всех разные...

Дело в том что примеры переноса почты это только часть моей проги. Она довольно сложна, что делать ее полностью на шеле, по крайней мере для меня сложно. И к тому же мне надо только из одного ящика перемещать только в определенный файл. Дело в том что мой inbox - это ящик куда сваливаются все письма проходящие через MTA. А скрипт будет раскладывать эти письма в заданный файл, пока не наступит например смена числа месяца.


"скрипт переноса почты"
Отправлено slv , 18-Фев-05 16:01 
Да, еще, мне нужно не копирование, а именно перемещение!

"скрипт переноса почты"
Отправлено slv , 21-Фев-05 09:58 
Может кто еще что-нибудь посоветует?

"скрипт переноса почты"
Отправлено nordic , 21-Фев-05 12:14 
>Может кто еще что-нибудь посоветует?


А в сторону procmail не пробовал смотреть?
Или я чего то не понял и он не подходит?


"скрипт переноса почты"
Отправлено slv , 21-Фев-05 12:28 
>А в сторону procmail не пробовал смотреть?
>Или я чего то не понял и он не подходит?

Нет, его не рассматривал. А как его в данном случае можно применить.
Мне вообще бы кто-нить объяснил почему не катит:
qx "echo -e 's 1 $OutBox\n d 1\nq\n'|mail -f $Inbox";


"скрипт переноса почты"
Отправлено nordic , 21-Фев-05 13:28 
>>А в сторону procmail не пробовал смотреть?
>>Или я чего то не понял и он не подходит?
>
>Нет, его не рассматривал. А как его в данном случае можно применить.
>
>Мне вообще бы кто-нить объяснил почему не катит:
>qx "echo -e 's 1 $OutBox\n d 1\nq\n'|mail -f $Inbox";


#cat .procmailrc
LOGFILE=/path2log/log
INCLUDERC=/path2cfg/rc.INSCRIPT

#cat rc.INSCRIPT
:0 c
*
| /path/myscript.pl


И не забываем про sendmail

cat sendmail.mc | grep procmail
FEATURE(local_procmail)dnl
MAILER(procmail)dnl

Вообще линки по procmail  вот (к примеру):
man: http://www.sendmail.by.ru/tools/procmail/procmail.htm
examples: http://www.freebsd.org/doc/ru_RU.KOI8-R/books/handbook/mail-...

;)


"скрипт переноса почты"
Отправлено Nikolaev D. , 21-Фев-05 21:52 
>Да, еще, мне нужно не копирование, а именно перемещение!

а алиасом на другого пользователя нельзя сделать ?


"скрипт переноса почты"
Отправлено slv , 22-Фев-05 07:04 
>>Да, еще, мне нужно не копирование, а именно перемещение!
>
>а алиасом на другого пользователя нельзя сделать ?

Нельзя т.к. OutBox это не почтовый ящик, это файл, который совсем не в /var/mail находится , к тому же его имя постояннно меняется. Да и Inbox не резиновый, скопированные из него сообщения надо удалять, поэтому и прошу перенос почты.