欢迎光临
我们一直在努力

phpmailer邮件发送失败提示SMTP Connect() failed解决方法汇总

最近公司网站后台运行了不少定时任务,为了防止 这些定时任务出现异常,加上了一个phpmailer的功能。

定时任务执行成功会发邮件提醒我。执行失败也会邮件提醒任务失败和相关的异常信息,方便及时针对错误进行快速处理。

大概的代码可以查phpmailer官方的文档,发邮件的功能,非常简单。

PHPMailer官方提供的使用php发送邮件的代码为:

<?php
require 'PHPMailerAutoload.php';
mail = new PHPMailer;mail->isSMTP(); // Set mailer to use SMTP
mail->Host = 'smtp1.example.com;smtp2.example.com'; // Specify main and backup SMTP serversmail->SMTPAuth = true; // Enable SMTP authentication
mail->Username = 'user@example.com'; // SMTP usernamemail->Password = 'secret'; // SMTP password
mail->SMTPSecure = 'tls'; // Enable encryption, 'ssl' also acceptedmail->From = 'from@example.com';
mail->FromName = 'Mailer';mail->addAddress('joe@example.net', 'Joe User'); // Add a recipient
mail->addAddress('ellen@example.com'); // Name is optionalmail->addReplyTo('info@example.com', 'Information');
mail->addCC('cc@example.com');mail->addBCC('bcc@example.com');
mail->WordWrap = 50; // Set word wrap to 50 charactersmail->addAttachment('/var/tmp/file.tar.gz'); // Add attachments
mail->addAttachment('/tmp/image.jpg', 'new.jpg'); // Optional namemail->isHTML(true); // Set email format to HTML
mail->Subject = 'Here is the subject';mail->Body = 'This is the HTML message body <b>in bold!</b>';
mail->AltBody = 'This is the body in plain text for non-HTML mail clients';
if(!mail->send()) {
echo 'Message could not be sent.';
echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
echo 'Message has been sent';
}

在使用的时候,要修改一下:
我使用的是QQ邮箱发送邮件,修改方法为

$mail->isSMTP();
$mail->CharSet = "utf-8"; //设置采用utf-8中文编码(内容不会乱码)
$mail->Host = "smtp.qq.com";
$mail->Port = 465;
$mail->SMTPSecure = 'ssl';
$mail->SMTPAuth = true;

然后写上帐号密码就可以发送邮件了。

遇到 的问题是本地正常发送邮件了,传到一台临时服务器出错了,传到线上正常的。为了找到原因。仔细做了检查。
提示信息为:SMTP Connect() failed。本地正常,临时服务器不正常,应该与代码无关,与PHP环境或者Apache环境有关系。
网上流传的解决方案是:
linux 下 用phpmailer类smtp发送邮件始终不成功,
开启DEBUG提示:ERROR: Failed to connect to server: (0)
SMTP Connect() failed
===============
在windows下测试是完全没有问题的,传到网上的linux的VPS或者虚拟主机发送邮件不行,开启debug后,出现的错误是这样的,我在windows下测试这个smtp服务器是可以连接的,到了Linux就不行呢?
网上有很多解决方案,第一是防火墙禁止端口的说法,但是否决,我本地有一台装linux用作本地测试用的服务器,我传到本地,同样不能发送,也是这样的错误。不过这里我关闭了selinux,iptables。都还是不行。证明应该不是端口的问题。
解决方案二:php的scoktes这个没开启。我用phpinfo查看了下,绝对的没问题,scoktes这个选项是 开启的。
方案三:用pfsockopen 函数替换 fsockopen函数 ,有的说替换以上的函数可以,但是测试后还是不行
CSDN上某人说解决过,但是又不留方法。如果是我,我肯定留下方案。
研究了很多终于知道了,原来是服务器的php.ini 禁用了fsockopen函数。
你可以打开php.ini。有两个地方可能禁用此函数:

1、 allow_url_fopen = On选项是否为ON,为OFF时函数将被禁用
2、查看 disable_functions = ..........后有没有 fsockopen。如果有去掉

检查之后发现并不是这个问题。
仔细思索才发现我们的SMTP使用的是SSL登陆到QQ的SMTP服务器。
打开测试PHP环境,发现并没有开启php_openssl模块,汗一个。

开启之后一切正常。。。

现在可以放心了,不管成功还是异常,都会收到邮件提醒!
自己在搭建PHP环境的时候,一些常用的模块还是必须要开启的。
比如php 5.3以上的mb-string、openssl、curl、mysql、mysqli、pdo_mysql等。

有些特别的情况下,可以自己监控一些特别的东西,定时发邮件,PHP来处理也是蛮方便的。

赞(0)
未经允许不得转载:飘云 » phpmailer邮件发送失败提示SMTP Connect() failed解决方法汇总
分享到: 更多 (0)