Come inviare e-mail a più destinatari utilizzando drupal_mail?


8

Sto usando drupal_mail per inviare e-mail,

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

Voglio inviare e-mail a più indirizzi e-mail contemporaneamente. Dovrei farlo?

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

controlla questo post, dropbucket.org/node/308
shrish

Ehi Tanvir, forse potresti accettare una risposta diversa. La risposta attualmente accettata comporta il rischio di rimanere senza memoria o di un limite di tempo durante l'elaborazione di molte migliaia di e-mail del genere.
leymannx

Risposte:


24

Il parametro to drupal_mailè una stringa, non una matrice. Ma puoi avere tutti i destinatari che desideri nelle stringhe "a" delle e-mail, a condizione che siano separati da virgole.

Quindi, per inviare la stessa posta a più destinatari, procedi come segue:

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

Vedi anche la documentazione API perdrupal_mail


dico solo che quando provo $to = 'one@email.com, two@email.com, three@email.com';ricevo una sola email, ma quando provo $to = 'one@email.com,two@email.com,three@email.com';senza spazi ho ricevuto tutte le email!
Michael,

1

Usa hook_mail per inviare più destinatari passando:

$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

Secondo il documento PHP è possibile inviare solo una lettera tramite una chiamata della funzione drupal_mail. Quindi, dovresti usare il ciclo. Esempio

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

Vedi la soluzione di seguito da @FreeRadical per un modo più semplice di farlo.
Brady,

Ho aggiornato il mio messaggio per evitare confusione. Grazie
Eugene,

0

Se leggi la documentazione della funzione drupal_mail, vedrai che '$ to' param accetta string non un array in determinati formati come:

  1. user@example.com
  2. user@example.com, anotheruser@example.com
  3. Utente
  4. Utente, un altro utente

Quindi, possiamo facilmente convertire i $ in array nel formato richiesto utilizzando la funzione implode e quindi dovrai inviare e-mail a più destinatari in una volta sola. Ecco il codice:

$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);
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.