Как программно отправлять электронную почту?

Я хотел бы использовать систему электронной почты Drupal для программной отправки электронной почты из моего настраиваемого модуля. Возможно ли это?

40 голосов | спросил Naoise Golden 8 J000000Friday11 2011, 23:48:33

4 ответа


61

Используя hook_mail и drupal_mail вы можете создать и отправить электронное письмо.

Внедрить использование электронной почты 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;
  }
}

Для отправки почты используйте drupal_mail:

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

Очевидно, заменить параметры: $ key должен равняться 'mymail'

Электронное письмо отправляется в несколько шагов:

  1. drupal_mail называется
  2. Drupal создает электронную почту
  3. hook_mail вызывается для специфики (реализации)
  4. hook_mail_alter вызывается так, чтобы другие модули могли его модифицировать.
  5. drupal_send_mail вызывается
ответил Bart 8 J000000Friday11 2011, 23:52:42
10

Если вам нужен более простой способ отправки электронной почты, ознакомьтесь с Простой почтой ; это модуль, над которым я работаю, чтобы упростить отправку писем с помощью Drupal 7+, и это не требует каких-либо дополнительных реализаций перехвата или знаний MailSystem. Отправка сообщения электронной почты так же проста, как:

simple_mail_send($from, $to, $subject, $message);
ответил geerlingguy 28 +04002013-10-28T21:54:21+04:00312013bEurope/MoscowMon, 28 Oct 2013 21:54:21 +0400 2013, 21:54:21
1

Вы можете использовать более простой способ отправки электронной почты, проверить почтовую систему ; это модуль.

<?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 24 MarpmMon, 24 Mar 2014 13:32:40 +04002014-03-24T13:32:40+04:0001 2014, 13:32:40
0

Вы можете использовать этот код в своем собственном выборе в своем пользовательском модуле:

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

Затем вы можете использовать вышеуказанную функцию следующим образом:

        $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 24 MarpmMon, 24 Mar 2014 13:02:23 +04002014-03-24T13:02:23+04:0001 2014, 13:02:23

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132