如何配置本地服务器以发送电子邮件

如何配置本地服务器以发送电子邮件

标题有点误导...我想做的事情有点复杂:

我想设置我的服务器(运行 Ubuntu 10.04 桌面)以使用 PHP 的mail()功能发送电子邮件。

我尝试过使用它,但是消息没有发送到任何地方,并且返回值mail()不是 FALSE,所以我真的不知道发生了什么。

对于配置这一点有什么建议/想法吗?

答案1

这是我对实现此目的的正确方法的看法,如果您要做的只是通过 ISP 的 SMTP 服务器发送 php 邮件,那么这并不难。

确保您的 ubuntu 实例上安装了 MTA,我偏爱的是 postfix,但您可以使用不同的(exim、qmail 都可以),但是如果您这样做的话,其中一些说明将需要进行调整/单独研究。

# apt-get install postfix postfix-doc

然后我们需要告诉它如何使用你的 ISP 的 smtp 服务器向互联网发送邮件,你应该已经有了这个信息,它可能被称为你的对外邮件服务器,用此信息替换 smtp.isp.net。

# postconf -e relayhost=smtp.isp.net

这将调整您的 postfix main.cf 配置文件,以使您的邮件服务器能够向外界发送邮件。

现在我们需要编辑 php.ini 来告诉它发送邮件二进制文件,这个二进制文件实际上并不是一个 sendmail MTA,而是一个 postfix 的包装器,它提供了一个已知的一致的类似 sendmail 的接口。

默认情况下,在 debian/ubuntu 中,postfix sendmail 二进制文件位于/usr/sbin/sendmail

# whereis sendmail

将协助您找到它。

现在我们有了 sendmail 二进制文件的完整路径,我们可以编辑 php.ini 文件,它应该位于 /etc/php5/apache2/php.ini,用您熟悉的任何编辑器打开它。

找到标记的部分[mail function]并注释掉SMTPsmtp_port指令。

取消注释sendmail_path并在 = 符号后直接添加 sendmail 二进制文件的完整路径。

然后发出这个

# /etc/init.d/postfix restart
# /etc/init.d/apache2 restart

然后尝试从 php 脚本发送消息,如果失败,请检查 /var/log/mail.info 文件。

答案2

编辑 以下建议仅仅是确定故障发生位置的故障排除步骤,而不是长期解决方案的建议。 结束编辑

通过端口 25 远程登录到托管您尝试连接的用户的服务器,然后发起邮件会话。例如,如果您发送电子邮件[电子邮件保护]那么您首先要获得 bobrocks.com 的 mx 记录(使用 nslookup),然后通过 telnet 连接到 mx 记录,如下所示:

telnet mail.bobrocks.com 25

从那里,按照我上面链接的 WikiHow 文章尝试向该用户发送邮件。如果它有效但您的 PHP 脚本无效,那么是时候打破 wireshark 并查看网络流量告诉您什么了。

另外,您能让 mail() 函数在 PHP CLI 而不是通过 Apache 运行吗?您使用 AppArmor 吗?那 (臭名昭著的) SELinux 呢?

相关内容