欢迎访问分类目录网
快审联系QQ:158925126当前位置:分类目录网 » 站长资讯 » 技术教程 » 文章详细 订阅RssFeed

PHPMailer错误SMTP Error 的解决办法

来源:本站原创 浏览:1257次 时间:2017-05-11

PHPMailer是一个非常棒的开源邮件类,使用也非常简单,但是对于虚拟主机来说,往往要受到各种限制。最近在虚拟主机上使用PHPMailer就遇到一个“SMTP Error: Could not connect to SMTP host”错误。下面介绍几种常遇故障及解决办法:

PHPMailer是一个非常棒的开源邮件类,使用也非常简单,但是对于虚拟主机来说,往往要受到各种限制。刚才我在虚拟主机上使用PHPMailer就遇到一个“SMTP Error: Could not connect to SMTP host”错误。下面介绍几种故障的解决办法,有些是因为服务器php函数不支持的原因,有些是因为网络问题,还有则是SMTP服务器规则的原因。

服务器php函数不支持的原因,主要是因为PHPMailer通过smtp发送邮件需要用到fsockopen函数,可以以下方法解决

这个错误说明虚拟主机不支持PHPMailer默认调用的fsockopen函数,找到class.smtp.php文件,搜索fsockopen,就找到了这样一段代码:

// 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);

服务器网络原因是指网络开了IPV6话,没有指定网络,会默认通通IPV6来连接,但SMTP是IPV4所以报错了,

解决办法可以参考以下几种:

1.跳过DNS解析,直接给出IP地址。

2.强制进行IPv4 DNS解析。

3.禁用IPv6。

还有个比较难搞的就是SMTP服务器的问题,比如像在class.phpmailer.PHP有个函数判断是否支持smtp的,

在有些版本是小写有些是大写的,像goolge支持大小写,但是像QQ,163的对大小写有比较严格的要求,并且只支持大写,如果是大写,是会报错的。

解决办法如下:

在 class.phpmailer.PHP 中,将
function IsSMTP() {
$this->Mailer = 'smtp';
}
改成:
function IsSMTP() {
$this->Mailer = 'SMTP';
}


就这么多了,暂时是解决了问题,



公司企业大全

推荐站点