On 02.06.11 23:44, Goncharov Yuri wrote:
Спасибо большое за комментарии
Да я наверное был не до конца точен. Прошу прощение. Задача быстрее
скормить MTA, все остальное уже не так важно и регулируется успешно.
Независимо от способа вливания в МТА, просто надо использовать
queue_only = yes
Однако, вливать в МТА нужно не одно письмо, а N писем по M адресатов в
каждом.
Мой скриптик, который эрзац-bulk_mailer, приложен. Главная часть в нём:
[ "$1" = "debug" ] && echo "==> $MSG"
RCPT_LIST=''
NUMRCPT=$MAXRCPT
for RCPT in `cat ${MSG%.eml}.lst | sort -t@ -k2`; do
[ "$RCPT_LIST" = "" ] \
&& RCPT_LIST="$RCPT" \
|| RCPT_LIST="$RCPT_LIST,$RCPT"
NUMRCPT=$((NUMRCPT - 1))
if [ $NUMRCPT = 0 ]; then
cat $MSG | /usr/bin/sendmail "$RCPT_LIST"
[ "$1" = "debug" ] && echo "$RCPT_LIST"
RCPT_LIST=''
NUMRCPT=$MAXRCPT
fi
done
if [ "$RCPT_LIST" != "" ]; then
cat $MSG | /usr/bin/sendmail "$RCPT_LIST"
[ "$1" = "debug" ] && echo "$RCPT_LIST"
fi
mv $MSG ${MSG%.eml}.lst $SENT
done
Здесь file.eml - тело письма со всеми заголовками, file.lst - список
адресов, на которые это письмо надо отправить.
#! /bin/sh
MSGDIR="/path/to/my/spool"
LSTDIR="/path/to/another/spool"
SENT="$MSGDIR/.SENT"
LOCK="$MSGDIR/.LOCK"
DOMAIN="domain.for.bulkmailer.tld"
MAXRCPT="10"
OWNER="[email protected]"
REPLY="[email protected]"
FROM="[email protected]"
cd $MSGDIR
mv $LSTDIR/{automatic,periodic,single}/* .
have_any_files=`ls -1 | wc -l`
[ "$have_any_files" = 0 ] && exit
[ -f "$LOCK" ] && exit
touch "$LOCK"
[ -d "$SENT" ] || mkdir "$SENT"
for MSG in *.eml; do
if [ ! -f ${MSG%.eml}.lst ]; then
grep '^To:.*<.*>' $MSG | head -1 | sed 's,^.*<\(.*\)>.*$,<\1>,' >
${MSG%.eml}.lst
fi
sed \
-e '/^$/d' \
-e '/^[[:space:]]*$/d' \
-e 's/^[[:space:]]*//' \
-e 's/[[:space:]]*$//' \
-e 's/^\([^<]\)/\1/' \
-e 's/\([^>]\)$/\1/' \
< ${MSG%.eml}.lst \
> ${MSG%.eml}.lst.tmp \
&& mv ${MSG%.eml}.lst.tmp ${MSG%.eml}.lst
[ "$1" = "debug" ] && echo "==> $MSG"
RCPT_LIST=''
NUMRCPT=$MAXRCPT
for RCPT in `cat ${MSG%.eml}.lst | sed 's/@/ /' | sort -k2 | sed 's/ /@/'`; do
[ "$RCPT_LIST" = "" ] && RCPT_LIST="$RCPT" || RCPT_LIST="$RCPT_LIST,$RCPT"
NUMRCPT=$((NUMRCPT - 1))
if [ $NUMRCPT = 0 ]; then
cat $MSG | /usr/bin/sendmail "$RCPT_LIST"
[ "$1" = "debug" ] && echo "$RCPT_LIST"
RCPT_LIST=''
NUMRCPT=$MAXRCPT
fi
done
if [ "$RCPT_LIST" != "" ]; then
cat $MSG | /usr/bin/sendmail "$RCPT_LIST"
[ "$1" = "debug" ] && echo "$RCPT_LIST"
fi
mv $MSG ${MSG%.eml}.lst $SENT
# bulk_mailer \
# -v \
# -domain "$DOMAIN" \
# -maxrcpts "$MAXRCPT" \
# -owner "$OWNER" \
# +reply-to "$REPLY" \
# "$FROM" \
# ${MSG%.eml}.lst \
# < $MSG \
# && mv $MSG ${MSG%.eml}.lst $SENT
done
rm "$LOCK"
_______________________________________________
Exim-users mailing list
[email protected]
http://mailground.net/mailman/listinfo/exim-users