用PHPMailer发送邮件时出现”SMTP 错误:无法连接到 SMTP 主机“的解决办法

aries 发表于 2014-02-10 1539 次浏览 标签 : PHPMailerSMTP

这里首先要赞一下PHPMailer,这可是个好东西.

  	PHPMailer是一个用于发送电子邮件的PHP函数包。它提供的功能包括:
  


  
  	*.在发送邮时指定多个收件人,抄送地址,暗送地址和回复地址

*.支持多种邮件编码包括:8bit,base64,binary和quoted-printable

*.支持SMTP验证

*.支持冗余SMTP服务器

*.支持带附件的邮件和Html格式的邮件

*.自定义邮件头

*.支持在邮件中嵌入图片

*.调试灵活

*.经测试兼容的SMTP服务器包括:Sendmail,qmail,Postfix,Imail,Exchange等

*.可运行在任何平台之上

还是赞一下提供SMTP的各大服务商。



再说错误问题,出现“SMTP 错误:无法连接到 SMTP 主机“这个错误呢,基本上都是虚拟主机的用户,因为一些虚拟主机商为了安全,禁用一些函数,如**fsockopen** 、**pfsockopen** ,PHPMailer中用到了**fsockopen** ,所以就会出现以上错误!



找到**class.smtp.php** 文件,大约在文件的128行吧,有这样一段代码:
// connect to the smtp server
    $this->smtp_conn = @fsockopen($host,    // the host of the server
                                 $port,    // the port to use
                                 $errno,   // error number if any
                                 $errstr,  // error message if any
                                 $tval);   // give up after ? secs
	**方法1:将fsockopen函数替换成pfsockopen函数**




	因为pfsockopen的参数与fsockopen基本一致,所以只需要将**@fsockopen** 替换成**@pfsockopen** 就可以了。




	**方法2:使用stream_socket_client函数**




	一般fsockopen()被禁,pfsockopen也有可能被禁,所以这里介绍另一个函数stream_socket_client()。




	stream_socket_client的参数与fsockopen有所不同,所以代码要修改为:
$this->smtp_conn = stream_socket_client("tcp://".$host.":".$port, $errno,  $errstr,  $tval);
	这样就可以了。

0条评论

如需评论,请填写表单。
换一个

记住我的信息