it-swarm.com.de

Laravel Mail :: send () Senden an mehrere Adressen oder Bcc-Adressen

Ich kann anscheinend nicht erfolgreich an multiple -Adressen senden, wenn ich den Mail::send()-Callback von Laravel verwende. Der Code funktioniert jedoch, wenn ich nur one -Empfänger angeben.

Ich habe versucht, zu ketten:

// 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);
        }
});

und ein Array übergeben:

// 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);
});

aber beides scheint nicht zu funktionieren, und ich erhalte Fehlermeldungen, wenn Mail :: failures () zurückgegeben wird. Ein var_dump () von Mail :: failures () zeigt die E-Mail-Adressen an, an die ich zu senden versuchte. Beispiel:

array(2) {
  [0]=>
  string(18) "[email protected]"
  [1]=>
  string(18) "[email protected]"
}

Klar etwas falsch zu machen, würde mich über jede Hilfe freuen, da ich die API auch nicht verstehe: http://laravel.com/api/4.2/Illuminate/Mail/Message.html#method_to

Ich erkenne, dass ich die Mail::send()-Methode in eine for/foreach-Schleife und Mail::send() für jede E-Mail-Adresse einfügen könnte, aber dies scheint mir nicht die optimale Lösung zu sein. Ich hatte gehofft, dass ich auch einmal alle Adressen ->bcc() kann funktionierte, sodass die Empfänger nicht sehen konnten, an wen die E-Mail sonst gesendet wurde.

47
haakym

Ich habe es mit folgendem Code getestet:

$emails = ['[email protected]', '[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;

Ergebnis - leeres Array für Fehler.

Natürlich müssen Sie Ihren app/config/mail.php richtig konfigurieren. Stellen Sie daher zunächst sicher, dass Sie E-Mails nur an einen Benutzer senden können und testen Sie dann Ihren Code mit vielen Benutzern. 

Mit diesem einfachen Code wurde keine meiner E-Mails an kostenlose E-Mail-Konten übermittelt. Ich erhielt nur E-Mails an Posteingänge, die ich auf meinen kostenpflichtigen Hosting-Konten hinterlegt habe. Wahrscheinlich wurden sie von einigen Filtern abgefangen (möglicherweise handelt es sich jedoch um ein einfaches Thema/Inhalt-Problem Ich erwähnte es nur für den Fall, dass Sie keine E-Mails erhalten haben.

85

Wenn Sie E-Mails gleichzeitig an alle Admins senden möchten, können Sie Folgendes tun:

Fügen Sie in Ihrer .env-Datei alle E-Mails als durch Kommas getrennte Werte hinzu:

[email protected],[email protected],[email protected]

wenn Sie also die E-Mail senden, tun Sie dies einfach (ja! Die 'to'-Methode der Message Builder Instanz akzeptiert ein Array)

So,

$to = explode(',', env('ADMIN_EMAILS'));

und...

$message->to($to);

verschickt nun die Mail an alle Admins.

15
Abhishek

die akzeptierte Antwort funktioniert not nicht mehr mit Laravel 5.3, da mailable versucht, auf ->email zuzugreifen und zu resultieren 

ErrorException in Mailable.php Zeile 376: Der Versuch, die Eigenschaft .__ abzurufen. kein Objekt

ein Funktionscode für Laravel 5.3 ist: 

$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));
9
Toskan

Wenn Sie mit Laravel 5.6 mehrere E-Mails mit Namen übergeben möchten, müssen Sie ein Array assoziativer Arrays übergeben. Beispiel für das Verschieben mehrerer Empfänger in das $to-Array:

$to[] = array('email' => $email, 'name' => $name);

Zwei Empfänger wurden behoben:

$to = [['email' => '[email protected]', 'name' => 'User One'], 
       ['email' => '[email protected]', 'name' => 'User Two']];

Der 'Name'-Schlüssel ist nicht obligatorisch. Sie können es auf 'name' => NULL setzen oder das assoziative Array nicht hinzufügen. Dann wird nur 'email' verwendet.

5
plus5volt

Ich verwende Laravel 5.6 und die Notifications Facade.

Wenn ich eine Variable mit Komma setze, die die E-Mails trenne und versuche, sie zu senden, erhalte ich die Fehlermeldung: "Adresse in Mail stimmt nicht mit RFC 2822, 3.6.2 überein."

Um das Problem zu lösen, erhielt ich die Lösungsidee von @Toskan, die Folgendes codiert.

        // 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");
            });

Es funktionierte für mich, an einen oder mehrere Empfänger zu senden. ????

0

Das funktioniert großartig - ich habe Zugriff auf das Anforderungsobjekt und das E-Mail-Array

        $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");
        });
0
Radmation

Mit der folgenden Lösung können Sie eine einzelne E-Mail an mehrere Adressen gleichzeitig senden. Es funktioniert gut mit Laravel 5.4 und höher . Zum Beispiel, wenn die folgenden E-Mail-Adressen Ihre gewünschten Empfänger sind, sagen Sie: '[email protected]', '[email protected]', '[email protected] .com "," [email protected] "," [email protected] ",

Mail::to('[email protected]')
    ->cc(['[email protected]','[email protected]','[email protected]','[email protected]'])
    ->send(new document());

dabei ist document eine Klasse, die Ihre E-Mail weiter anpasst.

0