Кажется, я не могу успешно отправить несколько адресов при использовании обратного вызова Mail::send()
, но код работает, когда я укажу только одного получателя.
Я пробовал цепочку:
// for example $emails = array("myemail1@email.com", "myemail2@email.com"); $input = Input::all(); Mail::send('emails.admin-company', array('body' => Input::get('email_body')), function($message) use ($emails, $input) { $message ->from('admin@admin.org', 'Administrator') ->subject('Admin Subject'); foreach ($emails as $email) { $message->to($email); } });
и передавая массив:
// for example $emails = array("myemail1@email.com", "myemail2@email.com"); $input = Input::all(); Mail::send('emails.admin-company', array('body' => Input::get('email_body')), function($message) use ($emails, $input) { $message ->from('admin@admin.org', 'Administrator') ->subject('Admin Subject'); $message->to($emails); });
но ни один из них не работает, и я получаю сообщения об ошибках при возврате Mail :: failures (), var_dump () Mail :: failures () показывает адреса электронной почты, которые я пытался отправить, например:
array(2) { [0]=> string(18) "myemail1@email.com" [1]=> string(18) "myemail2@email.com" }
Очевидно, что что-то не так, я бы по достоинству оценил любую помощь, поскольку я не понимаю API: http://laravel.com/api/4.2/Illuminate/Mail/Message.html#method_to
Я понимаю, что могу поместить метод Mail::send()
в цикле for / foreach и Mail::send()
для каждого адреса электронной почты, но это не кажется мне оптимальным решением, я надеялся, что буду также иметь возможность ->bcc()
ко всем адресам, когда все работает, чтобы получатели не увидели, кому еще отправляется почта.
Я протестировал его, используя следующий код:
$emails = ['myoneemail@esomething.com', 'myother@esomething.com','myother2@esomething.com']; Mail::send('emails.welcome', [], function($message) use ($emails) { $message->to($emails)->subject('This is test e-mail'); }); var_dump( Mail:: failures()); exit;
Результат – пустой массив для сбоев.
Но, конечно, вам нужно правильно настроить ваше app/config/mail.php
. Поэтому сначала убедитесь, что вы можете отправлять электронную почту только одному пользователю, а затем тестировать свой код у многих пользователей.
Кроме того, используя этот простой код, ни одно из моих сообщений электронной почты не было доставлено на бесплатные почтовые учетные записи, я получил только электронные письма для входящих почтовых ящиков, которые у меня есть на моих платных хостинговых счетах, поэтому, вероятно, они были пойманы некоторыми фильтрами (это, может быть, простая тема / проблема с контентом, но Я упомянул об этом на всякий случай, если вы не получили некоторые электронные письма).
Если вы хотите отправлять электронные письма одновременно всем администраторам, вы можете сделать что-то вроде этого:
В файле .env добавьте все электронные письма как значения, разделенные запятыми:
ADMIN_EMAILS=admin1@site.com,admin2@site.com,admin3@site.com
поэтому, когда вы отправляете сообщение электронной почты, просто сделайте это (да! метод экземпляра сообщения для метода message to accept принимает массив):
Так,
$to = explode(',', env('ADMIN_EMAILS'));
а также…
$message->to($to);
теперь отправит почту всем администраторам.
принятый ответ больше не работает с laravel 5.3, потому что почтовая программа пытается получить доступ ->email
и результаты в
ОшибкаException в строке Mailable.php 376: попытка получить свойство не объекта
рабочий код для laravel 5.3 таков:
$users_temp = explode(',', 'first@example.com,second@example.com'); $users = []; foreach($users_temp as $key => $ut){ $ua = []; $ua['email'] = $ut; $ua['name'] = 'test'; $users[$key] = (object)$ua; } Mail::to($users)->send(new OrderAdminSendInvoice($o));
Это отлично работает – у меня есть доступ к объекту запроса и массиву электронной почты
$emails = ['tester@blahdomain.com', 'anotheremail@blahdomian.com']; Mail::send('emails.lead', ['name' => $name, 'email' => $email, 'phone' => $phone], function ($message) use ($request, $emails) { $message->from('no-reply@yourdomain.com', 'Joe Smoe'); // $message->to( $request->input('email') ); $message->to( $emails); //Add a subject $message->subject("New Email From Your site"); });
он работает для меня отлично, если у вас есть строка, а затем просто взорвите ее в первую очередь.
$ emails = array ();
Mail::send('emails.maintenance',$mail_params, function($message) use ($emails) { foreach ($emails as $email) { $message->to($email); } $message->subject('My Email'); });