Làm thế nào để lập trình gửi email?


Câu trả lời:


63

Sử dụng hook_mail và drupal_mail, bạn có thể tạo và gửi e-mail.

Triển khai e-mail sử dụng hook_mail:

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

Để gửi thư, hãy sử dụng drupal_mail:

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

Rõ ràng thay thế các tham số: $ key phải bằng 'mymail'

Một e-mail được gửi trong một vài bước:

  1. drupal_mail được gọi
  2. Drupal xây dựng e-mail
  3. hook_mail được gọi cho các chi tiết cụ thể (thực hiện)
  4. hook_mail_alter được gọi để các mô-đun khác có thể sửa đổi nó
  5. drupal_send_mail được gọi

5
Anh ấy đúng, nhưng để làm rõ một chút hook_mail cung cấp cho bạn một cách để cấu trúc và tạo chủ đề cho một email dựa trên một khóa tùy ý mà bạn xác định. drupal_mail () là những gì bạn gọi để gửi email. Truyền chìa khóa cho cấu trúc bạn muốn sử dụng. (và mô-đun phản hồi phím đó)
— Jason Smith

9
Trong ví dụ $message['to']này là mã hóa cứng foo@bar.com. Bỏ qua điều này và tin nhắn sẽ được gửi đến người nhận được chỉ định khi drupal_mail()được gọi.
— pfrenssen

12

Nếu bạn muốn một cách đơn giản hơn để gửi email, hãy xem Simple Mail ; đó là một mô-đun tôi đang làm việc để gửi email với Drupal 7+ dễ dàng hơn nhiều và nó không yêu cầu bất kỳ triển khai hook nào hoặc kiến ​​thức về MailSystem. Gửi một email đơn giản như:

simple_mail_send($from, $to, $subject, $message);

... và nó cũng hoạt động với Drupal 8, với cùng một API chính xác :)
— geummingguy

1

Bạn có thể sử dụng một cách đơn giản hơn để gửi email, kiểm tra mailsystem ; đó là một mô-đun.

<?php
$my_module = 'foo';
$from = variable_get('system_mail', 'organization@example.com');
$message = array(
  'id' => $my_module,
  'from' => $from,
  'to' => 'test@example.com',
  '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.
}
?>

Hoạt động hoàn hảo.
— WM

0

Bạn có thể sử dụng mã này trong một móc của sự lựa chọn của riêng bạn trong mô-đun tùy chỉnh của bạn:

 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', 'admin@yoursite.com');
            }
            $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;
            }
        }

Sau đó, bạn có thể sử dụng chức năng trên như thế này:

        $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');
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 cookie và Chính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.