프로그래밍 방식으로 이메일을 보내는 방법은 무엇입니까?


답변:


63

hook_maildrupal_mail 을 사용 하여 전자 우편을 작성하고 보낼 수 있습니다.

전자 우편 사용 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;
  }
}

메일을 보내려면 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이 호출됩니다

5
그는 맞지만, hook_mail을 명확하게하는 것은 사용자가 정의한 임의의 키를 기반으로 이메일을 구성하고 테마를 지정할 수있는 방법을 제공합니다. drupal_mail ()은 이메일을 보내기 위해 호출하는 것입니다. 사용하려는 구조의 키를 전달하십시오. (및 해당 키에 응답하는 모듈)
Jason Smith

9
이 예 $message['to']에서는에 하드 코딩되어 foo@bar.com있습니다. 이것을 생략하면 drupal_mail()호출 될 때 지정된 수신자에게 메시지가 전송됩니다 .
pfrenssen

12

보다 간단한 이메일 전송 방법을 원하면 Simple Mail을 확인하십시오 . Drupal 7+로 이메일을 훨씬 쉽게 보낼 수 있도록 노력하고있는 모듈이며 추가 후크 구현이나 MailSystem 지식이 필요하지 않습니다. 이메일 보내기는 다음과 같이 간단합니다.

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

... 그리고 그것은 정확히 동일한 API로 Drupal 8에서도 작동합니다 :)
geerlingguy

1

당신은 이메일을 전송하는 간단한 방법을 사용하여 확인할 수 있습니다 mailsystem을 ; 모듈입니다.

<?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.
}
?>

완벽하게 작동합니다.
WM

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

그런 다음 위의 기능을 다음과 같이 사용할 수 있습니다.

        $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');
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.