[Exim] SMTP does not work as right local transport

Top Page
Delete this message
Reply to this message
Author: David S. Madole
Date:  
To: exim-users
Subject: [Exim] SMTP does not work as right local transport
I've come across a strange situation that is definately the result of my
"abuse" of the Exim configuration file, but that I think should probably be
fixed somehow anyway. Because I am doing something strange, the explanation
is somewhat lengthy, please bear with me.

I have setup DBMail (http://www.dbmail.org) for delivery using LMTP for
alternate delivery of local mail, mostly for testing and evaluation -- most
of my mail goes into maildir mailboxes. All of my mail routing is determined
by lookups in a MySQL database, principally using the redirect router in
Exim to process the results.

I wanted to have a way to selectively cause deliveries to occur into DBMail,
so I set up something like the following:

begin routers

lookup:

driver = redirect
data = ## ugly sql query here ##
qualify_preserve_domain = true
reply_transport = auto_reply
allow_filter = true
allow_fail = true
file_transport = maildir
directory_transport = dbmail

begin transports

dbmail:

driver = smtp
protocol = lmtp
hosts = 127.0.0.1
allow_localhost = true

And then put addresses of the form /local_part@domain/ into the database
where I wanted DBMail to be used and setup DBMail to recognize addresses of
that form for delivery.

What I found during delivery is that the delivery process would hang and
eventually timeout after RCPT TO:

It turns out that the DBMail LMTP agent relies on the server supporting
pipelining (which is required by the LMTP spec) but that Exim pipelining was
not working. With a bit of digging, I determined that the SMTP transport was
running as a local delivery (apparently as a result of being triggered
through directory_transport), but the regex's that are used for searching
for the PIPELINING response to LHLO are not initialized in deliver.c until
after local deliveries are already processed (but before remote deliveries).

So I know the problem, but I don't know the best solution:

1. Stop doing silly things like using SMTP for a local transport. Although
is it really that silly to consider the LMTP case a local transport?

2. The SMTP transport should always run as remote regardless of how/what
router triggered it?

3. The regex's, including regex_PIPELINING shoud be initialized earlier, so
that SMTP works right as either local or remote?

4. Something entirely different?

I have temporarily worked around the issue with solution #3, but any input
would be appreciated.

Thanks,
David




____________________________________________________________________________
This message is spam and virus free. Filtering solutions by http://omd3.com
Expert computer system support and development by http://baysidenetworks.com