2011-07-18 135 views
0

我正在从PHPMailer得到'could not instantiate mail function'错误。从阅读中,我明白这意味着PHP邮件()函数由于某种原因不起作用。php mail()函数不能正常工作

phpinfo()函数的邮件设置的结果是:

My PHP mail settings

对我来说,这意味着邮件()应该工作和25端口是开放的。是对的吗?

有什么我可以检查,使这项工作吗?我查看了mail()函数的文档,但是我看不到它抛出的异常,以及如何将它们打印出来以供屏幕显示。我做了一个:

mail('[email protected]', "test", "test") or die("Doesn't work"); 

类型测试,但这是我的错误信息,我可以做一些更有用的东西。

感谢您的帮助。

非常感谢

回答

2

它并不意味着端口25是开放的,它只是意味着PHP应该使用端口25来联系SMTP服务器。你没有说明你在使用什么操作系统,但是请注意,sendmail只是一个unix的东西,如果你在Windows上,它会失败。

+0

为您的回复而欢呼,我正在运行Centos 5.5。 – Joe

0

该列表仅显示您当前的设置。这并不意味着他们是对的。 :)

您的localhost可能未配置为邮件服务器。将smtp服务器设置为可以从PHP服务器访问的真实服务器。

+0

所以,SMTP的值应该是一个SMTP服务器(我拿的是一种邮件服务器)?所以,如果我有一个电子邮件帐户,我可以使用它?或者我必须在我的机器上安装SMTP服务器? – Joe

+1

SMTP是发送邮件的协议。 POP是接收邮件的协议(还有其他的,但让我们保持简单)。许多服务提供POP服务,但没有SMTP服务。您通常会在您的ISP上使用SMTP。然后SMTP服务器通常是smtp.yourisp.com或mail.yourisp.com。如果通过该ISP连接,通常只能使用该服务器。因此,如果您的服务器在本地网络上运行,请使用ISP的SMTP服务器。如果它在托管公司运行,请联系他们以查看他们是否提供此服务并找出问题所在。 – GolezTrol

0

我可能会离开,但检查是否安装了sendmail,可能是出现故障。这取决于你的操作系统。

0

phpinfo()中的设置显示PHP设置为使用SMTP,但这并不意味着您在机器上设置了SMTP服务器。您的错误消息表明,没有安装。

祝你好运

0

我的答案是 - 不要通过调用Sendmail发送电子邮件。 sendmail方法(或任何本地方法)都是一堆陷阱......即使你经历了这些问题,底线是很多垃圾邮件过滤器(在你发送邮件的地方)只是不喜欢这种类型的邮件。

为了提供一点细节为什么sendmail方法不好,您的sendmail守护程序不太可能配置为具有与您的IP地址的反向DNS相匹配的SMTP HELO。您的网络服务器不太可能拥有符合标准主机名的有效反向DNS。根本没有反向DNS是不好的,因为像123-123-123-123-static.someisp.com rdns。例如,SpamAssassing会标记这样的“未配置的或默认的反向DNS”主机。

幸运的是,您不需要了解或修复我刚才所说的一切。更简单的完成(并且更容易测试/调试)是通过一个可用的SMTP邮件服务器来收发电子邮件。在PHP

1A)安装PHPMailer的http://phpmailer.worxware.com/ ... OR 1b)中安装PEAR邮件()库http://pear.php.net/package/Mail

无论是1A或1B将取代有限的 “邮件()” 函数:要做到这一点。这些替换支持SMTP和Authenticated SMTP。

2)我建议在纯SMTP上使用Authenticated SMTP。可以工作,但通过身份验证的SMTP,您可以通过其他邮件服务器直接发送邮件,就像您的脚本是Outlook的本地电子邮件客户端一样。这有很大的好处。例如,如果您是发送邮件的公司,则您的邮件更可能被远程/目标邮件服务器信任,因为您的邮件服务器具有良好的信誉和(希望)正确的反向DNS设置。但是,如果您将电子邮件从网络服务器发出,您就没有这种功能(如果您使用共享网站主机,则会继承其他网站在您的网络服务器IP上运行的电子邮件信誉)。