Comment envoyer un e-mail à plusieurs destinataires à l'aide de drupal_mail?


8

J'utilise drupal_mail pour envoyer des e-mails,

$to = 'email@email.com';
drupal_mail('$module_name', $key, $to, language_default(), $params = array('username' => 'Tanvir'), $from = NULL, $send = TRUE);

Je souhaite envoyer des e-mails à plusieurs adresses e-mail à la fois. Dois-je faire ça?

$to  = array('one@email.com', 'two@email.com', 'three@email.com',);
drupal_mail('$module_name', $key, $to, language_default(), $params = array('username' => 'Tanvir'), $from = NULL, $send = TRUE);

consultez cet article, dropbucket.org/node/308
2014

Hey Tanvir, peut-être envisager d'accepter une réponse différente. La réponse actuellement acceptée comporte le risque de manquer de mémoire ou de limite de temps lors du traitement de plusieurs milliers de courriels comme celui-ci.
leymannx

Réponses:


24

Le paramètre to drupal_mailest une chaîne, pas un tableau. Mais vous pouvez avoir autant de destinataires que vous le souhaitez dans les e-mails "à", à condition qu'ils soient séparés par des virgules.

Donc, pour envoyer le même courrier à plusieurs destinataires, procédez comme suit:

$to  = 'one@email.com,two@email.com,three@email.com';
drupal_mail('$module_name', $key, $to, language_default(), $params = array('username' => 'Tanvir'), $from = NULL, $send = TRUE);

Voir aussi la documentation de l'API pourdrupal_mail


je dis seulement que quand j'essaye $to = 'one@email.com, two@email.com, three@email.com';je reçois seulement un email, mais quand j'essaye $to = 'one@email.com,two@email.com,three@email.com';sans espaces j'ai reçu tous les emails!
Michael

1

Utilisez hook_mail pour envoyer plusieurs destinataires en passant:

$params = array();
$params['cc'][] = 'abc@ex.org'
drupal_mail('$module_name', 'custom_key', $to, language_default(), $params = array('username' => 'Tanvir'), $from = NULL, $send = TRUE);


//hook will be the module name

function hook_mail($key,&$message,$params) {

  if ($key == 'custom_key') {
    $message['headers']['cc'] = $params['cc'];
    //.
    //.
    //.
    //.
  }    
}

1

Selon PHP doc, vous ne pouvez envoyer qu'une seule lettre via un seul appel de la fonction drupal_mail. Donc, vous devez utiliser le cycle. Exemple

$to  = array('one@email.com', 'two@email.com', 'three@email.com',);
foreach ($to as $email) {
  drupal_mail('$module_name', $key, $email, language_default(), $params = array('username' => 'Tanvir'), $from = NULL, $send = TRUE);
}

Voir la solution ci-dessous de @FreeRadical pour un moyen plus simple de le faire.
Brady

J'ai mis à jour mon message pour éviter toute confusion. Merci
Eugene

0

Si vous lisez la documentation de la fonction drupal_mail, vous verrez que le paramètre '$ to' accepte une chaîne et non un tableau dans certains formats comme:

  1. user@example.com
  2. user@example.com, anotheruser@example.com
  3. Utilisateur
  4. Utilisateur, un autre utilisateur

Ainsi, nous pouvons facilement convertir votre $ en tableau au format requis en utilisant la fonction imploser et donc vous devrez envoyer un e-mail à plusieurs destinataires en une seule fois. Voici le code:

$to  = array('one@email.com', 'two@email.com', 'three@email.com',);

//To change array('one@email.com', 'two@email.com', 'three@email.com',)  -> 'one@email.com, two@email.com, three@email.com' use implode

$to_str = implode(",", $to);

drupal_mail('$module_name', $key, $to_str, language_default(), $params = array('username' => 'Tanvir'), $from = NULL, $send = TRUE);
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.