Postfix 未将 Dovecot 用作 LDA

Postfix 未将 Dovecot 用作 LDA

我尝试使用 Postfix、Dovecot 和 LDAP 在 Ubuntu 上设置邮件服务器。到目前为止,我可以使用 Postfix 发送和接收邮件,并可以使用 LDAP 用户通过 telnet(端口 143)连接到 Dovecot。

下一步,我想按照 R. Hildebrandt 和 PB Koetter 合著的《Postfix》一书中的建议,将 Dovecot 配置为我的 LDA。到目前为止,Postfix 仍尝试使用本地守护进程将邮件发送给本地收件人。

到目前为止,我配置了以下内容(实际域被替换为示例.com):

激活 Dovecot 交付/etc/dovecot/conf.d/15-lda.conf

protocol lda {
  postmaster_address = [email protected]
}

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

在中设置 dovecot/etc/postfix/master.cf

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 [email protected] [email protected]

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

用户ttester存在于 LDAP 树中,Dovecot 可以找到它。例如,如果我deliver手动发出命令,邮件就会发送。但是,只有当不要指定域:

/usr/lib/dovecot/deliver -e -f [email protected] -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

答案1

Postfix 将使用地址类来确定哪个域类及其传输来传递电子邮件。

根据您的postconf输出,$domain/example.com在中列出mydestination,因此它将使用本地地址类并使用$local_transport 参数(运行postconf local_transport)来传递电子邮件。

这就是virtual_transport被 postfix 忽略的原因。建议的解决方案是从 mydestination 中删除 $mydomain 并将其放入virtual_mailbox_domains

相关内容