我正在尝试在我的公司网站上实施密码重置功能,如果用户需要重置密码,她可以点击链接,然后将新的随机生成的密码发送到她的收件箱。
我正在使用PHP mail()
函数。现在,我在Ubuntu机器上运行PHP5。在php.ini中,我已将SMTP声明为运行邮件服务器的机器的IP,并将smtp_port声明为25.此外,我已尝试远程登录到端口25上的邮件服务器并发送邮件 - 它可以工作(我的工作终端是Windows)
问题是没有发送/接收邮件 - 调用mail()
的PHP脚本在mail()
返回true
结束时大约1分钟后挂起。
最糟糕的是,我不知道如何找出问题所在 - 使用PHP,Ubuntu,邮件服务器或代码!
有人可以帮忙吗?
答案 0 :(得分:3)
我最近没有看过php.ini,但是没有说:
[mail function]
; For Win32 only.
;SMTP =
强调仅适用于Win32 。
您可能需要查看PEAR::Mail。当pear.php.net实际响应时,就是。
答案 1 :(得分:1)
您可以查看mail.err和mail.log文件吗?
答案 2 :(得分:0)
您的电子邮件服务器可能需要身份验证(“SMTP之前的POP”或ASMTP - 经过身份验证的SMTP)。由于您最近可能从Windows计算机上检查了您的电子邮件,因此您的IP地址将被验证并允许短时间发送电子邮件:从您的Ubuntu计算机上,可能不是。
在Ubuntu机器上,看看你是否不能使用SMTP服务器的IP地址:PHP应该弄清楚如何发送电子邮件。否则,您将不得不了解如何对您的电子邮件服务器进行身份验证并将其实现为PHP。
答案 3 :(得分:0)
尝试从shell发送包含邮件程序的电子邮件。首先看看它是否有效。
答案 4 :(得分:0)
您的ISP可能是问题所在。端口25经常被ISP阻止,以防止大规模垃圾邮件。尝试更改为非标准端口,看看是否有帮助。
编辑:here详细说明了问题(尽管他们的解决方案是转发到ISP邮件服务器,而不是更改端口)。
答案 5 :(得分:0)
例如,您需要Zend Framework SMTP邮件类,因为这个愚蠢的braindead php实现不适用于Unix上的SMTP端口。
请订阅PHP Core邮件列表并抱怨它 - 如果有越来越多的人进来,他们可能会更改它们,并且他们发现不是每个人都有sendmail。
答案 6 :(得分:0)
也可以使用邮件库绕过php的mail()函数。例如SwiftMailer(http://swiftmailer.org/)这是一个非常好的安全发送电子邮件类(普通/ html)。
使用此类,您可以直接连接到SMTP服务器,从而绕过服务器配置。