Làm cách nào để gửi email đến nhiều người nhận bằng drupal_mail?


8

Tôi đang sử dụng drupal_mail để gửi email,

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

Tôi muốn gửi email đến nhiều địa chỉ email cùng một lúc. Tôi có nên làm điều này?

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

kiểm tra bài đăng này, dropbucket.org/node/308
thu nhỏ

Này Tanvir, có thể xem xét chấp nhận một câu trả lời khác. Câu trả lời hiện được chấp nhận có nguy cơ hết bộ nhớ hoặc giới hạn thời gian khi xử lý hàng ngàn email như vậy.
leymannx

Câu trả lời:


24

Tham số đến drupal_maillà một chuỗi, không phải là một mảng. Nhưng bạn có thể có nhiều người nhận như bạn muốn trong chuỗi "đến" e-mail, miễn là chúng được phân tách bằng dấu phẩy.

Vì vậy, để gửi cùng một thư đến nhiều người nhận, hãy làm như sau:

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

Cũng có tài liệu API chodrupal_mail


Tôi chỉ nói rằng khi tôi thử $to = 'one@email.com, two@email.com, three@email.com';tôi chỉ nhận được một email, nhưng khi tôi cố gắng $to = 'one@email.com,two@email.com,three@email.com';không có khoảng trống tôi đã nhận được tất cả các email!
Michael

1

Sử dụng hook_mail để gửi nhiều người nhận bằng cách chuyển:

$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

Theo tài liệu PHP, bạn chỉ có thể gửi một chữ cái thông qua một cuộc gọi của hàm drupal_mail. Vì vậy, bạn nên sử dụng chu kỳ. Thí dụ

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

Xem giải pháp dưới đây từ @FreeRadical để biết cách đơn giản hơn.
Brady

Tôi cập nhật tin nhắn của tôi để tránh nhầm lẫn. Cảm ơn bạn
Eugene

0

Nếu bạn đọc tài liệu hàm drupal_mail thì bạn sẽ thấy '$ to' param chấp nhận chuỗi không phải là một mảng ở các định dạng nhất định như:

  1. user@example.com
  2. user@example.com, Anotheruser@example.com
  3. Người dùng
  4. Người dùng, Người dùng khác

Vì vậy, chúng tôi có thể dễ dàng chuyển đổi $ thành mảng thành định dạng bắt buộc bằng cách sử dụng chức năng implode và do đó bạn sẽ gửi email cho nhiều người nhận trong một lần. Đây là mã:

$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);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.