PHPmailer发送邮件SMTP Error:Could not authenticate

今天在使用phpmailer发送smtp邮件时提示 SMTP Error: Could not authenticate 错误,其中密码帐号都是正确的,邮箱也设置开启了SMTP功能。

上谷歌百度了一遍,有的说是服务器禁用了端口,有的说把class.phpmailer.php中的

 代码如下function IsSMTP() {<br> $this->Mailer = 'smtp';<br> }改为 function IsSMTP() {<br> $this->Mailer = 'SMTP';<br> }
1function IsSMTP() {
$this->Mailer = 'smtp';
}改为
2function IsSMTP() {
$this->Mailer = 'SMTP';
}

测试以后还是不行,心中郁闷的一米。最后在一篇博客中找到了解决方法,先分享出来让更多遇到同样问题的人能得到帮助!


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

 代码如下// connect to the smtp server<br> $this->smtp_conn = @fsockopen($host,// the host of the server<br>     $port,// the port to use<br>     $errno,   // error number if any<br>     $errstr,  // error message if any<br>     $tval);   // give up after ? secs
1// 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函数

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

 
;extension=php_sockets.dll

 
;extension=php_openssl.dll

然后重启一下

因为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);
1$this->smtp_conn = stream_socket_client("tcp://".$host.":".$port, $errno,  $errstr,  $tval);

这样就可以了。


如果上面办法还是没有解决可能是邮箱自动过滤你机器自动登录邮箱发邮件了哦,我是使用下面办法解决的

刚开始使用的qq的帐号,提示上面错误。换成新注册的163帐号可以正常发送。


之后换了一个qq等级比较高的帐号,这下可以正常发送,没有报任何错误。

因为收件人用的是qq邮箱帐号,所以发件帐号用qq的邮箱比较好,这样发送过多不会轻易的被拦截或判为垃圾邮件。

所以结论就是配置中使用一个qq等级比较高的帐号(我的一个小号等级2个月亮可以正常使用,当然等级越高越好,)

ps:也要查看邮箱中“设置邮件地址黑名单”及“收信规则”,有时系统会自动将一些邮箱自动加入黑名单的

原文:http://www.111cn.net/phper/28/52710.htm
根据你提供的错误日志,以下是可能导致问题的原因以及解决办法: --- ### 1. **检查SMTP服务器是否正确** - 错误提示显示无法连接到SMTP服务器 (`Failed to connect to server`),首先确认 `Host` 地址是否正确。 - 例如对于QQ邮箱,应该是 `'smtp.qq.com'`。如果是其他邮件服务商,请查阅其官方文档获取正确的SMTP地址。 --- ### 2. **网络连通性问题** - 确认当前环境能够访问外部网络,并且可以到达目标SMTP服务器(如 `smtp.qq.com`)。 - 尝试通过命令行工具Ping或Telnet测试是否能成功建立连接: ```bash telnet smtp.qq.com 465 ``` 如果连接失败,可能是因为防火墙、代理或者端口被禁用了。 --- ### 3. **端口与加密方式的问题** - 默认情况下,QQ邮箱推荐使用以下配置之一: - SSL 加密 + 端口 465 - 或者 TLS 加密 + 端口 587 - 如果目前使用的加密方式和端口有问题,可以修改为另一种组合。比如将代码改为: ```php $mail->SMTPSecure = 'tls'; $mail->Port = 587; ``` --- ### 4. **验证SMTP权限和服务状态** - 确保你的QQ邮箱开启了SMTP服务。如果没有开启,请前往 [QQ邮箱设置页面](https://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1001256) 打开该选项。 - 同时注意,部分免费邮箱会限制每天发送邮件数量或频率,若超出范围则可能出现此类错误。 --- ### 5. **授权码是否有效** - 对于QQ邮箱等第三方平台来说,直接输入账号密码并不能用于登录SMTP服务,而需提供由系统生成的应用程序专属授权码。 - 转到 [QQ安全中心] -> 【管理帐号】->【生成授权码】,然后复制新的授权码替换原有的 `$mail->Password` 字段内容。 --- ### 改进版示例代码 结合上述所有建议后调整如下所示: ```php <?php use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception; require 'PHPMailer/SMTP.php'; require 'PHPMailer/PHPMailer.php'; require 'PHPMailer/Exception.php'; $mail = new PHPMailer(true); try { $mail->isSMTP(); $mail->Host = 'smtp.qq.com'; // SMTP主机名 $mail->SMTPAuth = true; // 是否需要认证 /* 替换为你自己的实际数据 */ $mail->Username = 'your_email@qq.com'; // 用户名 (即发件人的完整电子邮件地址) $mail->Password = 'your_auth_code'; // 授权码而非真实密码 $mail->SMTPSecure = 'ssl'; // 设置加密协议:tls | ssl $mail->Port = 465; // 端口号 // 其他基础设置... $mail->setFrom('your_email@qq.com', '昵称'); $mail->addAddress('recipient@example.com'); $mail->isHTML(true); $mail->Subject = '主题'; $mail->Body = '正文内容'; if ($mail->send()) { echo "邮件发送!"; } else { echo "发送失败:" . $mail->ErrorInfo; } } catch (Exception $e) { echo "发生异常:" . $mail->ErrorInfo; } ?> ``` --- ####
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值