我使用localhost WAMP服务器(Windows)进行虚拟主机。我收到以下错误。
phpmailer错误:无法实例化邮件功能。
我尝试了很多解决方案,但没有任何方法可以帮助我。
$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;
如何诊断此错误?
答案 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
587
或SSL
。
如果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?