¿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@email.com';
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('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);


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  = '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);

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


Solo digo que cuando lo intento $to = 'one@email.com, two@email.com, three@email.com';, recibo solo un correo electrónico, pero cuando lo intento $to = 'one@email.com,two@email.com,three@email.com';sin espacios, recibí todos los correos electrónicos.
Michael

1

Use hook_mail para enviar múltiples destinatarios pasando:

$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

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('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);
}

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. usuario@ejemplo.com
  2. usuario@ejemplo.com, otrousuario@ejemplo.com
  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('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);
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.