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
相关产品推荐
相关产品推荐

