[exim] Running out of quota when using an external LDA: gett…

Top Page
Delete this message
Reply to this message
Author: Mike Brudenell
Date:  
To: exim-users
Subject: [exim] Running out of quota when using an external LDA: getting a "nice" bounce message
Greetings -

Currently we are using Sendmail as out MTA and the UW IMAP server for
IMAP access, along with its "tmail" local delivery agent (LDA).

We are in the throes of setting up a test system to move to using
Exim as the MTA, Dovecot as the IMAP server and Dovecot's "deliver"
as the LDA.

I have Exim configured to use "deliver" as the LDA as this gives the
benefit of updating Dovecot's index files for the mailbox as the
incoming message is delivered.

This is working fine in normal circumstances. However I am having
difficulties when the recipient has insufficient quota left free to
receive the incoming message.

As standard Dovecot's deliver, upon discovering it cannot append the
incoming message because of quota issues, immediately creates an
error e-mail which it(!) e-mails back to the sender. The incoming
message is discarded, I think with an exit code that tells Exim it
has been dealt with(?!).

Instead I would like to continue our current practice of deferring
delivery of the incoming message, so that Exim retries it
periodically in the the recipient frees up mailbox space.

I have amended deliver's source code to instead exit with
EX_TEMPFAIL. This successfully causes the message to be re-queued by
Exim and attempt delivery again periodically.

However if these deliveries eventually timeout the error response  
Exim sends back to the sender is the rather unhelpful
     local delivery failed: retry timeout exceeded


I would like it to instead say something about the recipient's
mailbox being full/out of quota/etc.

Is there a different return code that deliver can exit with to
indicate this to Exim?

I have already tried giving Exim the "return_output" directive, but
this does not appear to trap the output deliver generates on stdout.
I think from the Exim Specification this is because the output is
only trapped and included in the returned bounce message when the
LDA's exit code is *not* listed in temp_errors (which EX_TEMPFAIL is
by default).

Can anyone give me any help on using an external LDA and getting
messages deferred when quota runs out, *but* with a helpful error
response in the timeout bounce message that gets generated eventually?

With many thanks,
Mike Brudenell

--
The Computing Service, University of York, Heslington, York Yo10 5DD, UK
Tel:+44-1904-433811 FAX:+44-1904-433740

* Unsolicited commercial e-mail is NOT welcome at this e-mail address. *