Problem solved! Finally it's not related to dovecot but to a misconfiguration of my ldap_table in postfix.
So when my auto-reply message was send to the original sender, postfix did a ldap query that did not take the domain part into account. My original ldap_table was: server_host = ldap.example.com serverport = 389 bind = no version = 3 search_base = ou=People,dc=example,dc=com query_filter = (mailLocalAddress=%u) result_attribute = mailRoutingAddress start_tls = yes The solution was to modify my search base with %2 instead of example. Now when postfix do a query with another domain name, there's no result because the search base doesn't exist. Destination is not considered as local and forwarded to my relay host. Bellow the update version of my ldap_table: server_host = ldap.example.com serverport = 389 bind = no version = 3 search_base = ou=People,dc=%2,dc=com query_filter = (mailLocalAddress=%u) result_attribute = mailRoutingAddress start_tls = yes Le mar. 4 déc. 2018 à 16:16, fins <svin...@gmail.com> a écrit : > After some additional research and testing, it seems that my vacation > auto-reply is working when the sender doesn't have the same username (%n) > as a local account on the recipient imap server. > > If t...@xyz.com sends an email to te...@example.com, the vacation > auto-reply is triggered but delivered to the wrong mailbox. > > Suppose I have an account t...@example.com on my imap server, this > account has the same %n (test) as the sender address. > > In this case the vacation auto-reply is delivered locally to the > t...@example.com account instead of t...@example.xyz > > If I delete the t...@example.com account from my imap server then the > vacation auto-reply is send through my relayhost and delivered to original > sender as expected. > > Now I need to figure out how to solve this problem. > > Le lun. 3 déc. 2018 à 16:07, fins <svin...@gmail.com> a écrit : > >> Hello, >> >> >> I have a complete Postfix + Dovecot + openLDAP setup almost working, the >> only issue I have is the vacation script auto-reply that doesn't work >> properly. >> >> If I send an email to a user with the vacation filter enabled, the >> auto-reply is send to a local recipient with the same account name. >> >> So for example if I send a mail from t...@xyz.com to t...@example.com, >> the auto-reply is received on the t...@example.com address instead of >> the t...@xyz.com who's the original sender. >> >> Here's a log file: >> >> >> Dec 3 13:52:48 imap dovecot: lda(t...@example.com): Debug: sieve: >> executing script from /var/mail/example.com/test/.dovecot.svbin >> Dec 3 13:52:48 imap dovecot: lda(t...@example.com): sieve: msgid=< >> dovecot-sieve-1543841568-83631...@imap.example.com>: discarding vacation >> response to auto-submitted message from <MAILER-DAEMON> >> Dec 3 13:52:48 imap dovecot: lda(t...@example.com): sieve: msgid=< >> dovecot-sieve-1543841568-83631...@imap.example.com>: stored mail into >> mailbox 'INBOX' >> Dec 3 13:52:48 imap postfix/pipe[6663]: D835A300E05: to=< >> t...@example.com>, orig_to=<t...@xyz.com>, relay=dovecot, delay=0.1, >> delays=0.03/0.01/0/0.06, dsn=2.0.0, status=sent (delivered via dovecot >> service) >> >> >> Can somebody help with this issue and/or point where to go for debugging? >> >> >> Please find my dovecot configuration bellow: >> >> >> >> dovecot -n >>> # 2.2.10: /etc/dovecot/dovecot.conf >>> # OS: Linux 3.10.0-862.11.6.el7.x86_64 x86_64 CentOS Linux release 7.5.1804 >>> (Core) xfs >>> auth_debug = yes >>> auth_mechanisms = plain login >>> auth_verbose = yes >>> lda_mailbox_autocreate = yes >>> lda_mailbox_autosubscribe = yes >>> mail_debug = yes >>> mail_gid = mail >>> mail_home = /var/mail/%d/%n >>> mail_location = maildir:/var/mail/%d/%n/Maildir >>> mail_plugins = " quota" >>> mail_uid = vmail >>> 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 >>> mbox_write_locks = fcntl >>> 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 = /etc/dovecot/dovecot-ldap.conf.ext >>> driver = ldap >>> } >>> plugin { >>> quota = maildir:User quota >>> quota_grace = 10%% >>> quota_rule2 = Trash:storage=+100M >>> quota_status_nouser = DUNNO >>> quota_status_overquota = 552 5.2.2 Mailbox is full >>> quota_status_success = DUNNO >>> quota_warning = storage=95%% quota-warning 95 %u it >>> quota_warning2 = storage=80%% quota-warning 80 %u it >>> sieve = ~/.dovecot.sieve >>> sieve_dir = ~/sieve >>> } >>> protocols = imap pop3 lmtp sieve >>> service auth { >>> unix_listener /var/spool/postfix/private/auth { >>> group = postfix >>> mode = 0666 >>> user = postfix >>> } >>> unix_listener auth-userdb { >>> group = mail >>> mode = 0600 >>> user = vmail >>> } >>> } >>> service imap-login { >>> inet_listener imap { >>> port = 0 >>> } >>> } >>> service managesieve-login { >>> inet_listener sieve { >>> port = 4190 >>> } >>> } >>> service pop3-login { >>> inet_listener pop3 { >>> port = 0 >>> } >>> inet_listener pop3s { >>> port = 0 >>> } >>> } >>> service quota-status { >>> client_limit = 1 >>> executable = quota-status -p postfix >>> inet_listener { >>> port = 12340 >>> } >>> } >>> service quota-warning { >>> executable = script /usr/local/bin/quota-warning.sh >>> unix_listener quota-warning { >>> user = vmail >>> } >>> user = vmail >>> } >>> ssl = required >>> ssl_cert = </etc/pki/tls/certs/imap.example.com.crt >>> ssl_key = </etc/pki/tls/private/imap.example.com.key >>> userdb { >>> args = /etc/dovecot/dovecot-ldap.conf.ext >>> driver = ldap >>> } >>> protocol lda { >>> mail_plugins = " quota sieve" >>> } >>> protocol imap { >>> mail_plugins = " quota imap_quota" >>> } >>> >>> >> >> dovecot-ldap.conf.ext >> >> >> hosts = example.com >>> base = ou=People,dc=example,dc=com >>> ldap_version = 3 >>> auth_bind = yes >>> user_filter = (&(objectClass=posixAccount)(uid=%n)) >>> pass_filter = (&(objectClass=posixAccount)(uid=%n)) >>> >>> user_attrs = \ >>> mailRoutingAddress=user, \ >>> =uid=vmail, \ >>> =gid=mail, \ >>> =home=/var/mail/%d/%n, \ >>> =quota_rule=*:bytes=%{ldap:departmentNumber} >>> >>> >>> pass_attrs= mailRoutingAddress=user >>> >>> tls = yes >>> >> >> My vacation script: >> >> >> require ["date","relational","vacation"]; >>> # rule:[Vacation] >>> if allof (currentdate :zone "+0100" :value "ge" "iso8601" >>> "2018-12-02T02:00:00+01:00", currentdate :zone "+0100" :value "le" >>> "iso8601" "2018-12-24T04:00:00+01:00") >>> { >>> vacation :addresses "t...@example.com" :subject "Away" "I'm away"; >>> } >>> >> >> >>