用PHPMailer发送邮件时出现”SMTP 错误:无法连接到 SMTP 主机“的解决办法
这里首先要赞一下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);
这样就可以了。