Reputation: 151
I am trying to create an application where one of the features is to send email to multiple addresses, and it has not been easy. I used a foreach loop, but whenever an error occurs, most especially if the recipient mail address is not valid the application stops.
This is my code
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));
}
}
}
How can i
Upvotes: 1
Views: 9189
Reputation: 573
To send an email to multiple recipients without displaying the sent email to all recipients, try this: This method will loop through the emails supplied for form or database. in this example the user IDs come from form requests, then, email is retrieved from the database for selected users.
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('[email protected]', 'Sender Name');
$m->to($user['email'], $user['name'])->subject('this is the subject');
});
}
Also, you may choose to display emails to all recipient. To do that, try:
$emails = ['[email protected]', '[email protected]','[email protected]'];
Mail::send('emails.template', [], function($m) use ($emails)
{
$m->to($emails)->subject('This is the email subject');
});
Upvotes: 0
Reputation: 2855
- Send the message to multiple recipients
pass all the emails in your mail class
Example:
Mail::to($users)->send(new SendEmail($yourData));
put your codes in try catch
so that you can ignore exception and continue to send other mails
- Track the progress
If you want to get which mails are sent or not
then handle it on catch statement exception and log it in file or DB
Upvotes: 2
Reputation: 1366
You can pass an array of emails.
see here for details
https://laravel.com/api/5.5/Illuminate/Contracts/Mail/Mailer.html#method_to
Also I suggest that you create a custom request to check to make sure that emails are valid before processing.
You can see how to do that here:
https://laravel.com/docs/5.7/requests
Upvotes: 2