web-dev-qa-db-fra.com

Laravel Mail :: send () envoi vers plusieurs adresses ou adresses cci

Il semble impossible d'envoyer avec succès à plusieurs adresses lors de l'utilisation du rappel Mail::send() de Laravel. Le code fonctionne toutefois lorsque je spécifie uniquement le destinataire un.

J'ai essayé de chaîner:

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

et passer un tableau:

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

mais ni l'un ni l'autre ne semble fonctionner et je reçois des messages d'échec lors du renvoi de Mail :: failures (), un var_dump () de Mail :: failures () affiche les adresses électroniques auxquelles j'ai essayé d'envoyer, par exemple:

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

Clairement, faire quelque chose de mal, apprécierait toute aide, car je ne comprends pas non plus l'API: http://laravel.com/api/4.2/Illuminate/Mail/Message.html#method_to

Je me rends compte que je pourrais mettre la méthode Mail::send() dans une boucle for/foreach et Mail::send() pour chaque adresse e-mail, mais cela ne me semble pas être la solution optimale. J'espérais pouvoir aussi ->bcc() toutes les adresses une fois que tout fonctionnait pour que les destinataires ne voient pas à qui le courrier est envoyé.

47
haakym

Je l'ai testé en utilisant le code suivant:

$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;

Résultat - tableau vide pour les échecs.

Mais bien sûr, vous devez configurer votre app/config/mail.php correctement. Assurez-vous d'abord que vous pouvez envoyer un courrier électronique à un seul utilisateur, puis testez votre code avec de nombreux utilisateurs. 

De plus, en utilisant ce code simple, aucun de mes courriels n’était livré à des comptes de messagerie gratuits, je n’ai reçu que des courriels vers des boîtes de réception que j’ai sur mes comptes d’hébergement payants. Je l’ai mentionné au cas où vous n’auriez pas reçu d’e-mails).

85
Marcin Nabiałek

Si vous voulez envoyer des emails simultanément à tous les administrateurs, vous pouvez faire quelque chose comme ceci:

Dans votre fichier .env, ajoutez tous les emails en tant que valeurs séparées par des virgules:

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

alors quand vous allez envoyer un email, faites simplement ceci (oui! la méthode 'to' de l'instance du générateur de message accepte un tableau):

Alors,

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

et...

$message->to($to);

va maintenant envoyer le courrier à tous les administrateurs.

15
Abhishek

la réponse acceptée ne fonctionne plus avec {laravel 5.3, car _non ne fonctionne plus car mailable essaie d’accéder à ->email et aboutit à 

ErrorException dans Mailable.php, ligne 376: tentative d'obtention de la propriété de non-objet

un code de travail pour laravel 5.3 est la suivante: 

$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

Avec Laravel 5.6, si vous voulez transmettre plusieurs courriels avec des noms, vous devez transmettre un tableau de tableaux associatifs. Exemple poussant plusieurs destinataires dans le tableau $to:

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

Correction de deux destinataires:

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

La clé 'nom' n'est pas obligatoire. Vous pouvez le définir sur 'name' => NULL ou ne pas ajouter de valeur au tableau associatif, alors seul 'email' sera utilisé.

5
plus5volt

J'utilise Laravel 5.6 et la façade des notifications.

Si je définit une variable avec une virgule séparant les e-mails et que je tente de l'envoyer, le message d'erreur suivant s'affiche:

Donc, pour résoudre le problème, j'ai eu l'idée de la solution de @Toskan, en codant ce qui suit.

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

Cela a fonctionné pour moi d'envoyer à un ou plusieurs destinataires. ????

0

Cela fonctionne très bien - j'ai accès à l'objet de requête et au tableau d'email

        $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