标题有点误导…我想要做的事情有点复杂:
我想设置我的服务器(运行Ubuntu 10.04桌面)使用PHP的mail()函数发送电子邮件。
我试着用它,但邮件不去任何地方, mail()的返回值不是错误的,所以我真的不知道发生了什么事情。
任何build议/想法configuration这个?
这里是我的意见,正确的方法来完成这个,并不是很难,如果你想要做的是通过您的ISP的SMTP服务器发送邮件的PHP。
确保你的ubuntu实例上安装了MTA,我的首选项是postfix,但是你可以使用不同的指令(exim,qmail都可以),但是如果你这样做的话,这些指令中的一些需要进行调整/分开研究。
# apt-get install postfix postfix-doc
然后我们需要告诉它如何使用isp的smtp服务器发送邮件到互联网,你应该已经有这个信息,它可能被称为你的发送邮件服务器 ,用这个replacesmtp.isp.net信息。
# postconf -e relayhost=smtp.isp.net
这将调整您的postfix main.cfconfiguration文件,使您的邮件服务器发送到外部世界。
现在我们需要编辑php.ini来告诉它sendmail二进制文件的位置,这个二进制文件实际上并不是一个sendmail MTA,而是一个Postfix的包装器,它提供了一个已知的一致的类似sendmail的接口。
默认情况下,在debian / ubuntu中,postfix sendmail二进制文件位于/usr/sbin/sendmail 。
# whereis sendmail
将帮助您find它。
现在我们有了sendmail二进制文件的完整path,我们可以编辑php.ini文件,它应该位于/etc/php5/apache2/php.ini中,用你熟悉的任何编辑器打开它。
find标有[mail function]的部分,并注释掉SMTP和smtp_port指令。
取消对sendmail_path注释并在=符号后面直接添加sendmail二进制文件的完整path。
然后发出这个
# /etc/init.d/postfix restart # /etc/init.d/apache2 restart
然后尝试从php脚本发送消息,如果失败,请检查/var/log/mail.info文件。
编辑以下build议仅仅是故障排除步骤,以确定发生故障的位置,而不是长期解决scheme的build议。 结束编辑
通过端口25远程login服务器,该端口托pipe您正在尝试连接的用户并启动邮件会话 。 例如,如果您通过电子邮件发送[email protected],那么您将首先获取bobrocks.com的mxlogging(使用nslookup),然后以远程方式telnet到mxlogging:
telnet mail.bobrocks.com 25
从那里,按照我链接到上面的WikiHow文章试图发送邮件给该用户。 如果它能正常工作,但你的PHP脚本没有,那么是时候打破wireshark,看看networkingstream量告诉你什么。
另外,你可以让mail()函数在PHP CLI而不是通过Apache工作吗? 你在使用AppArmor吗? (着名的)SELinux呢?