vacation script issue
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 test@xyz.com to test@example.com, the auto-reply is received on the test@example.com address instead of the test@xyz.com who's the original sender.
Here's a log file:
Dec 3 13:52:48 imap dovecot: lda(test@example.com): Debug: sieve: executing script from /var/mail/example.com/test/.dovecot.svbin Dec 3 13:52:48 imap dovecot: lda(test@example.com): sieve: msgid=< dovecot-sieve-1543841568-836314-0@imap.example.com>: discarding vacation response to auto-submitted message from <MAILER-DAEMON> Dec 3 13:52:48 imap dovecot: lda(test@example.com): sieve: msgid=< dovecot-sieve-1543841568-836314-0@imap.example.com>: stored mail into mailbox 'INBOX' Dec 3 13:52:48 imap postfix/pipe[6663]: D835A300E05: to=<test@example.com>, orig_to=<test@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 "test@example.com" :subject "Away" "I'm away"; }
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 test@xyz.com sends an email to test2@example.com, the vacation auto-reply is triggered but delivered to the wrong mailbox.
Suppose I have an account test@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 test@example.com account instead of test@example.xyz
If I delete the test@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 <svinz82@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 test@xyz.com to test@example.com, the auto-reply is received on the test@example.com address instead of the test@xyz.com who's the original sender.
Here's a log file:
Dec 3 13:52:48 imap dovecot: lda(test@example.com): Debug: sieve: executing script from /var/mail/example.com/test/.dovecot.svbin Dec 3 13:52:48 imap dovecot: lda(test@example.com): sieve: msgid=< dovecot-sieve-1543841568-836314-0@imap.example.com>: discarding vacation response to auto-submitted message from <MAILER-DAEMON> Dec 3 13:52:48 imap dovecot: lda(test@example.com): sieve: msgid=< dovecot-sieve-1543841568-836314-0@imap.example.com>: stored mail into mailbox 'INBOX' Dec 3 13:52:48 imap postfix/pipe[6663]: D835A300E05: to=<test@example.com>, orig_to=<test@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 "test@example.com" :subject "Away" "I'm away"; }
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 <svinz82@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 test@xyz.com sends an email to test2@example.com, the vacation auto-reply is triggered but delivered to the wrong mailbox.
Suppose I have an account test@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 test@example.com account instead of test@example.xyz
If I delete the test@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 <svinz82@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 test@xyz.com to test@example.com, the auto-reply is received on the test@example.com address instead of the test@xyz.com who's the original sender.
Here's a log file:
Dec 3 13:52:48 imap dovecot: lda(test@example.com): Debug: sieve: executing script from /var/mail/example.com/test/.dovecot.svbin Dec 3 13:52:48 imap dovecot: lda(test@example.com): sieve: msgid=< dovecot-sieve-1543841568-836314-0@imap.example.com>: discarding vacation response to auto-submitted message from <MAILER-DAEMON> Dec 3 13:52:48 imap dovecot: lda(test@example.com): sieve: msgid=< dovecot-sieve-1543841568-836314-0@imap.example.com>: stored mail into mailbox 'INBOX' Dec 3 13:52:48 imap postfix/pipe[6663]: D835A300E05: to=< test@example.com>, orig_to=<test@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 "test@example.com" :subject "Away" "I'm away"; }
participants (1)
-
fins