我们的dev服务器是用于开发网站的CentOS LAMP系统。 我们希望PHP发送电子邮件。 服务器不需要接收电子邮件或其他任何东西,字面上只是发送电子邮件给我们的开发人员。
我读了关于nullclient,以及如何他们可以放入,而不是后缀,但我不喜欢使用不在存储库中的东西。 经过一番小小的调整,我得到了postfix来(尝试)发送电子邮件,通过使用Postfix标准configuration自述文件中的空客户端上的Postfix中find的设置:
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将允许发送电子邮件,但它必须被authentication。 这是否意味着他们或与我们试图发送电子邮件的服务器? 我已经阅读了与后缀的SASL,但我不知道如果这是我应该去的路线。
请提供build议或进一步阅读,包括您是否认为有更好的select。 更多信息我已经错过了,我很乐意分享。
更新
回复一些评论 – 我不是试图通过我的ISP进行中继,但是当我在开发服务器上使用postifx尝试发送电子邮件时,上面是我所看到的,所以推测ISP可能会阻止它。
我忘了补充一点,这让我更加困惑。 我们以前使用WampServer,并且在我们的机器上安装了hMailServer,而这些机器只使用SMTP进行设置。 通过这个(通过在php.ini中的Windows SMTP设置)发送电子邮件工作正常,我们没有这个中继消息的问题。 我不知道为什么现在我们正在尝试使用后缀的差异。 – 我看到hMailServer作为一个SMTP服务器 – 这正是我想要做的与后缀 。
至于在公司内部有一个邮件服务器,我们在不同的办公室有一个邮件服务器,但是我们不想在其他地方发送邮件 – 我们只想让PHP发送邮件给开发者,而不影响生产服务如果出现任何问题(如黑名单或其他)。
也许我的设置是错误的后缀/我的ISP认为我试图使用它们作为中继,当我想要做的是有一个简单的SMTPfunction通过后缀发送电子邮件。 还有什么build议?
除非你已经用relayhost设置了postfix,否则最有可能的是你要发送到同一个isp上的地址,他们的邮件服务器在你的networking中看到你需要被authentication,或者他们捕获端口25上的所有stream量,并redirect它给自己的邮件服务器(这是常见的,但有点邪恶的恕我直言)。
这两种情况的解决scheme是设置后缀使用您的ISP邮件服务器作为中继身份validation。 这种configuration在Postfix的手册中有很好的记载。
您正尝试设置邮件转发。 /etc/postfix/main.cf的以下configuration应该足够了:
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
更改configuration后,使用/etc/init.d/postfix restart启动Postfix
如果您想要可靠地发送到Internet,则需要一个固定的IP地址。 如果您将PTRlogging设置为返回您的邮件服务器的DNS名称,您将获得更好的成功。 如果您无法获得固定的IP地址,请使用您的提供商的中继服务器发送电子邮件。
通常情况下,如果您的域是example.com那么您的邮件主机将被configuration为smtp.example.com或mail.example.com 。 这将是example.com的MX 。 应该设置postfix来标识自己的域名,而不是localhost.localdomain 。 localhost.localdomain将不会在互联网上有一个MX,许多服务器将拒绝电子邮件或文件作为垃圾邮件。
您应该考虑为您的域设置SPF (发件人策略框架)DNSlogging。
替代方法: – 您可以configuration服务器以validation您的开发人员的MX并通过validation的连接交付。
– 您可以将您的主机configuration为开发人员的MX服务器上的本地服务器。 这要求您可以识别MX的邮件pipe理员。 他们可能会要求你有一个固定的IP地址。
我意识到我的使用案例是独立Internet主机上的Postfix :
Postfix应该可以在没有直接访问Internet的独立机器上进行更改。
我重置我的main.cf默认,试图通过PHP发送一封电子邮件,并尾随maillog给我这个错误:
postfix/sendmail[1787]: fatal: chdir /var/spool/postfix: Permission denied
这立刻让我想到了SELinux …
sudo setsebool -P httpd_can_sendmail 1
现在它工作! 以非常迂回的方式学习的一个重大教训。 感谢所有的帮助!