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

Laravel使用PHPMailer批量发邮件:多选Select参数处理报错求助

解决Laravel中PHPMailer批量发件的类型错误问题

错误原因

前端多选select的name属性为recipient[],提交后Laravel会自动将其解析为数组,但你在代码里用explode(',', $request->recipient)尝试处理数组,而explode要求第二个参数必须是字符串,这就导致了类型不匹配的错误。

修复步骤

  • 直接使用$request->recipient获取收件人数组,无需explode处理
  • 建议添加表单验证,确保提交的是合法的邮箱数组
  • 补充PHPMailer的SMTP配置和发送逻辑,否则邮件无法实际发出

修改后的控制器代码

public function sendBulkEmail(Request $request)
{
    try {
        // 验证提交的收件人是数组且包含合法邮箱
        $request->validate([
            'recipient' => 'required|array',
            'recipient.*' => 'email:rfc,dns'
        ]);

        $recipients = $request->recipient;
        $mail = new PHPMailer(true);

        // 配置SMTP服务器(根据你的邮箱服务商填写)
        $mail->isSMTP();
        $mail->Host = 'smtp.example.com'; // 示例:smtp.gmail.com、smtp.qq.com
        $mail->SMTPAuth = true;
        $mail->Username = 'your-email@example.com';
        $mail->Password = 'your-email-password'; // 注意:部分服务商需用应用专用密码
        $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
        $mail->Port = 587;

        $mail->setFrom('sender@example.com', 'Sender');
        $mail->addReplyTo('sender@example.com', 'Information');
        
        // 遍历添加收件人
        foreach ($recipients as $recipient) {
            $mail->addAddress(trim($recipient)); // 去除邮箱前后空格避免异常
        }

        $mail->isHTML(true);
        $mail->Subject = 'Request';
        $mail->Body    = 'this test message';

        // 执行发送
        $mail->send();

        return redirect()->back()->with('success', '批量邮件发送成功');
    } catch (Exception $e) {
        return redirect()->back()->with('error', "邮件发送失败: {$mail->ErrorInfo}");
    }
}

额外优化建议

  • 若担心前端提交的数组存在重复或空值,可提前过滤:
    $recipients = array_filter(array_unique(array_map('trim', $request->recipient)));
    
  • SMTP配置需根据实际邮箱服务商调整,比如QQ邮箱可使用smtp.qq.com,端口465(SSL加密)或587(TLS加密)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 09:45:30