Bagaimana cara mengirim email ke banyak penerima menggunakan drupal_mail?

8

Saya menggunakan drupal_mail untuk mengirim email,

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

Juga dokumentasi API untukdrupal_mail

Radikal bebas
sumber
saya hanya mengatakan bahwa ketika saya mencoba $to = '[email protected], [email protected], [email protected]';saya hanya menerima satu email, tetapi ketika saya mencoba $to = '[email protected],[email protected],[email protected]';tanpa spasi saya menerima semua email!
Michael
1

Gunakan hook_mail untuk mengirim banyak penerima dengan mengirimkan:

$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
sumber
1

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

$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
sumber
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. [email protected]
  2. [email protected], [email protected]
  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('[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
sumber