phpmailer错误:无法实例化邮件功能

时间:2015-06-04 15:49:36

标签: php email phpmailer

我使用localhost WAMP服务器(Windows)进行虚拟主机。我收到以下错误。

  

phpmailer错误:无法实例化邮件功能。

我尝试了很多解决方案,但没有任何方法可以帮助我。

PHP邮件脚本

    $mailer = new PHPMailer();
    $mailer->IsMAIL();
    $mailer->CharSet = 'utf-8';
    $mailer->AddAddress($formvars['email'],$formvars['name']);
    $mailer->Subject = "Your registration with ".$this->sitename;
    $mailer->From = $this->GetFromAddress();        
    $confirmcode = $formvars['confirmcode'];
    $confirm_url = $this->GetAbsoluteURLFolder().'/confirmreg.php?code='.$confirmcode;
    $mailer->Body ="Hello ".$formvars['name']."\r\n\r\n".
    "Thanks for your registration with ".$this->sitename."\r\n".
    "Please click the link below to confirm your registration.\r\n".
    "$confirm_url\r\n".
    "\r\n".
    "Regards,\r\n".
    "Webmaster\r\n".
    $this->sitename;

    if(!$mailer->Send())
    {
        $this->HandleError("Failed sending registration confirmation email.".$mailer->ErrorInfo);
        //echo "Mailer Error: " . $mailer->ErrorInfo;
        return false;
    }
    return true;

如何诊断此错误?

2 个答案:

答案 0 :(得分:2)

$mailer->IsMAIL();告诉PHPMailer使用PHP mail()功能进行电子邮件投放。它在类Unix操作系统上开箱即用,但在Windows上没有,因为Windows的桌面版本不安装SMTP服务器(安装光盘上有)。

为了使其在Windows上运行,您必须更改PHP配置。您可以编辑php.ini(配置将全局应用),也可以使用函数ini_set()仅对当前脚本的当前执行进行更改。

最好的方法是更改​​php.ini。您可以在PHP的安装目录或Windows的目录中找到它。检查PHP函数phpinfo()的输出以找出其确切位置。

在文本编辑器中打开php.ini(用于编写代码的编辑器是最好的)并搜索如下所示的部分:

[mail function]
; For Win32 only.
; http://php.net/smtp
SMTP = localhost
; http://php.net/smtp-port
smtp_port = 25

; For Win32 only.
; http://php.net/sendmail-from
;sendmail_from = me@example.com

对于SMTP,请使用公司邮件服务器的名称或IP地址。或者如果你在家,你的ISP的邮件服务器。或者检查电子邮件客户端的配置。

如果服务器使用smtp_port来加密其通信,则25为标准SMTP 587SSL

如果sendmail_from设置已被注释掉(从行首删除;)并将您的电子邮件地址放在那里,也会取消注释。{/ p>

阅读documentation page上有关在Windows上发送电子邮件的PHP配置的更多信息。

另一种选择是在计算机上安装SMTP服务器。您可以在Windows安装光盘上找到一个,也可以使用第三方解决方案。

如果您选择不在计算机上安装SMTP服务器,则甚至不需要修改php.ini。您可以更改脚本代码以使用SMTP服务器:

$mailer = new PHPMailer();

$mailer->IsSMTP();
$mailer->Host = "mail.example.com";
$mailer->Port = 25;

检查this PHPmailer example是否有所有设置及其含义。

如果SMTP服务器使用SMTP身份验证(网络邮件提供商会这样做,您的ISP或您的公司可能会这样做或者可能不会这样做),那么您还必须添加:

$mail->SMTPAuth = true;
$mail->Username = "yourname@example.com";
$mail->Password = "yourpassword";

例如,如果您使用Gmail的SMTP服务器,请使用您的Gmail电子邮件地址和密码。将“Gmail”替换为“Hotmail”或“Yahoo!”或上述句子中的您的网络邮件提供商或贵公司。

答案 1 :(得分:0)

从localhost配置工作邮件客户端始终是一项任务,并且通常“不必要”,因为它只是一个沙盒。虽然一些开发人员想要解决这个难题(我就是其中之一),但有些人会寻找更容易的替代方案。

我建议您安装HMailServer

我见过很多人使用hmail以非常快的速度运气好。

逐步查看此帖子:How to send email from localhost WAMP Server to send email Gmail Hotmail or so forth?