Привет всем! Помогите со скриптом: Есть ящик (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
Жду ваших советов.
берешь создаешь скрипт а-ля вот так:
------ 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 и т.д.
И нафиг тот геморр с перлом???
Хотя, конечно, пардон, вкусы у всех разные...
>И нафиг тот геморр с перлом???
>Хотя, конечно, пардон, вкусы у всех разные...Дело в том что примеры переноса почты это только часть моей проги. Она довольно сложна, что делать ее полностью на шеле, по крайней мере для меня сложно. И к тому же мне надо только из одного ящика перемещать только в определенный файл. Дело в том что мой inbox - это ящик куда сваливаются все письма проходящие через MTA. А скрипт будет раскладывать эти письма в заданный файл, пока не наступит например смена числа месяца.
Да, еще, мне нужно не копирование, а именно перемещение!
Может кто еще что-нибудь посоветует?
>Может кто еще что-нибудь посоветует?
А в сторону procmail не пробовал смотреть?
Или я чего то не понял и он не подходит?
>А в сторону procmail не пробовал смотреть?
>Или я чего то не понял и он не подходит?Нет, его не рассматривал. А как его в данном случае можно применить.
Мне вообще бы кто-нить объяснил почему не катит:
qx "echo -e 's 1 $OutBox\n d 1\nq\n'|mail -f $Inbox";
>>А в сторону 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
И не забываем про sendmailcat 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-...;)
>Да, еще, мне нужно не копирование, а именно перемещение!а алиасом на другого пользователя нельзя сделать ?
>>Да, еще, мне нужно не копирование, а именно перемещение!
>
>а алиасом на другого пользователя нельзя сделать ?Нельзя т.к. OutBox это не почтовый ящик, это файл, который совсем не в /var/mail находится , к тому же его имя постояннно меняется. Да и Inbox не резиновый, скопированные из него сообщения надо удалять, поэтому и прошу перенос почты.