Como enviar email para vários destinatários usando drupal_mail?


8

Estou usando o drupal_mail para enviar e-mail,

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

Desejo enviar email para vários endereços de email ao mesmo tempo. Eu deveria estar fazendo isso?

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

verifique esta publicação, dropbucket.org/node/308
shrish 6/06/14

Ei Tanvir, talvez considere aceitar uma resposta diferente. A resposta atualmente aceita implica o risco de ficar sem memória ou limite de tempo ao processar milhares de emails como esse.
leymannx 29/03

Respostas:


24

O parâmetro to drupal_mailé uma string, não uma matriz. Mas você pode ter quantos destinatários desejar na sequência de e-mails "para", desde que separados por vírgulas.

Para enviar o mesmo email para vários destinatários, faça o seguinte:

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

Consulte também a documentação da API paradrupal_mail


Só digo que quando tento $to = 'one@email.com, two@email.com, three@email.com';receber apenas um e-mail, mas quando tento $to = 'one@email.com,two@email.com,three@email.com';sem espaços, recebi todos os e-mails!
Michael

1

Use hook_mail para enviar vários destinatários 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

De acordo com o documento PHP, você pode enviar apenas uma letra por meio de uma chamada da função drupal_mail. Então, você deve usar o ciclo. Exemplo

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

Veja a solução abaixo em @FreeRadical para uma maneira mais simples de fazer isso.
Brady

Atualizei minha mensagem para evitar confusões. Obrigado
Eugene

0

Se você ler a documentação da função drupal_mail, verá '$ to' param aceita string não uma matriz em determinados formatos como:

  1. user@example.com
  2. usuário@exemplo.com, outro usuário@exemplo.com
  3. Do utilizador
  4. Usuário, Outro Usuário

Assim, podemos converter facilmente seu $ para array no formato necessário usando a função implode e, portanto, você deverá enviar um email para vários destinatários de uma só vez. Aqui está o 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);
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.