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

Laravel邮件测试:如何从数组随机选择收件邮箱?

解决方案

1. 修正测试邮箱数组的写法

你之前的数组写法存在两个问题:一是重复给同一个索引的Email属性赋值,最终只会保留最后一个邮箱;二是未初始化对象就直接赋值,会触发报错。正确的做法是构建多个模拟业务数据结构的对象元素:

// 测试用邮箱数组,模拟原数据的对象结构
$testEmails = [
    (object) ['Email' => 'random1@gmail.com'],
    (object) ['Email' => 'random2@gmail.com'],
    (object) ['Email' => 'random3@gmail.com'],
    (object) ['Email' => 'random4@gmail.com'],
];

如果业务逻辑需要用到$email->Location查询位置,也可以给每个测试对象补充该属性:

$testEmails = [
    (object) ['Email' => 'random1@gmail.com', 'Location' => '测试地点A'],
    (object) ['Email' => 'random2@gmail.com', 'Location' => '测试地点B'],
    // 其他测试邮箱...
];

2. 修改循环逻辑,随机选择测试邮箱发送

在原循环中替换真实收件邮箱,改用从测试数组中随机选取的地址发送,保留原有业务逻辑不变:

foreach ($emails as $key => $email){
    try {
        $location = Location::whereName($email->Location)->first();
        
        // 从测试邮箱数组中随机获取一个收件地址
        $randomRecipient = $testEmails[array_rand($testEmails)]->Email;
        
        // 发送邮件到随机测试邮箱,而非真实收件人
        Mail::to($randomRecipient)->send(new NewPatientWelcome($apptRequest, $email, $location));
    } catch (Exception $e) {
        continue;
    }
}

补充说明

  • array_rand($testEmails)会随机返回测试数组的一个索引,通过该索引即可拿到对应的测试邮箱对象;
  • 如果不需要每次循环都随机,也可以固定使用某一个测试邮箱,比如直接取$testEmails[0]->Email。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 14:07:32