You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 21:12:44