如何通过PHP配置文件与PHPMailer实现向多个邮箱地址发送邮件
问题原因
PHPMailer的addAddress、addCC、addBCC方法一次仅支持传入单个邮箱地址,直接传入逗号分隔的多地址字符串会被识别为一个无效地址,触发报错。
修改方案
你只需要修改发送逻辑中的收件人处理部分即可,修改后完全兼容原有配置写法,客户仅需在config.php中调整邮箱配置,无需改动逻辑文件:
1. 发送逻辑代码修改
将原有收件人相关代码替换为如下内容:
//Recipients $mail->setFrom($config['from'], $config['fromName']); // 处理多收件人,兼容逗号分隔字符串、数组两种配置格式,同时兼容旧版单地址配置 $sendToList = is_array($config['sendTo']) ? $config['sendTo'] : explode(',', $config['sendTo']); foreach ($sendToList as $toAddress) { $toAddress = trim($toAddress); if (!empty($toAddress)) { $mail->addAddress($toAddress); } } // 同步处理抄送多地址兼容 $sendCCList = is_array($config['sendToCC']) ? $config['sendToCC'] : explode(',', $config['sendToCC']); foreach ($sendCCList as $ccAddress) { $ccAddress = trim($ccAddress); if (!empty($ccAddress)) { $mail->addCC($ccAddress); } } // 同步处理密送多地址兼容 $sendBCCList = is_array($config['sendToBCC']) ? $config['sendToBCC'] : explode(',', $config['sendToBCC']); foreach ($sendBCCList as $bccAddress) { $bccAddress = trim($bccAddress); if (!empty($bccAddress)) { $mail->addBCC($bccAddress); } } $mail->addAddress($_POST['email']);
2. config.php配置规则
客户修改配置时遵循以下规则即可,原有单地址配置无需任何改动:
- 单收件人:和原有写法完全一致
"sendTo" => "abc@email.com", - 多收件人:用英文逗号分隔多个邮箱即可,地址前后带空格也可正常识别
"sendTo" => "abc@email.com, efg@email.com, hik@email.com", - 也可直接配置为数组格式
"sendTo" => ["abc@email.com", "efg@email.com", "hik@email.com"],
注意事项
多邮箱分隔请使用英文逗号,避免使用中文逗号、分号等其他分隔符,否则会导致地址识别错误。
内容的提问来源于stack exchange,提问作者atsngr
相关产品推荐
相关产品推荐

