Bagaimana cara mengirim email ke banyak penerima menggunakan drupal_mail?


8

Saya menggunakan drupal_mail untuk mengirim email,

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

Saya ingin mengirim email ke beberapa alamat email sekaligus. Haruskah saya melakukan ini?

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

periksa posting ini, dropbucket.org/node/308
shrish

Hai Tanvir, mungkin pertimbangkan untuk menerima jawaban yang berbeda. Jawaban yang saat ini diterima melibatkan risiko kehabisan memori atau batas waktu ketika memproses ribuan email seperti itu.
leymannx

Jawaban:


24

Parameter to drupal_mailadalah string, bukan array. Tetapi Anda dapat memiliki sebanyak mungkin penerima dalam string email "ke", asalkan dipisahkan oleh koma.

Jadi untuk mengirim email yang sama ke banyak penerima, lakukan hal berikut:

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

Juga dokumentasi API untukdrupal_mail


saya hanya mengatakan bahwa ketika saya mencoba $to = 'one@email.com, two@email.com, three@email.com';saya hanya menerima satu email, tetapi ketika saya mencoba $to = 'one@email.com,two@email.com,three@email.com';tanpa spasi saya menerima semua email!
Michael

1

Gunakan hook_mail untuk mengirim banyak penerima dengan mengirimkan:

$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

Menurut PHP doc Anda hanya dapat mengirim satu huruf melalui satu panggilan fungsi drupal_mail. Jadi, Anda harus menggunakan siklus. Contoh

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

Lihat solusi di bawah ini dari @FreeRadical untuk cara yang lebih sederhana dalam melakukan ini.
Brady

Saya memperbarui pesan saya untuk menghindari kebingungan. Terima kasih
Eugene

0

Jika Anda membaca dokumentasi fungsi drupal_mail maka Anda akan melihat param '$ to' menerima string bukan array dalam format tertentu seperti:

  1. user@example.com
  2. user@example.com, anotheruser@example.com
  3. Pengguna
  4. Pengguna, Pengguna Lain

Jadi, kami dapat dengan mudah mengkonversi $ Anda ke array ke format yang diperlukan menggunakan fungsi implode dan karenanya Anda akan mengirim email ke beberapa penerima sekaligus. Berikut kodenya:

$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);
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.