用phpmailer发送邮件提示SMTP Error: Could not connect to SMTP host解决办法

之前做项目的时候做了一个用phpmailer发送邮件的功能《CI框架结合PHPmailer发送邮件》,昨天步署上线(刚开始用新浪云,嫌贵,换成阿里了),测试的时候,发送邮件却意外报错了..........

我擦,没上线的时候好好的,次次成功,刚开始我以为是smtp地址的问题(我用的163邮箱),后来改成了QQ邮箱,发现还是没有用,没办法,只好问度娘了,后来看着百度上的答案才明白除了google的smtp服务器收到请求"smtp"会接受,其他的服务器就像我用的163,QQ什么的必须要收到大写的 "smtp"请求才行..........emmmmm.....

然后我在class.phpmailer.php中,将

1 public function IsSMTP() {
2     $this->Mailer = ‘smtp‘;
3   }
4
5 //改成
6 public function IsSMTP() {
7     $this->Mailer = ‘SMTP‘;
8   }

然后将:

 1 switch($this->Mailer) {
 2         case ‘sendmail‘:
 3           return $this->SendmailSend($header, $body);
 4         case ‘smtp‘:
 5           return $this->SmtpSend($header, $body);
 6         default:
 7           return $this->MailSend($header, $body);
 8       }
 9
10
11 //改成
12 switch($this->Mailer) {
13         case ‘sendmail‘:
14           return $this->SendmailSend($header, $body);
15         case ‘SMTP‘:
16           return $this->SmtpSend($header, $body);
17         default:
18           return $this->MailSend($header, $body);
19       }

我本来以为这样就可以了,重启Apache,再次测试一下,结果第一个错误是解决了,又出现了一个报错:

Could not instantiate mail function

?????

不知道你们有没有出现,我运气差,只好又求助度娘,终于找到原因:有的虚拟主机,或服务器,为了安全起见屏蔽了“fsockopen()函数”导致无法发送邮件。

下面说一下解决办法:

首先,在php.ini中去掉下面的两个分号

;extension=php_sockets.dll

;extension=php_openssl.dll

之前我用PHPmailer的时候已经去掉了,这里仅仅提示一下。

然后替换fsockopen函数

将class.smtp.php文件中fsockopen函数换成pfsockopen函数:

 1 $this->smtp_conn = @fsockopen($host,    // the host of the server
 2                                  $port,    // the port to use
 3                                  $errno,   // error number if any
 4                                  $errstr,  // error message if any
 5                                  $tval);   // give up after ? secs
 6
 7
 8 //fsockopen改为:
 9 $this->smtp_conn = @pfsockopen($host,    // the host of the server
10                                  $port,    // the port to use
11                                  $errno,   // error number if any
12                                  $errstr,  // error message if any
13                                  $tval);   // give up after ? secs

这样设置完,我的已经可以成功发送邮件了,如果同样有这方面问题的,可以参考上面的例子试一下。

本文属原创内容,为了尊重他人劳动,转载请注明本文地址:

http://www.cnblogs.com/luokakale/p/7302373.html

时间: 2024-08-09 10:36:18

用phpmailer发送邮件提示SMTP Error: Could not connect to SMTP host解决办法的相关文章

YUM安装提示PYCURL ERROR 6 - "Couldn't错误的解决办法

当编译PHP时出现如下错误时,找不到头绪 这时,打开DNS   vim /etc/resolv.conf   添加一行nameserver 192.168.1.1 完成上一步,则解决该问题 YUM安装提示PYCURL ERROR 6 - "Couldn't错误的解决办法

使用phpmailer插件发邮件失败提示:SMTP -> ERROR: Failed to connect to server: Connection timed out (110) smtp connect() failed;

一个邮件发送问题,整整弄了我一周时间,起因是这样的,之前弄的一个网站,需要在邮箱里面认证之后才可以注册成功.网站上线了差不多一年之后,客户突然跟我说,网站不能注册了,然后我就查看了一下代码. 发现报这个错误:SMTP -> ERROR: Failed to connect to server: Connection timed out (110)   smtp connect() failed: 这是我的配置. 然后我就想,之前都是可以用的,那会不会可能是客户在邮箱里面更改客户端密码呢?然后我就

Error:控制传输跳过的实例化解决办法

switch红色下划线, Error:控制传输跳过的实例化解决办法 (2012-12-26 13:39:52) 转载▼ 标签: 杂谈   如下: switch(iParam1) { case 0:     CString strResult;   strResult.Format(_T("%s"), iParam2);   break;   case 1:   break; default:  break; } 会提示控制传输跳过的实例化解决办法 因为在case 0:中定义了一个变量s

真机测试报错ERROR/AndroidRuntime: java.lang.RuntimeException: setParameters failed解决办法

这个错误是和调用相机摄像头相关的. 产生这个错误的原因主要在于代码控制分辨率的显示和真机测试分辨率不一样. 一:解决办法 WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE); Display display = wm.getDefaultDisplay(); Camera.Parameters parameters = camera.getParameters();// 得到摄像头的参数 para

[ArchLinux]进行更新时出现错误:GPGME error: 无数据,数据库无效的解决办法/

今天在我进行系统更新pacman -Syu时,出现了如下错误: # pacman -Syu 错误:GPGME error: 无数据 错误:GPGME error: 无数据 错误:GPGME error: 无数据 错误:GPGME error: 无数据 错误:GPGME error: 无数据 :: 正在同步软件包数据库... core 已经是最新版本 0.0 B 0.00B/s 00:00 [----------------------] 0% extra 已经是最新版本 0.0 B 0.00B/

[经使用有效]Sqlserver2005附加数据库时出错提示操作系统错误5(拒绝访问)错误5120的解决办法

sqlserver2005附加数据库时出错提示操作系统错误5(拒绝访问)错误5120的解决办法 最近几天从网上找了几个asp.net的登录案例想要研究研究代码,结果在用 Sql Server2005附加数据库文件时弹出错误信息:如下图: ,一时无解,遂求助于百度谷歌,经过各种试验,特将解决办法整理于此,希望能帮到大家,同时如果有好的意见大家多多交流啊! 方案一:切换登录方式 出现这种情况是由于用“混合验证方式”(SQL Server身份验证)登录数据库造成的,只要将登录方式改为“windows身

Appium运行时,error: Logcat capture failed: spawn ENOENT的解决办法

Appium运行的时候,查看到log输出为: info: Welcome to Appium v1.2.0 (REV e53f49c706a25242e66d36685c268b599cc18da5)info: Appium REST http interface listener started on 0.0.0.0:4723debug: Non-default server args: {"deviceName":"emulator","platfor

VS2012 error : Required file tracker.exe is missing 解决办法

初次使用VC2012 ,结果报告error : Required file tracker.exe is missing .从百度上搜索一遍,很多解决办法不靠谱,搜到靠谱的是英文版 连接如下: http://connect.microsoft.com/VisualStudio/feedback/details/540902 其实就是找到你的项目文件xxxx.vcxproj,使用编辑器打开,是xml格式的定义文件,查找关键字PropertyGroup 会发现有几个这样的配置,然后在这样的关键附近插

[转]关于[Linker error] undefined reference to `[email protected]'的解决办法

在网上搜到的一个很完整的叙述,就直接帖过来了.如下:**************************************************** 说明: 常遇到的socket网络编程问题. 在工程里已经#include <winsock2.h>了结果还是报错,郁闷死了,我用的是Dev-C++,起先还以为是IDE的问题,结果换成VC6.0还是同样的错误.最后在网上终于找到问题的原因,很快搞定了.顺便做一下笔记,以防以后再出现这种问题. VC6.0下的错误信息: error LNK20