我管理一个域名的托管(假设为 sendingdomain.com)。该机器未连接到公共域(因为它托管更多域),主机名为 albergues02.resolve.com。Sendingdomain.com 是一个 Wordpress 应用程序
它安装了 Postfix,允许本地应用程序发送电子邮件。它没有关联的 MX 记录。我知道这可能是一个问题,但客户目前并不重要,因为他只向一个缩小的组发送电子邮件,而且到目前为止它一直在工作(我们刚刚将托管迁移到另一个 IP 上的另一台机器)。我试图避免重写,但
事实如下:
PHP mail() 命令将 FROM 更改为[电子邮件保护]:
Jul 9 13:51:02 albergues02 sendmail[919]: q69Bp2F1000919: from=apache, size=148, class=0, nrcpts=1, msgid=<[email protected]>, relay=apache@localhost
Jul 9 13:51:02 albergues02 postfix/smtpd[921]: connect from localhost[127.0.0.1]
Jul 9 13:51:02 albergues02 postfix/smtpd[921]: D7B0960E77: client=localhost[127.0.0.1]
Jul 9 13:51:02 albergues02 postfix/cleanup[924]: D7B0960E77: message-id=<[email protected]>
Jul 9 13:51:02 albergues02 postfix/qmgr[787]: D7B0960E77: from=<[email protected]>, size=607, nrcpt=1 (queue active)
Jul 9 13:51:02 albergues02 sendmail[919]: q69Bp2F1000919: [email protected], ctladdr=apache (48/48), delay=00:00:00, xdelay=00:00:00, mailer=relay, pri=30148, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (Ok: queued as D7B0960E77)
Jul 9 13:51:02 albergues02 postfix/smtpd[921]: disconnect from localhost[127.0.0.1]
如果我在登录页面“记住我的密码”,邮件就会成功(FROM 一直[电子邮件保护]):
Jul 9 13:55:23 albergues02 postfix/smtpd[938]: connect from localhost[::1]
Jul 9 13:55:23 albergues02 postfix/smtpd[938]: 51BB260E79: client=localhost[::1]
Jul 9 13:55:23 albergues02 postfix/cleanup[942]: 51BB260E79: message-id=<[email protected]>
Jul 9 13:55:23 albergues02 postfix/qmgr[787]: 51BB260E79: from=<[email protected]>, size=968, nrcpt=1 (queue active)
Jul 9 13:55:23 albergues02 postfix/smtpd[938]: disconnect from localhost[::1]
Jul 9 13:55:23 albergues02 postfix/smtp[943]: 51BB260E79: to=<[email protected]>, relay=vmail.mycompany.es[217.xxx.xx.xx]:25, delay=0.19, delays=0.05/0.02/0/0.11, dsn=2.0.0, status=sent (250 ok: Message 39109407 accepted)
Jul 9 13:55:23 albergues02 postfix/qmgr[787]: 51BB260E79: removed
wordpress 有一个 Newsletter 发送插件,但它也不起作用。
Postconf -n显示:
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
anvil_rate_time_unit = 1s
command_directory = /usr/sbin
config_directory = /etc/postfix
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
debug_peer_level = 2
html_directory = no
inet_interfaces = all
inet_protocols = all
local_header_rewrite_clients =
mail_owner = postfix
mailq_path = /usr/bin/mailq.postfix
manpage_directory = /usr/share/man
masquerade_domains = !domain.com !domain2.com # All domains that appear in the @domain of the emails sent
mydestination = $myhostname, localhost.$mydomain, localhost
mydomain = resolve.com
myhostname = albergues02.resolve.com
mynetworks_style = host
newaliases_path = /usr/bin/newaliases.postfix
queue_directory = /var/spool/postfix
readme_directory = /usr/share/doc/postfix-2.6.6/README_FILES
remote_header_rewrite_domain =
sample_directory = /usr/share/doc/postfix-2.6.6/samples
sendmail_path = /usr/sbin/sendmail.postfix
setgid_group = postdrop
smtpd_client_connection_count_limit = 30
smtpd_client_connection_rate_limit = 100
smtpd_client_message_rate_limit = 100
smtpd_client_recipient_rate_limit = 100
smtpd_client_restrictions = permit
smtpd_error_sleep_time = 1s
smtpd_hard_error_limit = 20
smtpd_soft_error_limit = 10
unknown_local_recipient_reject_code = 550
机器上安装了 Sendmail 但服务已停止。
我不知道还要更改/查看/配置什么。目标是让 postfix 中继来自本地主机的所有邮件,而无需重写发件人地址。
答案1
我不得不反对您所说的sendmail
没有运行的说法。上面的日志文件显示它接受了来自 Apache 的电子邮件并将其转发给 Postfix。如果它没有运行,它就不会写入邮件日志。它也不会有 PID 919。
由于 Sendmail 和 Postfix 的功能相同,因此您实际上只需要其中一个。我个人觉得 Postfix 更容易处理。
我还认为您使用两种不同的方式从 PHP 发送邮件,这是“重写”问题的根源。其中一种方法是使用二进制文件/usr/bin/sendmail
(这是 PHPmail()
命令的默认方式),另一种方法是通过端口 25 连接到本地主机并使用 SMTP。据推测这是使用 SwiftMail 或类似程序包完成的。
Postfix 安装自己的/usr/bin/sendmail
二进制文件,具有与 Sendmail 版本相同的接口(或者更确切地说,它在该位置符号链接自己的版本),但如果 Sendmailsendmail
在那里,则使用该二进制文件发送的任何邮件都将进入 Sendmail 系统。
我的建议是卸载 Sendmail和Postfix,然后重新安装 Postfix。这将确保正确的二进制文件位于正确的位置。