如何使用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/

嗨,坦维尔,也许考虑接受其他答案。当前接受的答案在处理成千上万的电子邮件时存在内存不足或时间限制的风险。
leymannx

Answers:


24

to的to参数drupal_mail是字符串,而不是数组。但是,如果电子邮件中的“收件人”字符串之间用逗号分隔,则可以有任意多个收据。

因此,要将同一封邮件发送给多个收件人,请执行以下操作:

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

Se的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'];
    //.
    //.
    //.
    //.
  }    
}

1

根据PHP doc,您只能通过一次调用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中的以下解决方案。
2015年

我更新了邮件以避免混淆。谢谢
尤金(Eugene)2015年

0

如果您阅读drupal_mail函数文档,则会看到'$ to'参数接受某些格式的字符串,而不是数组,例如:

  1. user@example.com
  2. user@example.com,另一个user@example.com
  3. 用户
  4. 用户,另一个用户

因此,我们可以使用爆破功能轻松地将$ to数组转换为所需格式,因此您将可以一次将电子邮件发送给多个收件人。这是代码:

$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);
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.