Bagaimana cara mengirim email secara terprogram?

45

Saya ingin menggunakan sistem email Drupal untuk secara terprogram mengirim email dari modul khusus saya. Apakah itu mungkin?

Naoise Golden
sumber
pertanyaan ini terkait dengan: drupal.stackexchange.com/questions/84268/…
pinueve

Jawaban:

63

Menggunakan hook_mail dan drupal_mail Anda dapat membuat dan mengirim email.

Terapkan e-mail menggunakan hook_mail:

function MODULENAME_mail ($key, &$message, $params) {
  switch ($key) {
    case 'mymail':
      // Set headers etc
      $message['to'] = '[email protected]';
      $message['subject'] = t('Hello');
      $message['body'][] = t('Hello @username,', array('@username' => $params['username']));
      $message['body'][] = t('The main part of the message.');
      break;
  }
}

Untuk mengirim email gunakan drupal_mail:

drupal_mail($module, $key, $to, $language, $params = array('username' => 'John Potato'), $from = NULL, $send = TRUE)

Jelas ganti parameter: $ key harus sama dengan 'mymail'

Email dikirimkan dalam beberapa langkah:

  1. drupal_mail dipanggil
  2. Drupal membuat email
  3. hook_mail dipanggil untuk spesifik (implementasi)
  4. hook_mail_alter dipanggil sehingga modul lain dapat memodifikasinya
  5. drupal_send_mail dipanggil
Bart
sumber
5
Dia benar, tetapi untuk memperjelas sedikit hook_mail memberi Anda cara untuk menyusun dan menentukan tema email berdasarkan kunci arbitrer yang Anda tetapkan. drupal_mail () adalah apa yang Anda panggil untuk mengirim email. Berikan kunci untuk struktur yang ingin Anda gunakan. (dan modul yang merespons kunci itu)
Jason Smith
9
Dalam contoh $message['to']ini kode sulit untuk [email protected]. Abaikan ini dan pesan akan dikirim ke penerima yang ditentukan saat drupal_mail()dipanggil.
pfrenssen
12

Jika Anda ingin cara yang lebih sederhana untuk mengirim email, lihat Simple Mail ; ini adalah modul yang saya kerjakan untuk membuat pengiriman email dengan Drupal 7+ jauh lebih mudah, dan tidak memerlukan implementasi hook tambahan atau pengetahuan MailSystem. Mengirim surel semudah:

simple_mail_send($from, $to, $subject, $message);
geerlingguy
sumber
... dan itu bekerja dengan Drupal 8, juga, dengan API yang sama persis :)
geerlingguy
1

Anda dapat menggunakan cara sederhana mengirim email, periksa mailsystem ; itu sebuah modul.

<?php
$my_module = 'foo';
$from = variable_get('system_mail', '[email protected]');
$message = array(
  'id' => $my_module,
  'from' => $from,
  'to' => '[email protected]',
  'subject' => 'test',
  'body' => 'test',
  'headers' => array(
    'From' => $from, 
    'Sender' => $from, 
    'Return-Path' => $from,
  ),
);

$system = drupal_mail_system($my_module, $my_mail_token);
if ($system->mail($message)) {
  // Success.
}
else {
  // Failure.
}
?>
rahulkumar.it
sumber
Bekerja dengan sempurna.
WM
0

Anda dapat menggunakan kode ini di hook pilihan Anda sendiri dalam modul khusus Anda:

 function yourmodulename_mail($from = 'default_from', $to, $subject, $message) {
            $my_module = 'yourmodulename';
            $my_mail_token = microtime();
            if ($from == 'default_from') {
                // Change this to your own default 'from' email address.
                $from = variable_get('system_mail', '[email protected]');
            }
            $message = array(
                'id' => $my_module . '_' . $my_mail_token,
                'to' => $to,
                'subject' => $subject,
                'body' => array($message),
                'headers' => array(
                    'From' => $from,
                    'Sender' => $from,
                    'Return-Path' => $from,
                ),
            );
            $system = drupal_mail_system($my_module, $my_mail_token);
            $message = $system->format($message);
            if ($system->mail($message)) {
                return TRUE;
            } else {
                return FALSE;
            }
        }

Kemudian Anda dapat menggunakan fungsi di atas seperti ini:

        $user = user_load($userid); // load a user using its uid
        $usermail = (string) $user->mail; // load user email to send a mail to it OR you can specify an email here to which the email will be sent 
        customdraw_mail('default_from', $usermail, 'You Have Won a Draw -- this is the subject',  'Congrats! You have won a draw --this is the body');
Nadeem Khan
sumber