2014-10-27 7 views
32

ich nicht erfolgreich mehrere scheinen Adressen zu senden, wenn Laravel des Mail::send() Rückruf verwenden, wird der Code jedoch arbeiten, wenn ich nur ein Empfänger angeben.Laravel Mail :: send() oder bcc zu mehreren Senden Adressen

Ich habe versucht, Verkettungs:

// 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 Übergabe eines Arrays:

// 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 weder zu funktionieren scheint und ich erhalte Meldungen Fehler, wenn Mail :: Ausfälle() zurückkehrt, ein var_dump() von Mail :: Ausfällen() zeigt die e-Mail-Adressen, die ich versuchte zu senden, zum Beispiel:

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

Offensichtlich tun s omething falsch wäre jede Hilfe dankbar, da ich bin nicht die API zu verstehen entweder: http://laravel.com/api/4.2/Illuminate/Mail/Message.html#method_to

Ich weiß, ich die Mail::send() Methode in einer für/foreach-Schleife und Mail::send() für jede E-Mail-Adresse setzen könnte, aber dies scheint nicht zu Ich war die optimale Lösung, ich hoffte, ich wäre auch in der Lage zu ->bcc() an alle Adressen, sobald alles funktionierte, so dass die Empfänger nicht sehen würden, wer sonst die Mail gesendet wird.

+0

mehr Code anzeigen. Haben Sie versucht, dort vorhandene E-Mails einzufügen? Welche Fehlermeldungen erhalten Sie? –

+0

Was meinen Sie mit bestehenden E-Mails? Ich sende es an gültige E-Mail-Adressen, wenn Sie das meinen? Fügt den Fehlermeldungen mehr Code hinzu. Vielen Dank. – haakym

Antwort

66

ich getestet habe es mit dem folgenden Code:

$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 Ausfälle.

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

Mit diesem einfachen Code wurde keine meiner E-Mails an kostenlose E-Mail-Konten übermittelt, ich habe nur E-Mails an Posteingänge, die ich auf meinen bezahlten Hosting-Konten habe, wahrscheinlich wurden sie von einigen Filtern abgefangen (es ist vielleicht ein einfaches Thema)/Inhalt Problem, aber ich habe es erwähnt, nur für den Fall, dass Sie nicht einige E-Mails erhalten haben).

+0

Danke für Ihre Antwort. Anscheinend habe ich nichts falsch gemacht, aber meine IP bei der Arbeit war nicht in der Lage, E-Mails außerhalb unserer Domain weiterzuleiten! Alles sortiert und funktioniert jetzt. Danke noch einmal. – haakym

+8

@haakym Deshalb, wenn etwas nicht funktioniert, sollten Sie immer versuchen, den einfachsten Code zu verwenden und sicherzustellen, dass es ohne ein Problem funktioniert. Oft sind Probleme nicht dort, wo man sie erwartet. –

+1

Wenn ich irgendwo den Namen der Belege schreiben möchte, wie kann ich das machen? –

-8

es funktioniert für mich gut, wenn Sie eine Zeichenfolge haben, dann explodieren Sie es zuerst.

$ emails = array();

Mail::send('emails.maintenance',$mail_params, function($message) use ($emails) { 
    foreach ($emails as $email) { 
     $message->to($email); 
    } 

    $message->subject('My Email'); 
}); 
+0

Dies würde N E-Mails an N Empfänger senden. Das Ziel ist es, 1 E-Mail an N Empfänger zu senden. – KalC

9

Wenn Sie E-Mails wollen alle Admins gleichzeitig senden, können Sie etwas tun:

In Ihrem .env Datei fügen Sie alle E-Mails als comma separated values:

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

Wenn Sie also die E-Mail senden, tun Sie dies (Ja! Die 'to' -Methode der Nachrichtenerstellungsinstanz akzeptiert ein Array):

So,

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

und ...

$message->to($to); 

wird nun die E-Mail an alle Administratoren senden.

+0

Beste Antwort für die Verwendung der .env-Datei –

+0

Sie sollten nicht direkt auf die ENV verweisen - verwenden Sie den Config-Helper. – voidstate

0

Dies funktioniert gut - ich Zugriff auf das Request-Objekt haben und die 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

Wie kann ich '' '$ message-> ($ emails);' '' aber den Namen der Empfänger verwenden? – JCarlos

+0

@JCarlos haben die E-Mail die Taste des assoziativen Arrays, '['[email protected]' => 'Joe', '[email protected]' => 'Jack']' – Grant

7

die akzeptierte Antwort ist nicht Arbeit nicht mehr mit Laravel 5,3 weil verschickbaren versucht ->email und Ergebnisse für den Zugriff auf in

Error in Mailable.php Linie 376: der Versuch, Eigentum von nicht-Objekt zu erhalten

ein Arbeitscode für Laravel 5.3 ist dies:

$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)); 
+0

Vielen Dank für diese Antwort. Sparte mir viel Zeit und Trauer. Ist diese Änderung absichtlich, weil es zu viel Code für etwas scheint, das sehr kurz sein sollte. Ich definiere meine to() -Funktion mit einer Variablen $ to = [(Objekt) ['Name' => 'Beispielname', 'E-Mail' => '[email protected]'], (Objekt) ['Name '=>' Beispielname 2 ',' email '=>' [email protected] ']]; ' – Anthony

+0

Die akzeptierte Antwort funktioniert jedoch für mich in Laravel 5.4 – GTCrais