我有两台设置相同的服务器。第一个发送邮件正常,另一个不会发送邮件。看来问题出在发件人身上。当我使用以下方式发送本地邮件时:
echo 'Message' | mailx -s 'Test' [email protected]
在后缀日志中,它将显示:
from=<[email protected]>
在第一台服务器上,它正在正确读取:
from=<[email protected]>
我已经检查了/etc/hostname
, /etc/hosts
,验证了正确的mydomain
和。的输出完全相同:myhostname
postconfig
postconf -n
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
command_directory = /usr/sbin
config_directory = /etc/postfix
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
debug_peer_level = 2
debugger_command = PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin ddd $daemon_directory/$process_name $process_id & sleep 5
html_directory = no
inet_interfaces = localhost
inet_protocols = all
mail_owner = postfix
mailq_path = /usr/bin/mailq.postfix
manpage_directory = /usr/share/man
mydestination = $myhostname, localhost.$mydomain, localhost
newaliases_path = /usr/bin/newaliases.postfix
queue_directory = /var/spool/postfix
readme_directory = /usr/share/doc/postfix-2.10.1/README_FILES
relayhost = [host.relay.com]:587
sample_directory = /usr/share/doc/postfix-2.10.1/samples
sendmail_path = /usr/sbin/sendmail.postfix
setgid_group = postdrop
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_tls_CAfile = /etc/ssl/certs/ca-bundle.crt
smtp_use_tls = yes
unknown_local_recipient_reject_code = 550
设置为所有默认值,mail.cf
除了添加中继主机和 SASL 内容。
我尝试明确设置mydomain
and但这似乎被忽略了,就像放入然后执行并重新启动 postfix 不会改变任何东西一样。myhost
main.cf
root: [email protected]
/etc/aliases
newaliases
我也试过用 PHP 脚本发送电子邮件,没有区别。
服务器 1 上的main.cf
与服务器 2 上的完全相同,它们都运行相同的系统(CentOS 7)和软件。唯一的区别是它们位于不同的域(即 subdomain.domain1.com 和 subdomain.domain2.com)上,因此这可能是一种可能性,但似乎遥不可及。
mailx
然而,服务器 1 可以使用上面的命令以及前面提到的 PHP 脚本(这只不过是一个简单的命令)发送邮件mail()
。
什么可能导致后缀明显忽略域/主机设置,但选择正确的值但坚持将域添加到发件人地址?
答案是DNS。
第一个线索是在日志中,我注意到它实际上是 sendmail,而不是 postfix,它首先提到了错误的地址。
通过谷歌搜索,我发现 sendmail 在遇到解析域的错误时,显然是主机+域组合。检查我的 DNS 配置,我注意到两件事:我还没有配置反向 DNS,并且我没有为服务器使用的子域指定AAAA 记录 (IPv6)。
添加后,sendmail 和 postfix 都使用正确的地址,没有添加域。