解决PHPMailer错误SMTP Error: Could not connect to SMTP host的办法

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

这个错误说明虚拟主机不支持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);

补充:

解决办法:很多网站列出的解决办法说是因为smtp大小写的问题,虽然问题的本质不在这里,但确实也需要改这个地方,至于为什么,看下面的操作。

在 class.phpmailer.php 中,将:

function IsSMTP(){$this->Mailer='smtp';}

改成:

function IsSMTP(){$this->Mailer = 'SMTP';}

这个地方的修改不是使用了smtp来发送邮件,而是使用了另外一种方式发送邮件,检查 class.phpmailer.php 文件里面有下面这么一段:

switch($this->Mailer){
 case 'sendmail':
  return $this->SendmailSend($header, $body);
 case 'smtp'://由于SMTP和smtp不相等 所以选择的是下面MailSend发送邮件 并不是使用smtp发送邮件
  return $this->SmtpSend($header, $body);
 default:
  return $this->MailSend($header, $body);
}
(2)Linux主机禁用了fsockopen()函数

国内有很多空间服务商出于安全考虑会禁用服务器的fsockopen函数。

解决方法:

用pfsockopen() 函数代替 fsockopen() ,如果 pfsockopen 函数也被禁用的话,还可换其他可以操作Socket函数来代替, 如stream_socket_client()

在 class.smtp.php 中将 @fsockopen 改成 @pfsockopen

$this->smtp_conn = @fsockopen($host,    // the host of the server

改成:

$this->smtp_conn = @pfsockopen($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
(3)防火墙安全设置规则,如果以上两种方案都不凑效,那估计是防火墙的规则问题了,可以让服务器管理员去掉所有的防火墙规则,然后测试一下,看是否是这个原因。

时间: 2024-12-26 19:13:47

解决PHPMailer错误SMTP Error: Could not connect to SMTP host的办法的相关文章

解决MYSQL错误:ERROR 1040 (08004): Too many connections

方法一: show processlist; show variables like 'max_connections'; show global status like 'max_used_connections'; set GLOBAL max_connections=1500;   方法二: 修改my.ini: max_connections=1000 这种方法要重启.

phpmailer发送邮件 SMTP Error: Could not authenticate 错误

今天在使用phpmailer发送smtp邮件时提示 SMTP Error: Could not authenticate 错误,其中密码帐号都是正确的,邮箱也设置开启了SMTP功能. 上谷歌百度了一遍,有的说是服务器禁用了端口,有的说把class.phpmailer.php中的  代码如下 复制代码 function IsSMTP() { $this->Mailer = 'smtp'; }改为 function IsSMTP() { $this->Mailer = 'SMTP'; } 测试以后

如何解决:Android中 Error generating final archive: Debug Certificate expired on 10/09/18 16:30 的错误

原文:http://www.cnblogs.com/yyangblog/archive/2011/01/07/1929657.html   问题概述: 在导入一个app后提示如下错误: "Error generating final archive: Debug Certificate expired on 10/09/18 16:30"   原因分析: android要求所有的程序必须有签名,否则就不会安装该程序.在我们开发过程中,adt使用debug keystore,在 pref

ThinkPHP提示错误Fatal error: Allowed memory size的解决方法_php实例

本文实例讲述了ThinkPHP提示错误Fatal error: Allowed memory size的解决方法.分享给大家供大家参考.具体分析如下: 如果你的ThinkPHP提示你:致命错误(Fatal error: Allowed memory size),根据网上说的提高服务器可使用内存,我觉得都不是好的解决办法.麻烦也没必要.因为这是ThinkPHP本身存在BUG. 错误提示:Fatal error: Allowed memory size of 1073741824 bytes exh

解决IIS7运行ASP提示错误:An error occurred on the server when processing the URL. Please contact the system administrator

原文:解决IIS7运行ASP提示错误:An error occurred on the server when processing the URL. Please contact the system administrator     在WINDOWS7或SERVER2008上安装了IIS7,调试ASP程序时出现以下错误:     An error occurred on the server when processing the URL. Please contact the syste

c++-C++ 链接错误 fatal error LNK1104: 无法打开文件“mapnik.lib”

问题描述 C++ 链接错误 fatal error LNK1104: 无法打开文件"mapnik.lib" 我在mapnik项目中Debug模式下编译成功.lib文件,然后再另一个Debug项目中链接mapnik.lib,就出现了LNK1104, 而在Release状态下是成功的,(debug下的mapnik.lib文件有3个多G),试了半天了,还是一头雾水 解决方案 错误分析:LNK 1104是链接的错误,在链接一些lib或者exe文件时,如果链接路径错误或者无法打开其文件时,就会出

升级mysql_upgrade 提示错误FATAL ERROR: Upgrade failed的原因

升级mysql_upgrade 提示错误FATAL ERROR: Upgrade failed的原因 2014年07月25日 10:33 by:老修--走失的镜头盖分类:网站技术 -> mysql 正文我来说两句 用mysql_upgrade 升级mysql的两种错误: 第一种. 提示FATAL ERROR:Upgrade failed 的时候时候输入mysql升级命令并输入密码后出现下面的错误提示: [root@AY1405111111157597d01Z ~]# mysql_upgrade

ios8定位提示错误kCLErrorDomain error 8

问题描述 ios8定位提示错误kCLErrorDomain error 8 ios8定位提示错误kCLErrorDomain error 8 请问怎么解决 解决方案 http://stackoverflow.com/questions/21624712/clgeocoder-returning-error-the-operation-couldn-t-be-completed-kclerrordomai

SQL Server 2012安装错误:Error while enabling Windows feature: NetFx3, Error Code: -2146498298

最近在安装SQL server 2012时,碰到错误:Error while enabling Windows feature: NetFx3, Error Code: -2146498298.原本以为Windows 2012配上SQL server 2012应该是一路顺畅才对啊.下面是这个问题的描述及解决方案.   1.安装环境 OS:Windows 2012 data center版本 SQL:SQL server 2012 Enterprise   2.故障描述   3.故障解决 经查,该