Sebastian Arcus
2013-May-20  15:12 UTC
[Dovecot] Sieve/pigeonhole with Exim and Dovecot LDA
I am trying to configure my Dovecot installation to provide 
Vacation/Out-of-the-office emails using the Sieve plugin. My setup is a 
little bit peculiar:
     Internet                           Internet
        |                                  ^
        V                                  |
   Provider's POP3 server         Provider's SMTP server
        |                                  ^
        V                                  |    --------------
     getmail                               |     my server
        |                                  |
        V                                  |
   Dovecot LDA ---> Sieve/vacation -----> Exim
        |
        V
     Dovecot                                     my server
                                               ---------------
Sorry for the ASCII art above - I thought it would be quicker than 
trying to explain.
The trouble I'm having is getting the Dovecot LDA to send successfully 
through the local exim instance out-of-office replies back to the 
provider's smtp server - when receiving fresh email from the provider 
(through getmail). Dovecot LDA tries to send the replies - but Exim 
freezes them because they don't contain the sender data in the format 
Exim wants it. Exim can either receive sender info:
1. On the command line, after the "-f" command line switch (but only 
when called by root or other users passed under "trusted_users" in 
exim.conf).
2. In the header of the email - in the "From:" field - but only, 
apparently, if it was called with the "-t" switch. Full exim command 
line documentation here: 
http://www.exim.org/exim-html-current/doc/html/spec_html/ch-the_exim_command_line.html
I can't figure out what command line options the Dovecot LDA is using 
when calling exim. I also couldn't find a way to get Dovecot LDA to pass 
extra options to exim, when trying to send email. The exim log has the 
following:
2013-05-20 15:35:15 1UeRBB-0001xc-Ar Frozen (message created with -f <>)
I've inspected the frozen message - and it has the correct sender in the 
"From:" field - but it seems that exim isn't using that, because
it
wasn't called with the "-t" option.
In dovecot.conf, I have the following for Dovecot LDA and sieve:
protocols = imap sieve
protocol lda {
   log_path = /var/log/dovecot/dovecot-deliver.log
   info_log_path = /var/log/dovecot/dovecot-deliver-info.log
   postmaster_address = admin at mydomain.co.uk
   hostname = mydomain.co.uk
   mail_plugins = sieve
   mail_plugin_dir = /usr/lib/dovecot
   sendmail_path = /usr/sbin/exim
}
service managesieve-login {
    inet_listener sieve {
      port = 4190
    }
}
plugin {
    sieve = ~/.dovecot.sieve
    sieve_dir = ~/sieve
}
Dovecot LDA is called by getmail using the vmail user - and using the 
same user it is trying to call exim to deliver the out-of-office replies.
I'm using Dovecot 2.2.1 with pigeonhole 0.4.0.
I can post the rest of dovecot.conf if it would help. I've read through 
the stuff at dovecot.org - but all the Dovecot LDA and exim info refers 
to Exim passing email to Dovecot using Dovecot LDA - not Dovecot LDA 
sending email out using Exim.
Sebastian Arcus
2013-May-20  16:02 UTC
[Dovecot] Sieve/pigeonhole with Exim and Dovecot LDA
On 20/05/13 16:12, Sebastian Arcus wrote:> I am trying to configure my Dovecot installation to provide > Vacation/Out-of-the-office emails using the Sieve plugin. My setup is a > little bit peculiar: > > > Internet Internet > | ^ > V | > Provider's POP3 server Provider's SMTP server > | ^ > V | -------------- > getmail | my server > | | > V | > Dovecot LDA ---> Sieve/vacation -----> Exim > | > V > Dovecot my server > --------------- > > > Sorry for the ASCII art above - I thought it would be quicker than > trying to explain. > > The trouble I'm having is getting the Dovecot LDA to send successfully > through the local exim instance out-of-office replies back to the > provider's smtp server - when receiving fresh email from the provider > (through getmail). Dovecot LDA tries to send the replies - but Exim > freezes them because they don't contain the sender data in the format > Exim wants it. Exim can either receive sender info: > > 1. On the command line, after the "-f" command line switch (but only > when called by root or other users passed under "trusted_users" in > exim.conf). > 2. In the header of the email - in the "From:" field - but only, > apparently, if it was called with the "-t" switch. Full exim command > line documentation here: > http://www.exim.org/exim-html-current/doc/html/spec_html/ch-the_exim_command_line.html > > > I can't figure out what command line options the Dovecot LDA is using > when calling exim. I also couldn't find a way to get Dovecot LDA to pass > extra options to exim, when trying to send email. The exim log has the > following: > > 2013-05-20 15:35:15 1UeRBB-0001xc-Ar Frozen (message created with -f <>) > > I've inspected the frozen message - and it has the correct sender in the > "From:" field - but it seems that exim isn't using that, because it > wasn't called with the "-t" option. > > In dovecot.conf, I have the following for Dovecot LDA and sieve: > > protocols = imap sieve > > protocol lda { > log_path = /var/log/dovecot/dovecot-deliver.log > info_log_path = /var/log/dovecot/dovecot-deliver-info.log > postmaster_address = admin at mydomain.co.uk > hostname = mydomain.co.uk > mail_plugins = sieve > mail_plugin_dir = /usr/lib/dovecot > sendmail_path = /usr/sbin/exim > } > > service managesieve-login { > inet_listener sieve { > port = 4190 > } > } > > plugin { > sieve = ~/.dovecot.sieve > sieve_dir = ~/sieve > } > > Dovecot LDA is called by getmail using the vmail user - and using the > same user it is trying to call exim to deliver the out-of-office replies. > > I'm using Dovecot 2.2.1 with pigeonhole 0.4.0. > > I can post the rest of dovecot.conf if it would help. I've read through > the stuff at dovecot.org - but all the Dovecot LDA and exim info refers > to Exim passing email to Dovecot using Dovecot LDA - not Dovecot LDA > sending email out using Exim.I have done a bit more testing, and it seems Dovecot LDA uses the following command options when sending out email through Exim: exim -i -f <> -- recipient at address.com The problem with the above is that it sets an empty address for the "Sender" field in the message envelope. The message "From" header is set correctly - but the envelope "Sender" field is empty. As I use exim in smart relay mode, exim can only use the "Sender" field from the envelope to authenticate against the provider's SMTP server (Exim doesn't seem to have any variable expansion for the "From" field in the header to be used during SMTP authentication) - thus the authentication fails and the message can't go away.