Tru Pheenix
2013-Nov-06 07:23 UTC
[Dovecot] Postfix delivers mails to maildir and not to dovecot LDA for a virtual user
Hi I have been able to setup postfix and dovecot using postgres as the backend store with virtual user maps on Ubuntu 12.04 LTS Server. I have been following instructions from here: http://wiki2.dovecot.org/HowTo/DovecotPostgresql I haven't setup postfix to use saslauthd and PAM, instead I am using dovecot for SASL authentication. Rest of the table structures and query files are the same as from the wiki. SASL authentication works correctly for SMTP POP IMAP. I am able to send emails from a mail client such as Thunderbird with SASL authentication. However I am not able to receive emails for virtual users. I cannot figure out why. System users are getting their emails in the mail box correctly. Postfix fires the mailbox_command to hand over the mail to dovecot. This is how my *mail.log* looks when I send emails from an external domain: Nov 6 06:48:21 localhost postfix/smtpd[20053]: E075280C52: clientmail-ee0-f41.google.com[74.125.83.41] Nov 6 06:48:22 localhost postfix/cleanup[20064]: E075280C52: message-id=< CAJ+V0eCU891rSzSMVbcSy4zsRUk5GUp58b70Wv_WgZxLbKuyLw at mail.gmail.com> Nov 6 06:48:22 localhost postfix/qmgr[17492]: E075280C52: from=< me at gmail.com>, size=3124, nrcpt=1 (queue active) *Nov 6 06:48:22 localhost postfix/virtual[20066]: E075280C52: to=<someone at mydomain.com <someone at mydomain.com>>, relay=virtual, delay=0.85, delays=0.7/0.02/0/0.13, dsn=2.0.0, status=sent (delivered to maildir)* Nov 6 06:48:22 localhost postfix/qmgr[17492]: E075280C52: removed Nov 6 06:48:22 localhost postfix/smtpd[20053]: disconnect from mail-ee0-f41.google.com[74.125.83.41] Postfix seems to deliver the mail to maildir instead of the home directory of the virtual user. Incase of the system user, the logs indicate that the mailbox_command was fired and I do get to see the mail in the inbox. My postfix *main.cf <http://main.cf>*: alias_database = hash:/etc/aliases alias_maps = hash:/etc/aliases append_dot_mydomain = no biff = no broken_sasl_auth_clients = yes config_directory = /etc/postfix dovecot_destination_recipient_limit = 1 inet_interfaces = all *mailbox_command = /usr/lib/dovecot/deliver -c /etc/dovecot/conf.d/01-mail-stack-delivery.conf -m "${EXTENSION}"* mailbox_size_limit = 0 mydestination = localhost, localhost.localdomain, localhost myhostname = mydomain.com mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 readme_directory = no recipient_delimiter = + relayhost smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache smtp_use_tls = yes smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu) smtpd_recipient_restrictions = reject_unknown_recipient_domain, reject_unauth_pipelining, permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination smtpd_sasl_auth_enable = yes smtpd_sasl_authenticated_header = yes smtpd_sasl_local_domain = $myhostname smtpd_sasl_path = private/dovecot-auth smtpd_sasl_security_options = noanonymous smtpd_sasl_type = dovecot smtpd_sender_restrictions = reject_unknown_sender_domain smtpd_tls_auth_only = yes smtpd_tls_cert_file = /root/certs/www.mydomain.com.pem smtpd_tls_key_file = /root/certs/www.mydomain.com.key smtpd_tls_mandatory_ciphers = medium smtpd_tls_mandatory_protocols = SSLv3, TLSv1 smtpd_tls_received_header = yes smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache smtpd_use_tls = yes tls_random_source = dev:/dev/urandom transport_maps = pgsql:/etc/postfix/transport.cf virtual_gid_maps = pgsql:/etc/postfix/gids.cf virtual_mailbox_base = /home virtual_mailbox_domains = mydomain.com *virtual_mailbox_maps = pgsql:/etc/postfix/mailboxes.cf <http://mailboxes.cf>* virtual_maps = pgsql:/etc/postfix/virtual.cf *virtual_transport = dovecot* virtual_uid_maps = pgsql:/etc/postfix/uids.cf I have included the virtual_transport parameter to indicate that dovecot is running as LDA. I have also included the pgsql query file in the virtual_mailbox_maps parameter. My *mailboxes.cf <http://mailboxes.cf> *file which points the email id of the virtual user to the appropriate mail path: user=mailreader password=secret dbname=mails table=postfix_mailboxes select_field=mailbox where_field=userid hosts=localhost My postfix *master.cf <http://master.cf>* file: smtp inet n - n - - smtpd pickup fifo n - - 60 1 pickup cleanup unix n - - - 0 cleanup qmgr fifo n - n 300 1 qmgr tlsmgr unix - - - 1000? 1 tlsmgr rewrite unix - - - - - trivial-rewrite bounce unix - - - - 0 bounce defer unix - - - - 0 bounce trace unix - - - - 0 bounce verify unix - - - - 1 verify flush unix n - - 1000? 0 flush proxymap unix - - n - - proxymap proxywrite unix - - n - 1 proxymap smtp unix - - - - - smtp relay unix - - - - - smtp showq unix n - - - - showq error unix - - - - - error retry unix - - - - - error discard unix - - - - - discard local unix - n n - - local virtual unix - n n - - virtual lmtp unix - - - - - lmtp anvil unix - - - - 1 anvil scache unix - - - - 1 scache maildrop unix - n n - - pipe flags=DRhu user=vmail argv=/usr/bin/maildrop -d ${recipient} uucp unix - n n - - pipe flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient) *dovecot unix - n n - - pipe* * flags=DRhu user=vmailuser:vmailuser argv=/usr/lib/dovecot/deliver -f* * ${sender} -d ${recipient}* ifmail unix - n n - - pipe flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient) bsmtp unix - n n - - pipe flags=Fq. user=bsmtp argv=/usr/lib/bsmtp/bsmtp -t$nexthop -f$sender $recipient scalemail-backend unix - n n - 2 pipe flags=R user=scalemail argv=/usr/lib/scalemail/bin/scalemail-store ${nexthop} ${user} ${extension} mailman unix - n n - - pipe flags=FR user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py ${nexthop} ${user} I have included the dovecot LDA service line above so that postfix can deliver to virtual users as per: http://wiki2.dovecot.org/LDA/Postfix This is my *doveconf -n* output: # 2.0.19: /etc/dovecot/dovecot.conf # OS: Linux 3.2.0-24-virtual i686 Ubuntu 12.04 LTS ext4 auth_debug = yes auth_debug_passwords = yes auth_mechanisms = plain login digest-md5 cram-md5 auth_verbose = yes mail_debug = yes *mail_location = maildir:/home/vmailuser/%d/%n/Maildir* 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 passdb { args = /etc/dovecot/dovecot-sql.conf driver = sql } plugin { sieve = ~/.dovecot.sieve sieve_dir = ~/sieve } protocols = imap pop3 sieve service auth { unix_listener /var/spool/postfix/private/dovecot-auth { group = postfix mode = 0660 user = postfix } } ssl_cert = </root/certs/www.mydomain.com.pem ssl_cipher_list ALL:!LOW:!SSLv2:ALL:!aNULL:!ADH:!eNULL:!EXP:RC4+RSA:+HIGH:+MEDIUM ssl_key = </root/certs/www.mydomain.com.key userdb { args = /etc/dovecot/dovecot-sql.conf driver = sql } verbose_ssl = yes protocol imap { imap_client_workarounds = delay-newmail mail_max_userip_connections = 10 } protocol pop3 { mail_max_userip_connections = 10 pop3_client_workarounds = outlook-no-nuls oe-ns-eoh } protocol lda { deliver_log_format = msgid=%m: %$ mail_plugins = sieve postmaster_address = postmaster quota_full_tempfail = yes rejection_reason = Your message to <%t> was automatically rejected:%n%r } I have setup *mail_location *to point to the home directory of vmailuser under which for the given domain the virtual users mail dir is created. However, the mails clearly don't seem to get delivered for the virtual user. Any help to fix this would be appreciated. Thanks! :) Regards Tru Pheenix
Tru Pheenix
2013-Nov-06 12:24 UTC
[Dovecot] Postfix delivers mails to maildir and not to dovecot LDA for a virtual user
Fixed this issue. My transport table was having a "virtual:" entry against my domain name instead of "dovecot:" Now all is working! :) On Wed, Nov 6, 2013 at 12:53 PM, Tru Pheenix <trupheenix at gmail.com> wrote:> Hi > > I have been able to setup postfix and dovecot using postgres as the > backend store with virtual user maps on Ubuntu 12.04 LTS Server. > > I have been following instructions from here: > http://wiki2.dovecot.org/HowTo/DovecotPostgresql > > I haven't setup postfix to use saslauthd and PAM, instead I am using > dovecot for SASL authentication. Rest of the table structures and query > files are the same as from the wiki. > > SASL authentication works correctly for SMTP POP IMAP. > > I am able to send emails from a mail client such as Thunderbird with SASL > authentication. > > However I am not able to receive emails for virtual users. I cannot figure > out why. System users are getting their emails in the mail box correctly. > Postfix fires the mailbox_command to hand over the mail to dovecot. > > This is how my *mail.log* looks when I send emails from an external > domain: > > Nov 6 06:48:21 localhost postfix/smtpd[20053]: E075280C52: client> mail-ee0-f41.google.com[74.125.83.41] > Nov 6 06:48:22 localhost postfix/cleanup[20064]: E075280C52: message-id=< > CAJ+V0eCU891rSzSMVbcSy4zsRUk5GUp58b70Wv_WgZxLbKuyLw at mail.gmail.com> > Nov 6 06:48:22 localhost postfix/qmgr[17492]: E075280C52: from=< > me at gmail.com>, size=3124, nrcpt=1 (queue active) > *Nov 6 06:48:22 localhost postfix/virtual[20066]: E075280C52: > to=<someone at mydomain.com <someone at mydomain.com>>, relay=virtual, > delay=0.85, delays=0.7/0.02/0/0.13, dsn=2.0.0, status=sent (delivered to > maildir)* > Nov 6 06:48:22 localhost postfix/qmgr[17492]: E075280C52: removed > Nov 6 06:48:22 localhost postfix/smtpd[20053]: disconnect from > mail-ee0-f41.google.com[74.125.83.41] > > Postfix seems to deliver the mail to maildir instead of the home directory > of the virtual user. Incase of the system user, the logs indicate that the > mailbox_command was fired and I do get to see the mail in the inbox. > > My postfix *main.cf <http://main.cf>*: > > alias_database = hash:/etc/aliases > alias_maps = hash:/etc/aliases > append_dot_mydomain = no > biff = no > broken_sasl_auth_clients = yes > config_directory = /etc/postfix > dovecot_destination_recipient_limit = 1 > inet_interfaces = all > *mailbox_command = /usr/lib/dovecot/deliver -c > /etc/dovecot/conf.d/01-mail-stack-delivery.conf -m "${EXTENSION}"* > mailbox_size_limit = 0 > mydestination = localhost, localhost.localdomain, localhost > myhostname = mydomain.com > mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 > readme_directory = no > recipient_delimiter = + > relayhost > smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache > smtp_use_tls = yes > smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu) > smtpd_recipient_restrictions = reject_unknown_recipient_domain, > reject_unauth_pipelining, permit_mynetworks, permit_sasl_authenticated, > reject_unauth_destination > smtpd_sasl_auth_enable = yes > smtpd_sasl_authenticated_header = yes > smtpd_sasl_local_domain = $myhostname > smtpd_sasl_path = private/dovecot-auth > smtpd_sasl_security_options = noanonymous > smtpd_sasl_type = dovecot > smtpd_sender_restrictions = reject_unknown_sender_domain > smtpd_tls_auth_only = yes > smtpd_tls_cert_file = /root/certs/www.mydomain.com.pem > smtpd_tls_key_file = /root/certs/www.mydomain.com.key > smtpd_tls_mandatory_ciphers = medium > smtpd_tls_mandatory_protocols = SSLv3, TLSv1 > smtpd_tls_received_header = yes > smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache > smtpd_use_tls = yes > tls_random_source = dev:/dev/urandom > transport_maps = pgsql:/etc/postfix/transport.cf > virtual_gid_maps = pgsql:/etc/postfix/gids.cf > virtual_mailbox_base = /home > virtual_mailbox_domains = mydomain.com > *virtual_mailbox_maps = pgsql:/etc/postfix/mailboxes.cf > <http://mailboxes.cf>* > virtual_maps = pgsql:/etc/postfix/virtual.cf > *virtual_transport = dovecot* > virtual_uid_maps = pgsql:/etc/postfix/uids.cf > > I have included the virtual_transport parameter to indicate that dovecot > is running as LDA. I have also included the pgsql query file in the > virtual_mailbox_maps parameter. > > My *mailboxes.cf <http://mailboxes.cf> *file which points the email id of > the virtual user to the appropriate mail path: > > user=mailreader > password=secret > dbname=mails > table=postfix_mailboxes > select_field=mailbox > where_field=userid > hosts=localhost > > My postfix *master.cf <http://master.cf>* file: > > smtp inet n - n - - smtpd > pickup fifo n - - 60 1 pickup > cleanup unix n - - - 0 cleanup > qmgr fifo n - n 300 1 qmgr > tlsmgr unix - - - 1000? 1 tlsmgr > rewrite unix - - - - - trivial-rewrite > bounce unix - - - - 0 bounce > defer unix - - - - 0 bounce > trace unix - - - - 0 bounce > verify unix - - - - 1 verify > flush unix n - - 1000? 0 flush > proxymap unix - - n - - proxymap > proxywrite unix - - n - 1 proxymap > smtp unix - - - - - smtp > relay unix - - - - - smtp > showq unix n - - - - showq > error unix - - - - - error > retry unix - - - - - error > discard unix - - - - - discard > local unix - n n - - local > virtual unix - n n - - virtual > lmtp unix - - - - - lmtp > anvil unix - - - - 1 anvil > scache unix - - - - 1 scache > maildrop unix - n n - - pipe > flags=DRhu user=vmail argv=/usr/bin/maildrop -d ${recipient} > uucp unix - n n - - pipe > flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail > ($recipient) > *dovecot unix - n n - - pipe* > * flags=DRhu user=vmailuser:vmailuser argv=/usr/lib/dovecot/deliver -f* > * ${sender} -d ${recipient}* > ifmail unix - n n - - pipe > flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient) > bsmtp unix - n n - - pipe > flags=Fq. user=bsmtp argv=/usr/lib/bsmtp/bsmtp -t$nexthop -f$sender > $recipient > scalemail-backend unix - n n - 2 pipe > flags=R user=scalemail argv=/usr/lib/scalemail/bin/scalemail-store > ${nexthop} ${user} ${extension} > mailman unix - n n - - pipe > flags=FR user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py > ${nexthop} ${user} > > I have included the dovecot LDA service line above so that postfix can > deliver to virtual users as per: http://wiki2.dovecot.org/LDA/Postfix > > This is my *doveconf -n* output: > > # 2.0.19: /etc/dovecot/dovecot.conf > # OS: Linux 3.2.0-24-virtual i686 Ubuntu 12.04 LTS ext4 > auth_debug = yes > auth_debug_passwords = yes > auth_mechanisms = plain login digest-md5 cram-md5 > auth_verbose = yes > mail_debug = yes > *mail_location = maildir:/home/vmailuser/%d/%n/Maildir* > 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 > passdb { > args = /etc/dovecot/dovecot-sql.conf > driver = sql > } > plugin { > sieve = ~/.dovecot.sieve > sieve_dir = ~/sieve > } > protocols = imap pop3 sieve > service auth { > unix_listener /var/spool/postfix/private/dovecot-auth { > group = postfix > mode = 0660 > user = postfix > } > } > ssl_cert = </root/certs/www.mydomain.com.pem > ssl_cipher_list > ALL:!LOW:!SSLv2:ALL:!aNULL:!ADH:!eNULL:!EXP:RC4+RSA:+HIGH:+MEDIUM > ssl_key = </root/certs/www.mydomain.com.key > userdb { > args = /etc/dovecot/dovecot-sql.conf > driver = sql > } > verbose_ssl = yes > protocol imap { > imap_client_workarounds = delay-newmail > mail_max_userip_connections = 10 > } > protocol pop3 { > mail_max_userip_connections = 10 > pop3_client_workarounds = outlook-no-nuls oe-ns-eoh > } > protocol lda { > deliver_log_format = msgid=%m: %$ > mail_plugins = sieve > postmaster_address = postmaster > quota_full_tempfail = yes > rejection_reason = Your message to <%t> was automatically rejected:%n%r > } > > > I have setup *mail_location *to point to the home directory of vmailuser > under which for the given domain the virtual users mail dir is created. > However, the mails clearly don't seem to get delivered for the virtual > user. > > Any help to fix this would be appreciated. Thanks! :) > > Regards > > Tru Pheenix > >