Ubuntu

Dovecot 不被 Postfix 用作 LDA

  • June 9, 2015

我嘗試使用 Postfix、Dovecot 和 LDAP 在 Ubuntu 上設置郵件伺服器。到目前為止,我可以使用 Postfix 發送和接收郵件,並且可以使用 LDAP 使用者通過 telnet(埠 143)連接到 Dovecot。

作為下一步,我想按照 R. Hildebrandt 和 PB Koetter 的 Postfix 一書中的建議將 Dovecot 配置為我的 LDA。到目前為止,Postfix 嘗試使用本地守護程序將郵件傳遞給本地收件人。

到目前為止,我配置了以下內容(實際域由example.com替換):

在/etc/dovecot/conf.d/15-lda.conf中啟動 dovecot 傳遞:

protocol lda {
 postmaster_address = postmaster@example.com
}

service auth {
 unix_listener auth-master {
   mode = 0600
   user = vmail
 }
}

在/etc/postfix/master.cf中設置 dovecot :

dovecot   unix  -       n       n       -       -       pipe
 flags=ODRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -e -f ${sender} -d ${recipient}

在/etc/postfix/main.cf中配置虛擬傳輸:

virtual_transport = dovecot
dovecot_destination_recipient_limit = 1

當我發出命令時,echo foo | /usr/sbin/sendmail -f ttester@dtvvolleyball.de ttester@dtvvolleyball.de我收到以下日誌輸出:

postfix/qmgr[25582]: 2AA0060E36: from=<ttester@example.com>, size=272, nrcpt=1 (queue active)
postfix/local[26102]: 2AA0060E36: to=<ttester@example.com>, relay=local, delay=0.01, delays=0.01/0/0/0, dsn=5.1.1, status=bounced (unknown user: "ttester")

使用者ttester存在於 LDAP 樹中並且可以被 Dovecot 找到。例如,如果我deliver手動發出命令,則會發送郵件。但是,僅當 a指定域時:

/usr/lib/dovecot/deliver -e -f ttester@example.com -d ttester

總結一下這個問題,我懷疑由於某種原因 Postfix 沒有將傳遞委託給 Dovecot。非常感謝任何幫助。

提前致謝!

這是postconf -n產生的結果:

alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
append_dot_mydomain = no
biff = no
config_directory = /etc/postfix
inet_interfaces = all
mailbox_command = procmail -a "$EXTENSION"
mailbox_size_limit = 0
mydestination = $mydomain, $myhostname, localhost, localhost.$mydomain
myhostname = mail.example.com
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
myorigin = /etc/mailname
readme_directory = no
recipient_delimiter = +
relayhost =
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
smtpd_data_restrictions = reject_multi_recipient_bounce
smtpd_helo_required = yes
smtpd_recipient_restrictions = reject_non_fqdn_recipient reject_non_fqdn_sender reject_unknown_recipient_domain reject_unknown_sender_domain permit_mynetworks reject_sender_login_mismatch reject_unauth_destination check_recipient_access hash:/etc/postfix/roleaccount_exceptions reject_multi_recipient_bounce reject_non_fqdn_helo_hostname reject_invalid_helo_hostname check_helo_access pcre:/etc/postfix/helo_checks check_sender_mx_access cidr:/etc/postfix/bogus_mx permit
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
smtpd_tls_cert_file = /etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file = /etc/ssl/private/ssl-cert-snakeoil.key
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_use_tls = yes
virtual_transport = dovecot

Postfix 將使用地址類來確定發送電子郵件的域類及其傳輸方式。

根據您的postconf輸出,$domain/example.com列在 中mydestination,因此它將使用本地地址類並使用$local_transport 參數 (run postconf local_transport) 來傳遞電子郵件。

這就是virtual_transport後綴忽略的原因。建議的解決方案是從 mydestination 中刪除 $mydomain 並將其放入virtual_mailbox_domains.

引用自:https://serverfault.com/questions/696944