[Dovecot] Dovecot LMTP does not pass envelope recipient +detail to sieve

Greg Rivers gcr+dovecot at tharned.org
Mon Jan 6 23:27:41 EET 2014


I found this[1] thread that describes the same problem with dovecot-LDA, 
but the solution (add X-Original-To: header) has no effect with LMTP.

My sendmail LMTP configuration:
FEATURE(`local_lmtp',`[IPC]',`FILE /var/run/dovecot/lmtp')

Sendmail's address test indicates that sendmail is providing user+detail 
to LMTP (see below).  Except for this problem, dovecot, LMTP, and sieve 
are all working perfectly.  Is there something I'm missing, or is this a 
bug?

[1] http://dovecot.org/pipermail/dovecot/2012-July/136987.htm


Script started on Sun Jan  5 23:25:04 2014
$ doveconf -n
# 2.2.9: /usr/local/etc/dovecot/dovecot.conf
# OS: FreeBSD 9.2-STABLE amd64 
auth_verbose = yes
mail_debug = yes
mail_location = mdbox:~/.mdbox
mail_plugins = " quota"
managesieve_notify_capability = mailto
managesieve_sieve_capability = fileinto reject envelope encoded-character vacation subaddress comparator-i;ascii-numeric relational regex imap4flags copy include variables body enotify environment mailbox date ihave editheader vnd.dovecot.debug vnd.dovecot.duplicate imapflags notify vnd.dovecot.pipe vnd.dovecot.filter vnd.dovecot.execute
namespace inbox {
   inbox = yes
   location =
   mailbox Drafts {
     special_use = \Drafts
   }
   mailbox Junk {
     special_use = \Junk
   }
   mailbox Sent {
     special_use = \Sent
   }
   mailbox "Sent Messages" {
     special_use = \Sent
   }
   mailbox Trash {
     special_use = \Trash
   }
   prefix = 
}
passdb {
   args = %s
   driver = pam
}
plugin {
   quota = fs:%n@%{hostname} %h %Us %{pid}:
   quota_warning = storage=95%% quota-warning 95 %u
   quota_warning2 = storage=80%% quota-warning 80 %u
   sieve = ~/.dovecot.sieve
   sieve_dir = ~/sieve
   sieve_execute_bin_dir = ~/sieve/sieve-execute
   sieve_execute_socket_dir = sieve-execute
   sieve_extensions = +notify +imapflags +editheader +vnd.dovecot.duplicate +vnd.dovecot.pipe +vnd.dovecot.filter +vnd.dovecot.execute +vnd.dovecot.debug
   sieve_filter_bin_dir = ~/sieve/sieve-filter
   sieve_filter_socket_dir = sieve-filter
   sieve_global_dir = /usr/local/etc/dovecot/sieve
   sieve_max_actions = 0
   sieve_max_redirects = 16
   sieve_max_script_size = 0
   sieve_pipe_bin_dir = ~/sieve/sieve-pipe
   sieve_pipe_socket_dir = sieve-pipe
   sieve_plugins = sieve_extprograms
}
postmaster_address = postmaster at tharned.org
protocols = imap lmtp sieve
quota_full_tempfail = yes
service quota-warning {
   executable = script /usr/local/bin/quota-warning.sh
   unix_listener quota-warning {
     user = dovecot
   }
   user = dovecot
}
ssl_cert = </etc/ssl/certs/dovecot.pem
ssl_key = </etc/ssl/private/dovecot.pem
userdb {
   driver = passwd
}
verbose_proctitle = yes
protocol lmtp {
   mail_plugins = " quota sieve"
}
protocol lda {
   mail_plugins = " quota sieve"
}
protocol imap {
   mail_max_userip_connections = 100
   mail_plugins = " quota imap_quota"
}

$ sendmail -bt
ADDRESS TEST MODE (ruleset 3 NOT automatically invoked)
Enter <ruleset> <address>
> =M
mailer 0 (prog): P=/bin/sh S=EnvFromL/HdrFromL R=EnvToL/HdrToL M=0 U=-1:-1 F=9DFMeloqsu L=0 E=\n T=X-Unix/X-Unix/X-Unix r=100 A=sh -c $u
mailer 1 (*file*): P=[FILE] S=parse/parse R=parse/parse M=0 U=-1:-1 F=9DEFMPloqsu L=0 E=\n T=X-Unix/X-Unix/X-Unix r=100 A=FILE $u
mailer 2 (*include*): P=/dev/null S=parse/parse R=parse/parse M=0 U=-1:-1 F=su L=0 E=\n T=<undefined>/<undefined>/<undefined> r=100 A=INCLUDE $u
mailer 3 (local): P=[IPC] S=EnvFromSMTP/HdrFromL R=EnvToL/HdrToL M=0 U=-1:-1 F=/59:@ADFMPSXlmnqswz| L=0 E=\r\n T=DNS/RFC822/SMTP r=100 A=FILE /var/run/dovecot/lmtp
mailer 4 (smtp): P=[IPC] S=EnvFromSMTP/HdrFromSMTP R=EnvToSMTP/EnvToSMTP M=0 U=-1:-1 F=DFMXmu L=990 E=\r\n T=DNS/RFC822/SMTP r=100 A=TCP $h
mailer 5 (esmtp): P=[IPC] S=EnvFromSMTP/HdrFromSMTP R=EnvToSMTP/EnvToSMTP M=0 U=-1:-1 F=DFMXamu L=990 E=\r\n T=DNS/RFC822/SMTP r=100 A=TCP $h
mailer 6 (smtp8): P=[IPC] S=EnvFromSMTP/HdrFromSMTP R=EnvToSMTP/EnvToSMTP M=0 U=-1:-1 F=8DFMXmu L=990 E=\r\n T=DNS/RFC822/SMTP r=100 A=TCP $h
mailer 7 (dsmtp): P=[IPC] S=EnvFromSMTP/HdrFromSMTP R=EnvToSMTP/EnvToSMTP M=0 U=-1:-1 F=%DFMXamu L=990 E=\r\n T=DNS/RFC822/SMTP r=100 A=TCP $h
mailer 8 (relay): P=[IPC] S=EnvFromSMTP/HdrFromSMTP R=MasqSMTP/MasqSMTP M=0 U=-1:-1 F=8DFMXamu L=2040 E=\r\n T=DNS/RFC822/SMTP r=100 A=TCP $h
> /try local gcr+DeTaIl at tharned.org
Trying envelope recipient address gcr+DeTaIl at tharned.org for mailer local
canonify           input: gcr + DeTaIl @ tharned . org
Canonify2          input: gcr + DeTaIl < @ tharned . org >
Canonify2        returns: gcr + DeTaIl < @ tharned . org . >
canonify         returns: gcr + DeTaIl < @ tharned . org . >
2                  input: gcr + DeTaIl < @ tharned . org . >
2                returns: gcr + DeTaIl < @ tharned . org . >
EnvToL             input: gcr + DeTaIl < @ tharned . org . >
EnvToL           returns: gcr + DeTaIl
final              input: gcr + DeTaIl
final            returns: gcr + DeTaIl
Rcode = 0, addr = gcr+DeTaIl
> ^D

$ cat .dovecot.sieve
require ["envelope", "subaddress", "variables", "vnd.dovecot.debug"];
if envelope :matches "to" "*" { set "to" "${1}"; }
if envelope :user :matches "to" "*" { set "user" "${1}"; }
if envelope :detail :matches "to" "*" { set "detail" "${1}"; }
if envelope :matches "from" "*" { set "from" "${1}"; }
debug_log "EnvelopeTo=${to}, EnvelopeFrom=${from}";
debug_log "EnvelopeToUser=${user}, EnvelopeToDetail=${detail}";

$ telnet localhost smtp 
Trying 127.0.0.1... 
Connected to localhost. 
Escape character is '^]'. 
220 tharned.org ESMTP Sendmail 8.14.7/8.14.7; Sun, 5 Jan 2014 23:56:22 -0600 (CST)
mail from:<gcr at tharned.org>
250 2.1.0 <gcr at tharned.org>... Sender ok
rcpt to:<gcr+DeTaIl at tharned.org>
250 2.1.5 <gcr+DeTaIl at tharned.org>... Recipient ok
data 
354 Enter mail, end with "." on a line by itself
.
250 2.0.0 s065uMYM069381 Message accepted for delivery
quit
221 2.0.0 tharned.org closing connection
Connection closed by foreign host.

$ tail -4 .dovecot.sieve.log
sieve: info: started log at Jan 05 23:57:21.
main script: line 5: info: DEBUG: EnvelopeTo=gcr, EnvelopeFrom=gcr at tharned.org.
main script: line 9: info: DEBUG: EnvelopeToUser=gcr, EnvelopeToDetail=.
info: msgid=<201401060557.s065uMYM069381 at tharned.org>: stored mail into mailbox 'INBOX'.

$ exit
Script done on Sun Jan  5 23:57:55 2014

-- 
Greg Rivers


More information about the dovecot mailing list