PHPMailer连接SMTP服务器失败报错Connection refused(111)求助
解决PHPMailer连接Yahoo SMTP出现Connection refused (111)的问题
我来帮你搞定这个PHPMailer连接Yahoo SMTP的报错问题,SMTP ERROR: Failed to connect to server: Connection refused (111)这个错误大概率是SMTP配置、账号权限或者网络限制导致的,下面是具体的排查和解决步骤:
1. 替换账号密码为Yahoo应用密码
Yahoo现在已经不再允许直接使用账号的原始密码登录SMTP服务,必须先开启两步验证,然后生成应用密码来替代原密码:
- 登录你的Yahoo账号,进入「账号安全」设置页面;
- 找到「两步验证」选项并开启;
- 开启后,在同一页面找到「应用密码」,生成一个专门用于PHPMailer的应用密码;
- 把代码里的
$m->Password = 'MY PASSWORD';替换成这个生成的应用密码。
2. 验证并调整SMTP参数
Yahoo的SMTP参数有时候会有兼容性问题,你可以尝试切换到TLS加密方式和对应端口:
- 将代码中的SSL配置改为:
相比465端口,587端口的TLS加密更不容易被服务器防火墙拦截。$m->SMTPSecure = 'tls'; // 或者用PHPMailer的常量PHPMailer::ENCRYPTION_STARTTLS $m->Port = 587;
3. 检查服务器网络限制
你的服务器可能禁止了出站的465或587端口:
- 联系你的主机服务商,确认服务器是否开放了这两个SMTP端口的出站权限;
- 如果是自己的服务器,检查防火墙/安全组规则,添加允许出站访问
smtp.mail.yahoo.com的465或587端口的规则。
4. 更新PHPMailer到最新版本
旧版本的PHPMailer可能和Yahoo的SMTP服务存在兼容性问题,运行下面的Composer命令更新:
composer update phpmailer/phpmailer
5. 完善代码并启用异常处理
原代码缺少收件人等必要配置,而且启用异常处理能更清晰地排查问题,这里给你一个完整的示例代码:
<?php require_once 'vendor/autoload.php'; use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\SMTP; use PHPMailer\PHPMailer\Exception; $m = new PHPMailer(true); // 启用异常处理 try { // SMTP配置 $m->isSMTP(); $m->SMTPAuth = true; $m->SMTPDebug = SMTP::DEBUG_SERVER; // 显示详细调试信息 $m->Host = 'smtp.mail.yahoo.com'; $m->Username = 'vagefipooya@yahoo.com'; $m->Password = '你的Yahoo应用密码'; // 替换为生成的应用密码 $m->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; $m->Port = 587; // 邮件基本信息 $m->setFrom('pouyavey@gmail.com', 'Pouya Va'); $m->addAddress('收件人邮箱@example.com'); // 添加收件人邮箱 $m->isHTML(true); $m->Subject = '测试PHPMailer发送邮件'; $m->Body = '<h2>这是一封测试邮件</h2><p>通过PHPMailer发送</p>'; $m->AltBody = '这是纯文本版本的邮件内容,用于不支持HTML的邮箱'; // 发送邮件 $m->send(); echo '邮件发送成功!'; } catch (Exception $e) { echo "邮件发送失败:{$m->ErrorInfo}"; } ?>
内容的提问来源于stack exchange,提问作者user9668370
相关产品推荐
相关产品推荐

