我正在尝试创建一个应用程序,其中一个功能是向多个地址发送电子邮件,但这并不容易。我使用了foreach循环,但每当出现错误时,尤其是当收件人邮件地址无效时,应用程序就会停止。
这是我的代码
public function sendemails(Request $request){
$email = $this->emailSetUp($request);
$emails = $email->recipients;
foreach ($emails as $value) {
try{
$mail = Mail::to($value)->send(new SendEmail($email));
}catch( Swift_RfcComplianceException $e){
$pattern = '/[a-z0-9_-+.]+@[a-z0-9-]+.([a-z]{2,4})(?:.[a-z]{2})?/i';
preg_match_all($pattern, $e, $matches);
$match = implode(',',$matches[0]);
$mail_t_del = Email::where('email','LIKE', '%'.$match)->first();
$mail_t_del->delete();
Log::info($match .' '. 'deleted');
$email = $this->emailSetUp($request);
$mail = Mail::send(new SendEmail($email));
}
}
}
如何进行
- 将消息发送给多个收件人,并在引发异常后继续,使其不失败
- 我如何跟踪申请的进度,即了解已发送的电子邮件和被拒绝的
您可以传递一系列电子邮件。
有关的详细信息,请参阅此处
https://laravel.com/api/5.5/Illuminate/Contracts/Mail/Mailer.html#method_to
此外,我建议您创建一个自定义请求,以在处理之前检查电子邮件是否有效。
你可以在这里看到如何做到这一点:
https://laravel.com/docs/5.7/requests
-将消息发送给多个收件人
传递邮件类中的所有电子邮件
示例:
Mail::to($users)->send(new SendEmail($yourData));
将您的代码放入try-catch
以便您可以忽略异常并继续发送其他邮件
-跟踪进度
如果你想知道哪些邮件是发送的或不是
然后在catch语句异常时处理它,并将其记录在文件或DB 中
要向多个收件人发送电子邮件而不向所有收件人显示已发送的电子邮件,请尝试以下操作:此方法将循环通过为表单或数据库提供的电子邮件。在本例中,用户ID来自表单请求,然后从数据库中检索选定用户的电子邮件。
foreach($request->get_emails as $i => $a){
$user = User::find($a);
Mail::send('emails.template', ['name' => $user['name'], 'body' => $request->body], function ($m) use($user) {
$m->from('info@example.com', 'Sender Name');
$m->to($user['email'], $user['name'])->subject('this is the subject');
});
}
此外,您可以选择向所有收件人显示电子邮件。要做到这一点,请尝试:
$emails = ['eamil1@example.com', 'email2@example.com','email3@example.com'];
Mail::send('emails.template', [], function($m) use ($emails)
{
$m->to($emails)->subject('This is the email subject');
});