Hi, I've read at least one e-mail on this list about making delivered-to in lmtpd optional, but now I need this too, so I made a patch. The default remains as is now (enabled). Rationale: I would like to dsync users and I have catchall POP mailboxes (meaning: a single mailbox gets the mails for a lot of e-mail addresses). If I deliver the e-mails to Dovecot's lmtpd as the original RCPT TO, the Delivered-To header can be used for the POP client to sort the messages on their side to the correct mailbox, but because Dovecot sees this as a new user, it adds it to the replicator.db. Now imagine a single mailbox with thousands of e-mail addresses, this will make thousands of entries in replicator.db, all of which Dovecot would like to replicate independently... If I deliver to the mailbox uid, Dovecot dsync will work right (only one user will be added, no matter how many different e-mail addresses end up in this mailbox), but the Delivered-To will contain the uid, so the user can't use that to sort the messages into their final destination on their side. So the solution here is that I disable the addition of Delivered-To header in Dovecot (because it doesn't know what is the original address) and add it in an upper layer, so during the lmtp transaction, the message will already contain the right value. Currently Dovecot adds another Delivered-To line, which confuses the clients. Please add this feature to Dovecot. Thanks, -------------- next part -------------- diff -r e3640ccaa76d doc/example-config/conf.d/20-lmtp.conf --- a/doc/example-config/conf.d/20-lmtp.conf Sat Jan 10 04:32:42 2015 +0200 +++ b/doc/example-config/conf.d/20-lmtp.conf Tue Jan 13 11:29:20 2015 +0100 @@ -13,8 +13,11 @@ # Verify quota before replying to RCPT TO. This adds a small overhead. #lmtp_rcpt_check_quota = no +# Insert Delivered-To header to the messages, delivered through LMTP. +#lmtp_add_delivered_to = yes + protocol lmtp { # Space separated list of plugins to load (default is global mail_plugins). #mail_plugins = $mail_plugins } - \ No newline at end of file + diff -r e3640ccaa76d src/lmtp/commands.c --- a/src/lmtp/commands.c Sat Jan 10 04:32:42 2015 +0200 +++ b/src/lmtp/commands.c Tue Jan 13 11:29:20 2015 +0100 @@ -996,7 +996,7 @@ if (array_count(&client->state.rcpt_to) > 0) { str_printfa(str, "Return-Path: <%s>\r\n", client->state.mail_from); - if (rcpt_to != NULL) + if (rcpt_to != NULL && client->lmtp_set->lmtp_add_delivered_to) str_printfa(str, "Delivered-To: %s\r\n", rcpt_to); } diff -r e3640ccaa76d src/lmtp/lmtp-settings.c --- a/src/lmtp/lmtp-settings.c Sat Jan 10 04:32:42 2015 +0200 +++ b/src/lmtp/lmtp-settings.c Tue Jan 13 11:29:20 2015 +0100 @@ -60,6 +60,7 @@ DEF(SET_BOOL, lmtp_proxy), DEF(SET_BOOL, lmtp_save_to_detail_mailbox), DEF(SET_BOOL, lmtp_rcpt_check_quota), + DEF(SET_BOOL, lmtp_add_delivered_to), DEF(SET_STR, lmtp_address_translate), DEF(SET_STR_VARS, login_greeting), DEF(SET_STR, login_trusted_networks), @@ -71,6 +72,7 @@ .lmtp_proxy = FALSE, .lmtp_save_to_detail_mailbox = FALSE, .lmtp_rcpt_check_quota = FALSE, + .lmtp_add_delivered_to = TRUE, .lmtp_address_translate = "", .login_greeting = PACKAGE_NAME" ready.", .login_trusted_networks = "" diff -r e3640ccaa76d src/lmtp/lmtp-settings.h --- a/src/lmtp/lmtp-settings.h Sat Jan 10 04:32:42 2015 +0200 +++ b/src/lmtp/lmtp-settings.h Tue Jan 13 11:29:20 2015 +0100 @@ -8,6 +8,7 @@ bool lmtp_proxy; bool lmtp_save_to_detail_mailbox; bool lmtp_rcpt_check_quota; + bool lmtp_add_delivered_to; const char *lmtp_address_translate; const char *login_greeting; const char *login_trusted_networks;