我最近一直在测试 Postfix,并将其配置为虚拟环境中的仅发送邮件客户端。我一直在几个虚拟机上尝试设置,直到让它工作起来,最后我找到了应该输入的正确值。我们的配置非常简单,我将在下面的代码中用我们正在使用的配置屏蔽或域。
# See /usr/share/postfix/main.cf.dist for a commented, more complete version
# Debian specific: Specifying a file name will cause the first
# line of that file to be used as the name. The Debian default
# is /etc/mailname.
#myorigin = /etc/mailname
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no
# appending .domain is the MUA's job.
append_dot_mydomain = no
# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h
readme_directory = no
# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
myhostname = mail.example.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = mail.example, localhost.localdomain, localhost
relayhost = smtp-relay.gmail.com
mynetworks = 10.0.0.0/8 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_command = procmail -a "$EXTENSION"
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = all
/etc/hostname 的内容如下
mail.example.com
/etc/hosts 的内容如下
127.0.0.1 localhost.localdomain localhost
10.x.x.x mail.example.com mail
# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
/etc/mailname 的内容如下
example.com
但无论出于何种原因,此配置与另一台与这些文件匹配的服务器相同,但是当我从命令行发送邮件时执行如下操作:
echo "testing email" | mail -s "test subject" [email protected]
一个服务器显示它来自[电子邮件保护],另一个表明它来自[电子邮件保护]。我无论如何也无法弄清楚,而且我不确定这两个服务器之间在哪里以及哪些设置不同(我也已经重新启动它们并多次重新启动了 Postfix 服务)。
这看起来像是一个系统变量,或者正在轮询另一个配置文件。我真的很好奇,想了解这里发生了什么,任何信息都会非常有帮助。谢谢!
更新 1:包括 mail.log 比较和 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
inet_protocols = all
mailbox_command = procmail -a "$EXTENSION"
mailbox_size_limit = 0
mydestination = mail.example.com, localhost.localdomain, localhost
myhostname = mail.example.com
mynetworks = 10.0.0.0/8 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
myorigin = /etc/mailname
readme_directory = no
recipient_delimiter = +
relayhost = smtp-relay.gmail.com
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
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
Mail.log 比较
- 邮件01:
uid=1000 from=<operations>
- 邮件02:
uid=1000 [email protected]
- mail01 上的邮件是用裸用户名(操作)提交的,因此 postfix 附加了 myorigin 使得[电子邮件保护]。
- mail02 上的邮件看起来是以完整的电子邮件地址作为发件人提交的,因此 Postfix 不会附加 myorigin。
这两个虚拟机都在为此全新创建的 Ubuntu 14.04.3 VM 上运行,并且已完全更新。我应该在哪里查找此裸用户名的配置?我检查了 /etc/passwd,但它只显示“操作”,肯定是某个文件或我在某个地方遗漏了什么 - 您有什么想法吗?
答案1
我搞明白了。无论出于什么原因,似乎我的 /etc/mailname 没有得到处理,即使它与其他服务器相同 - 并且文件甚至具有相同的 MD5sum - Postfix 配置也没有接受它。我还注意到我在一个系统上使用 mailutils(一个无法正常工作并在事后安装了 Postfix 的系统),另一个系统使用 bsd-mailx。我在尝试更改 /etc/mailname 之前交换了它,但似乎没有什么不同,但无论如何,我还是记下来以防万一。无论如何,我将我的 /etc/mailname 更改为一个虚假值,如 test,然后执行 sudo postfix reload 和 sudo service postfix restart,然后将其切换回我想要的值(contoso.com),然后执行相同的两个命令来刷新配置和服务,瞧,它按预期工作。感谢所有帮助。