¿Cómo enviar correos electrónicos a múltiples destinatarios usando drupal_mail?

8

Estoy usando drupal_mail para enviar correos electrónicos,

$to = '[email protected]';
drupal_mail('$module_name', $key, $to, language_default(), $params = array('username' => 'Tanvir'), $from = NULL, $send = TRUE);

Quiero enviar correos electrónicos a varias direcciones de correo electrónico a la vez. ¿Debería estar haciendo esto?

$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
fuente
mira
shrish
Hola Tanvir, tal vez considere aceptar una respuesta diferente. La respuesta actualmente aceptada conlleva el riesgo de quedarse sin memoria o límite de tiempo al procesar miles de correos electrónicos como ese.
leymannx

Respuestas:

24

El parámetro to drupal_mailes una cadena, no una matriz. Pero puede tener tantos destinatarios como desee en la cadena "a" de correos electrónicos, siempre que estén separados por comas.

Entonces, para enviar el mismo correo a múltiples destinatarios, haga lo siguiente:

$to  = '[email protected],[email protected],[email protected]';
drupal_mail('$module_name', $key, $to, language_default(), $params = array('username' => 'Tanvir'), $from = NULL, $send = TRUE);

Véase también la documentación API paradrupal_mail

Radicales libres
fuente
Solo digo que cuando lo intento $to = '[email protected], [email protected], [email protected]';, recibo solo un correo electrónico, pero cuando lo intento $to = '[email protected],[email protected],[email protected]';sin espacios, recibí todos los correos electrónicos.
Michael
1

Use hook_mail para enviar múltiples destinatarios pasando:

$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
fuente
1

Según PHP doc, solo puede enviar una carta a través de una llamada a la función drupal_mail. Entonces, debes usar el ciclo. Ejemplo

$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);
}
Eugene
fuente
Vea la solución a continuación de @FreeRadical para una forma más sencilla de hacerlo.
Brady
Actualicé mi mensaje para evitar confusiones. Gracias
Eugene
0

Si lee la documentación de la función drupal_mail, verá que '$ to' param acepta cadenas, no una matriz en ciertos formatos como:

  1. [email protected]
  2. [email protected], [email protected]
  3. Usuario
  4. Usuario, otro usuario

Por lo tanto, podemos convertir fácilmente su $ a matriz en el formato requerido usando la función implode y, por lo tanto, deberá enviar correos electrónicos a múltiples destinatarios de una sola vez. Aquí está el código:

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