使用PHPMailer+Post方法发邮件时SMTP错误111的解决方法
解决PHPMailer SMTP 111连接被拒绝错误
核心排查与修复步骤
- 修正SMTP服务器配置
代码中mail.example.com是占位符,必须替换为真实可用的SMTP地址:- 企业域名邮箱(如阿里云、腾讯企业邮)对应地址为
smtp.xxx.com(例如阿里云是smtp.aliyun.com) - 个人邮箱(如QQ、Gmail)对应地址为
smtp.qq.com、smtp.gmail.com
同时确保Port与SMTPSecure匹配:TLS对应587端口,SSL对应465端口,禁止混用。
- 企业域名邮箱(如阿里云、腾讯企业邮)对应地址为
- 补全SMTP认证信息
生产环境必须填写正确的SMTP密码,部分邮箱(如QQ、Gmail)需使用授权码而非登录密码,代码中空密码会导致认证失败或连接被拦截。 - 排查网络与防火墙限制
- 本地环境:关闭或配置防火墙,允许PHP程序访问外部SMTP端口
- 服务器环境:检查安全组/防火墙是否开放587/465端口,确认服务商未封禁SMTP出站请求
- 测试SMTP连通性
在终端执行命令测试:telnet 你的SMTP地址 端口(例如telnet smtp.qq.com 587),若无法连接,说明网络或服务器本身存在问题。 - 确认SMTP服务状态
若使用自建SMTP服务器,需确保Postfix、Sendmail等服务已启动并监听对应端口。
修正后的示例代码(以QQ邮箱为例)
<?php require 'PHPMailer.php'; require 'SMTP.php'; require 'Exception.php'; if ($_SERVER['REQUEST_METHOD'] === 'POST') { $recipientEmail = $_POST['email']; $mail = new PHPMailer\PHPMailer\PHPMailer(); $mail->isSMTP(); $mail->Host = 'smtp.qq.com'; // 替换为实际SMTP地址 $mail->SMTPAuth = true; $mail->Username = '你的QQ邮箱账号'; $mail->Password = '你的QQ邮箱授权码'; // 使用邮箱授权码而非登录密码 $mail->SMTPSecure = 'tls'; $mail->Port = 587; $mail->setFrom('你的QQ邮箱账号', 'Yarko'); $mail->addAddress($recipientEmail); $mail->Subject = 'Тема листа'; $mail->Body = 'Привіт'; if ($mail->send()) { echo 'Лист успішно надіслано'; } else { echo 'Помилка під час надсилання листа: ' . $mail->ErrorInfo; } } ?>
额外注意事项
- 务必禁用
mail.example.com这类占位符,使用真实有效的SMTP服务器 - 部分邮箱需在后台手动开启POP3/SMTP服务(如QQ邮箱需在设置中开启)
- 本地开发可使用MailHog等工具模拟邮件发送,避免外部SMTP连接被拦截
内容的提问来源于stack exchange,提问作者Yaroslav Bychkov
相关产品推荐
相关产品推荐

