We have a slightly unusual setup in that we pipe messages via SpamAssassin just before delivery using the aliases:

    | smapc -u <username> | dbmail-smtp -u <username>

but I think the problem we have found will occur with any locally piped message.

We recently had a single message that was about 10MB in size and it was delivered to 50 or so users. The way forward.c functions in the case of a pipe is to open one pipe for each recipient, then read the input stream and write it to each pipe. In this case it opens up 50 spamc and 50 dbmail-smtp processes. In processing the 10MB message, the machine (a reasonably powerful one) almost died.

Limiting max recipient and/or limiting message size is not really an option, so we are looking for other solutions. Especially solutions that are likely to be included in the dbmail code, so we do not have to maintain a patch.

What we are thinking of is either writing the message to a temporary file, then sending to the pipes sequentially, or writing to a temp table in the database, and doing the same.

We would appreciate any suggestions as to the best approach, and the approach most likely to be incorporated in dbmail.





----------------------------------------------------------------
Philip Warner                    |     __---_____
Albatross Consulting Pty. Ltd.   |----/       -  \
(A.B.N. 75 008 659 498)          |          /(@)   ______---_
Tel: (+61) 0500 83 82 81         |                 _________  \
Fax: (+61) 03 5330 3172          |                 ___________ |
Http://www.rhyme.com.au          |                /           \|
                                 |    --________--
PGP key available upon request,  |  /
and from pgp5.ai.mit.edu:11371   |/

Reply via email to