Как отправить письмо нескольким получателям, используя drupal_mail?

8

Я использую drupal_mail для отправки электронной почты,

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

Я хочу отправить электронную почту на несколько адресов электронной почты одновременно. Должен ли я делать это?

$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);
Танвир Ахмад
источник
проверить этот пост, dropbucket.org/node/308
shrish
Эй, Танвир, возможно, подумай о том, чтобы принять другой ответ. В настоящее время принятый ответ влечет за собой риск нехватки памяти или ограничения по времени при обработке многих тысяч таких писем.
Leymannx

Ответы:

24

Параметр to drupal_mailявляется строкой, а не массивом. Но вы можете иметь столько получателей, сколько захотите, в строке «to» электронных писем, если они разделены запятыми.

Таким образом, чтобы отправить одно и то же письмо нескольким получателям, сделайте следующее:

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

Смотри также API документацию дляdrupal_mail

Свободный радикал
источник
я только говорю, что когда я пытаюсь, $to = 'one@email.com, two@email.com, three@email.com';я получаю только одно электронное письмо, но когда я пытаюсь $to = 'one@email.com,two@email.com,three@email.com';без пробелов, я получаю все письма!
Майкл
1

Используйте hook_mail для отправки нескольких получателей, передав:

$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'];
    //.
    //.
    //.
    //.
  }    
}
harshal
источник
1

Согласно PHP документу вы можете отправить только одно письмо одним вызовом функции drupal_mail. Итак, вы должны использовать цикл. пример

$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);
}
Евгений
источник
Посмотрите решение ниже от @FreeRadical для более простого способа сделать это.
Брейди
Я обновил свое сообщение, чтобы избежать путаницы. Спасибо
Евгений,
0

Если вы прочитаете документацию по функции drupal_mail, то увидите, что параметр '$ to' принимает строку, а не массив в определенных форматах, таких как:

  1. user@example.com
  2. user@example.com, anotheruser@example.com
  3. пользователь
  4. Пользователь, другой пользователь

Таким образом, мы можем легко преобразовать ваш $ в массив в требуемый формат, используя функцию выгрузки, и, следовательно, вы будете отправлять электронную почту нескольким получателям за один раз. Вот код:

$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);
Каран
источник