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

8

J'utilise drupal_mail pour envoyer des e-mails,

$to = '[email protected]';
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('[email protected]', '[email protected]', '[email protected]',);
drupal_mail('$module_name', $key, $to, language_default(), $params = array('username' => 'Tanvir'), $from = NULL, $send = TRUE);
Tanvir Ahmad
la source
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  = '[email protected],[email protected],[email protected]';
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

Radical gratuit
la source
je dis seulement que quand j'essaye $to = '[email protected], [email protected], [email protected]';je reçois seulement un email, mais quand j'essaye $to = '[email protected],[email protected],[email protected]';sans espaces j'ai reçu tous les emails!
Michael
1

Utilisez hook_mail pour envoyer plusieurs destinataires en passant:

$params = array();
$params['cc'][] = '[email protected]'
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'];
    //.
    //.
    //.
    //.
  }    
}
harshal
la source
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('[email protected]', '[email protected]', '[email protected]',);
foreach ($to as $email) {
  drupal_mail('$module_name', $key, $email, language_default(), $params = array('username' => 'Tanvir'), $from = NULL, $send = TRUE);
}
Eugène
la source
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. [email protected]
  2. [email protected], [email protected]
  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('[email protected]', '[email protected]', '[email protected]',);

//To change array('[email protected]', '[email protected]', '[email protected]',)  -> '[email protected], [email protected], [email protected]' use implode

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

drupal_mail('$module_name', $key, $to_str, language_default(), $params = array('username' => 'Tanvir'), $from = NULL, $send = TRUE);
Karan
la source