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

8

Estou usando o drupal_mail para enviar e-mail,

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

Radical livre
fonte
Só digo que quando tento $to = '[email protected], [email protected], [email protected]';receber apenas um e-mail, mas quando tento $to = '[email protected],[email protected],[email protected]';sem espaços, recebi todos os e-mails!
Michael
1

Use hook_mail para enviar vários destinatários passando:

$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
fonte
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('[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
fonte
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. [email protected]
  2. usuá[email protected], outro usuá[email protected]
  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('[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
fonte