我们的开发服务器是用于开发网站的 CentOS LAMP 系统。我们希望 PHP 能够发送电子邮件。服务器不需要接收电子邮件或其他任何东西,只需向我们的开发人员发送电子邮件即可。
我读过有关 nullclients 以及如何将它们替换为 postfix 的文章,但我并不想使用存储库中没有的东西。经过一番折腾,我让 postfix 尝试发送电子邮件,方法是使用类似于空客户端上的 PostfixPostfix 标准配置自述文件中的说明:
myhostname = localhost.localdomain
myorigin = localdomain
relayhost = $mydomain
inet_interfaces = loopback-only
mydestination =
一旦我这样设置它,我尝试使用 telnet 发送电子邮件,就会看到以下错误/var/log/maillog
:
Apr 23 19:26:25 devserver postfix/smtp[34437]: 604E95209C3: to=<[email protected]>, relay=localdomain[82.147.22.3]:25, delay=0.54, delays=0.07/0/0.07/0.41, dsn=5.0.0, status=bounced (host localdomain[82.147.22.3] said: 550-Please turn on SMTP Authentication in your mail client, or login to the 550-IMAP/POP3 server before sending your message. ourstatic.hostname.isp.co.uk (localhost.localdomain) 550-[123.456.789.0]:54710 is not permitted to relay through this server 550 without authentication. (in reply to RCPT TO command))
因此,我们的 ISP 可能允许发送电子邮件,但必须进行身份验证。这意味着他们还是我们要向其发送电子邮件的服务器?我读过有关使用 postfix 的 SASL 的文章,但我不确定这是否是我应该走的路线。
请提供建议或进一步阅读,包括您是否认为有更好的替代方案。我很乐意分享我遗漏的更多信息。
更新
回复一些评论 - 我不是试通过我的 ISP 进行中继,但是当我在开发服务器上使用 postifx 尝试发送电子邮件时,我看到的是上述内容,所以大概是 ISP 阻止了它。
我忘了添加一些东西,这让我更加困惑。我们之前使用的是 WampServer,并且在我们的机器上安装了 hMailServer,它只设置了 SMTP。通过它发送电子邮件(使用 php.ini 中的 Windows SMTP 设置)工作正常,我们在中继消息方面没有遇到任何问题。我不知道为什么现在我们尝试使用 postfix 会有差异。-我看到 hMailServer 充当 SMTP 服务器 - 这正是我想用 postfix 做的事情。
至于在公司内拥有内部邮件服务器,我们在另一个办公室确实有一个,但我们不想将电子邮件路由到其他地方 - 我们只是希望有一种方法可以让 PHP 只向开发人员发送电子邮件,而不会影响生产服务如果出现任何问题(例如黑名单或其他)。
也许我的设置有误,因为 postfix/我的 ISP 认为我正在尝试将它们用作中继,而我真正想要做的只是通过 postfix 实现简单的 SMTP 功能来发送电子邮件。还有其他建议吗?
答案1
除非您已经设置了带有中继主机的 postfix,否则最有可能的情况是,要么您向同一个 ISP 上的地址发送邮件,而他们的邮件服务器将您视为在他们的网络中并需要进行身份验证,要么他们捕获端口 25 上的所有流量并将其重定向到他们自己的邮件服务器(这很常见但在我看来有点邪恶)。
这两种情况的解决方法是将 postfix 设置为使用您的 ISP 邮件服务器作为带身份验证的中继主机。此类配置在 postfix 手册中有详细记录。
答案2
您正在尝试设置邮件中继。以下配置/etc/postfix/main.cf
应该足够了:
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no
append_dot_mydomain = no
# Replace this with your mail server's hostname
myhostname = svc1.int.mtak.nl
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
# Replace this with your mail server's hostname
myorigin = smtp1.int.mtak.nl
# Domains for which local delivery is required, in your case only localhost
mydestination = smtp1.int.mtak.nl, svc1.int.mtak.nl, localhost.int.mtak.nl, localhost
# Host to which to relay mail to. Usually your ISP's SMTP server or your company's SMTP server, contact your administrator for details
relayhost = dc2.int.mtak.nl
# Networks that are allowed to send mail through your mail relay.
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 10.100.0.0/24 10.100.2.0/24 10.100.4.0/24
更改配置后,使用以下命令重新启动 Postfix/etc/init.d/postfix restart
答案3
如果要可靠地将邮件发送到互联网,则需要固定 IP 地址。如果记录PTR
集返回邮件服务器的 DNS 名称,则成功率会更高。如果无法获得固定 IP 地址,请使用提供商的中继服务器发送电子邮件。
通常,如果您的域名是example.com
,那么您的邮件主机将配置为smtp.example.com
或。这将mail.example.com
是。应将 Postfix 设置为使用此域名而不是 来标识自己。 在 Internet 上不会有 MX,许多服务器将拒绝电子邮件或将其归类为垃圾邮件。MX
example.com
localhost.localdomain
localhost.localdomain
你应该考虑设置防晒指数(发件人策略框架)您的域的 DNS 记录。
替代方法: - 您可以将服务器配置为对您的开发人员进行身份验证MX
并通过经过身份验证的连接进行交付。
- 您可以将主机配置为开发人员MX
服务器上的本地服务器。 这要求您可以识别邮件管理员MX
。 他们可能会要求您有一个固定的 IP 地址。
答案4
我意识到我的用例是独立互联网主机上的 Postfix:
Postfix 应该可以在可直接访问互联网的独立机器上无需任何更改即可运行。
我重置main.cf
为默认设置,尝试通过 PHP 发送电子邮件并出现maillog
此错误:
postfix/sendmail[1787]: fatal: chdir /var/spool/postfix: Permission denied
这让我立刻想到了 SELinux......
sudo setsebool -P httpd_can_sendmail 1
现在它起作用了!以一种非常迂回的方式学到了一个大教训。感谢大家的帮助!