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

在PHP while循环中使用PHPMailer批量发送邮件提示类未找到问题求助

问题解决方法

你遇到的Class "PHPMailer" not found报错是因为新版PHPMailer自带命名空间,仅引入文件没有声明命名空间的话,全局空间无法直接访问PHPMailer类,解决步骤如下:

  • 第一步:在引入PHPMailer三个文件的代码后,追加命名空间声明
require_once('../includes/PHPMailer.php');
require_once('../includes/SMTP.php');
require_once('../includes/Exception.php');
// 追加下面三行命名空间声明
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;
  • 第二步:验证实例化调用逻辑
    如果加了use声明后还是报错,可以直接用带命名空间的全限定名实例化,替换原来的$mail = new PHPMailer();代码为:
$mail = new PHPMailer\PHPMailer\PHPMailer();
  • 额外问题修复&优化建议
    1. 你当前代码里的$name和$to_email两个变量没有定义就直接使用,解决类找不到的问题后会触发新报错,需要先补充这两个变量的赋值逻辑
    2. 批量发邮件不需要每次循环都新建PHPMailer实例、重复配置SMTP参数,可以把实例初始化和SMTP配置放到最外层循环外面,每次循环只需要清空旧收件人、修改邮件内容后调用send即可,大幅提升发送效率:
// 外层提前初始化一次即可
$mail = new PHPMailer();
$mail->isSMTP();
$mail->SMTPOptions = array (
    'ssl' => array (
        'verify_peer' => false,
        'verify_peer_name' => false,
        'allow_self_signed' => true
    )
);
$mail->Host = "smtp.gmail.com";
$mail->SMTPAuth = true;
$mail->SMTPSecure = "tls";
$mail->Port = "587";
$mail->Username = "from@gmail.com";
$mail->Password = "12345678";
$mail->Subject = "用药提醒通知";
$mail->isHTML(true);

// 循环内部只需要修改动态参数即可
while($row = $statement->fetch(PDO::FETCH_OBJ)) {
    // ...原有业务查询逻辑保持不变...
    $mail->clearAddresses(); // 清空上一次的收件人信息
    $mail->setFrom("from@gmail.com",$by);
    $mail->Body = "<h3>来自 {$by} 的用药提醒报告</h3></br>
                    你收到提醒:<b>{$name}</b> 漏服了 {$directions} 类药物 {$row->med_type},请及时采取对应措施。";
    $mail->addAddress($to_email['Email_add']);
    $mail->send();
}

内容的提问来源于stack exchange,提问作者Namri

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 04:57:00