Laravel Mail:: send() отправка нескольких адресов или адресов
Я не могу успешно отправить адреса несколько при использовании обратного вызова Laravel Mail::send()
, однако код работает, когда я укажу только один получатель.. p >
Я пробовал цепочку:
// for example
$emails = array("[email protected]", "[email protected]");
$input = Input::all();
Mail::send('emails.admin-company', array('body' => Input::get('email_body')),
function($message) use ($emails, $input) {
$message
->from('[email protected]', 'Administrator')
->subject('Admin Subject');
foreach ($emails as $email) {
$message->to($email);
}
});
и передачи массива:
// for example
$emails = array("[email protected]", "[email protected]");
$input = Input::all();
Mail::send('emails.admin-company', array('body' => Input::get('email_body')),
function($message) use ($emails, $input) {
$message
->from('[email protected]', 'Administrator')
->subject('Admin Subject');
$message->to($emails);
});
но ни один из них не работает, и я получаю сообщения об ошибке при возврате Mail:: failures(), var_dump() Mail:: failures() показывает адреса электронной почты, которые я пытался отправить, например:
array(2) {
[0]=>
string(18) "[email protected]mail.com"
[1]=>
string(18) "[email protected]"
}
Очевидно, что что-то не так, оценит любую помощь, поскольку я не понимаю API: http://laravel.com/api/4.2/Illuminate/Mail/Message.html#method_to
Я понимаю, что могу поместить метод Mail::send()
в цикл for/foreach и Mail::send()
для каждого адреса электронной почты, но это не кажется мне оптимальным решением, я надеялся, что смогу до ->bcc()
ко всем адресам, когда все работает, чтобы получатели не увидели, кому еще отправляется почта.
Ответы
Ответ 1
Я тестировал его, используя следующий код:
$emails = ['[email protected]m', '[email protected]','[email protected]'];
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
. Поэтому сначала убедитесь, что вы можете отправлять электронную почту только одному пользователю, а затем тестировать свой код у многих пользователей.
Кроме того, используя этот простой код, ни одно из моих сообщений электронной почты не было доставлено на бесплатные почтовые учетные записи, я получил только электронные письма для входящих почтовых ящиков, которые у меня есть на моих платных хостинговых счетах, поэтому, вероятно, они были пойманы некоторыми фильтрами (это, может быть, простая тема/проблема с содержимым, но я упомянул об этом на всякий случай, если вы не получили некоторые электронные письма).
Ответ 2
Если вы хотите отправлять электронные письма одновременно всем администраторам, вы можете сделать что-то вроде этого:
В вашем .ENV файле добавьте все электронные письма как значения, разделенные запятыми:
[email protected],[email protected],[email protected]
поэтому, когда вы собираетесь отправлять электронную почту, просто сделайте это (да! метод "to" экземпляра построителя сообщений принимает массив):
Итак,
$to = explode(',', env('ADMIN_EMAILS'));
и...
$message->to($to);
теперь отправит почту всем администраторам.
Ответ 3
принятый ответ больше не работает с laravel 5.3, потому что почтовая программа пытается получить доступ к ->email
и приводит к
ОшибкаException в строке Mailable.php 376: попытка получить свойство не-объект
рабочий код для laravel 5.3 таков:
$users_temp = explode(',', '[email protected],[email protected]');
$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));
Ответ 4
В Laravel 5.6, если вы хотите передать несколько электронных писем с именами, вам нужно передать массив ассоциативных массивов. Пример помещения нескольких получателей в массив $to
:
$to[] = array('email' => $email, 'name' => $name);
Исправлено два получателя:
$to = [['email' => '[email protected]', 'name' => 'User One'],
['email' => '[email protected]', 'name' => 'User Two']];
Ключ 'name' не обязателен. Вы можете установить его на 'name' => NULL
или не добавлять в ассоциативный массив, тогда будет использоваться только 'email'
.
Ответ 5
Это отлично работает - у меня есть доступ к объекту запроса и массиву электронной почты
$emails = ['[email protected]', '[email protected]'];
Mail::send('emails.lead', ['name' => $name, 'email' => $email, 'phone' => $phone], function ($message) use ($request, $emails)
{
$message->from('[email protected]', 'Joe Smoe');
// $message->to( $request->input('email') );
$message->to( $emails);
//Add a subject
$message->subject("New Email From Your site");
});
Ответ 6
Приведенное ниже решение позволяет отправлять одно электронное письмо на несколько адресов одновременно. Он отлично работает с Laravel 5.4 и выше. Например, если следующие адреса электронной почты являются желаемыми получателями, скажем:
'[email protected]', '[email protected]', '[email protected]', '[email protected]', '[email protected]',
Mail::to('[email protected]')
->cc(['[email protected]','[email protected]','[email protected]','[email protected]'])
->send(new document());
где document - это любой класс, который дополнительно настраивает вашу электронную почту.
Ответ 7
Я использую Laravel 5.6 и Фасад уведомлений.
Если я устанавливаю переменную с запятой, разделяющей электронные письма, и пытаюсь отправить ее, я получаю сообщение об ошибке:
"Указанный адрес электронной почты не соответствует RFC 2822, 3.6.2"
Итак, чтобы решить проблему, я получил идею решения от @Toskan, кодирующую следующее.
// Get data from Database
$contacts = Contacts::select('email')
->get();
// Create an array element
$contactList = [];
$i=0;
// Fill the array element
foreach($contacts as $contact){
$contactList[$i] = $contact->email;
$i++;
}
.
.
.
\Mail::send('emails.template', ['templateTitle'=>$templateTitle, 'templateMessage'=>$templateMessage, 'templateSalutation'=>$templateSalutation, 'templateCopyright'=>$templateCopyright], function($message) use($emailReply, $nameReply, $contactList) {
$message->from('[email protected]', 'Some Company Name')
->replyTo($emailReply, $nameReply)
->bcc($contactList, 'Contact List')
->subject("Subject title");
});
У меня получилось отправить одному или нескольким получателям. 😉
Ответ 8
он работает для меня отлично,
если у вас есть строка, то сначала просто взорвите ее.
$emails = array();
Mail::send('emails.maintenance',$mail_params, function($message) use ($emails) {
foreach ($emails as $email) {
$message->to($email);
}
$message->subject('My Email');
});