【问题标题】:How to send email to multiple recipients laravel如何向多个收件人发送电子邮件 laravel
【发布时间】:2019-04-22 10:49:12
【问题描述】:

我正在尝试创建一个应用程序,其中一项功能是将电子邮件发送到多个地址,但这并不容易。我使用了一个 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));      
       }
   }

}

我怎么能

  1. 通过在抛出异常后继续,将消息发送给多个收件人并使其防故障。
  2. 我如何跟踪申请的进度,即知道已发送的电子邮件和已被拒绝的电子邮件。

【问题讨论】:

  • 你试过只传递一个地址数组吗?

标签: php laravel email eloquent swiftmailer


【解决方案1】:

您可以传递一系列电子邮件。

详情请看这里

https://laravel.com/api/5.5/Illuminate/Contracts/Mail/Mailer.html#method_to

另外我建议您创建一个自定义请求以在处理之前检查以确保电子邮件有效。

您可以在此处查看操作方法:

https://laravel.com/docs/5.7/requests

【讨论】:

【解决方案2】:

- 将消息发送给多个收件人

传递邮件类中的所有电子邮件

例子:

 Mail::to($users)->send(new SendEmail($yourData));

将您的代码放入 try catch

这样您就可以忽略异常并继续发送其他邮件

- 跟踪进度

如果你想知道哪些邮件被发送或不发送

然后在 catch 语句异常上处理它并将其记录到文件或数据库中

【讨论】:

  • 我将我的代码包装在 try catch 中,但循环在第一次失败后不会继续,我在我的 forloop 中使用了 'continue' 关键字
【解决方案3】:

要向多个收件人发送电子邮件而不向所有收件人显示已发送的电子邮件,请尝试以下操作: 此方法将遍历为表单或数据库提供的电子邮件。在此示例中,用户 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');    
    });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-02
    • 1970-01-01
    • 2019-03-01
    • 2012-05-18
    • 2017-12-05
    • 2015-08-29
    相关资源
    最近更新 更多