我对 POSTFIX 还不太熟悉。当我连接到我的 LXD 容器时,有些容器显示“/var/mail/root 中有新邮件”。由于这些收件箱没有被查阅,我想将它们重新路由到 Exchange Server(O365 服务器)上的另一个收件箱。
我使用以下参数成功配置了其他应用程序:
['smtp_enable'] = true
['smtp_address'] = "mail.external-smtp-exchange.com"
['smtp_port'] = 587
['smtp_user_name'] = "[email protected]"
['smtp_password'] = "<pwd>"
['smtp_domain'] = "subdomain.contoso.com"
['smtp_authentication'] = "login"
['smtp_enable_starttls_auto'] = true
['smtp_tls'] = false
我希望所有用户在路由邮件时使用一个单一的“noreply”地址(FROM)。因此修改/etc/aliases
如下:
mailer-daemon: postmaster
postmaster: root
nobody: root
hostmaster: root
usenet: root
news: root
webmaster: root
www: root
ftp: root
abuse: root
noc: root
security: root
root: [email protected]
然后newaliases
重新加载所有内容。
main.cf
文件内容
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no
# appending .domain is the MUA's job.
append_dot_mydomain = no
# See http://www.postfix.org/COMPATIBILITY_README.html -- default to 2 on
# fresh installs.
compatibility_level = 2
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
myhostname = core-keycloak.internal-domain.com
myorigin = /etc/mailname
mydestination = $myhostname, subdomain.contoso.com, core-keycloak, localhost.localdomain, localhost
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
relayhost = [mail.external-smtp-exchange.com]:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/smtp.sasl
smtp_sasl_security_options = noanonymous
smtp_use_tls = no
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
inet_interfaces = all
inet_protocols = all
### Tried also parameters below without any improvement
smtp_generic_maps = regexp:/etc/postfix/smtp_generic_maps
sender_canonical_classes = envelope_sender, header_sender
sender_canonical_maps = regexp:/etc/postfix/sender_canonical_maps
smtp_header_checks = regexp:/etc/postfix/smtp_header_checks
如果没有最后 4 个参数覆盖 FROM 电子邮件,我会得到以下输出:
Jun 8 13:23:21 core-keycloak postfix/smtp[18264]: 86C822CE8A: to=<[email protected]>, relay=mail.external-smtp-exchange.com[<SMTP-IP>]:587, delay=2995, delays=2989/0.01/5.3/0, dsn=4.7.3, status=deferred (SASL authentication failed; server mail.external-smtp-exchange.com[<SMTP-IP>] said: 535 5.7.3 Authentication unsuccessful)
Jun 8 13:23:23 core-keycloak postfix/pickup[18261]: 413752CEAA: uid=0 from=<[email protected]>
Jun 8 13:23:23 core-keycloak postfix/cleanup[18271]: 413752CEAA: message-id=<[email protected]>
Jun 8 13:23:23 core-keycloak postfix/qmgr[18262]: 413752CEAA: from=<[email protected]>, size=408, nrcpt=1 (queue active)
使用最后 4 个参数覆盖 FROM 电子邮件,我得到以下输出:
Jun 8 13:25:23 core-keycloak postfix/pickup[18334]: 68B772CEB0: uid=0 from=<[email protected]>
Jun 8 13:25:23 core-keycloak postfix/cleanup[18346]: 68B772CEB0: message-id=<[email protected]>
Jun 8 13:25:23 core-keycloak postfix/qmgr[18335]: 68B772CEB0: from=<[email protected]>, size=408, nrcpt=1 (queue active)
在两种情况下,我都没有在 Exchange 收件箱中收到任何消息。
任何帮助都将受到欢迎。
编辑
我的密码中有特殊字符,如!([])
等等......
答案1
由于您的中继未指定原因,“SASL 身份验证失败”可能表示不同的事情。
这可能意味着您不应该通过未加密的连接发送您的凭据。您可能被选项的命名误导了,在 Postfix
smtp_use_tls
中已弃用简写为使能够机会性传输安全,在其他软件中,此名称指的是禁用(在此上下文中已过时的) STARTTLS 机制,而是立即设置传输安全。smtp_use_tls
从您的 中删除main.cf
并改用smtp_tls_security_level = encrypt
。 后一种配置应用的策略独立于正在使用的机制,影响全部传出 SMTP,端口 465 上的 TLS(Postfix 称为 tls_wrappermode)和在端口 587 上启动 STARTTLS。这可能意味着您的密码或用户名不正确,或者从过时的缓存中读取。除了用户名中的冒号以及前导/尾随空格外,我不知道有任何字符特殊处理。
验证 postfix 读取的凭据是否与您使用其他软件测试的凭据相符:
# postmap -v $(postconf -xh smtp_sasl_password_maps) postmap: open hash /etc/postfix/smtp.sasl # postmap -q "$(postconf -xh relayhost)" $(postconf -xh smtp_sasl_password_maps) [email protected]:<pwd>
请记住,您的地址映射配置可能对您之前的测试没有任何影响,因为 Postfix 默认附带配置,可防止对已知不接受凭据和/或邮件的主机进行过多重试,因此缺少postfix/smtp
后续尝试的日志行。检查您的队列 ( postqueue -p
) 是否有潜在的未完成消息。