Drupalのメールシステムを使用して、カスタムモジュールからプログラムでメールを送信したいと思います。それは可能ですか?
この質問は、にリンクされている:drupal.stackexchange.com/questions/84268/...
—
pinueve
Drupalのメールシステムを使用して、カスタムモジュールからプログラムでメールを送信したいと思います。それは可能ですか?
回答:
使用hook_mailをしてdrupal_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'と等しくなければなりません
電子メールはいくつかの手順で送信されます。
$message['to']
は、にハードコードされていfoo@bar.com
ます。これを省略すると、drupal_mail()
呼び出されたときに指定された受信者にメッセージが送信されます。
メールを送信するより簡単な方法が必要な場合は、Simple Mailをチェックしてください。これは、Drupal 7+を使用したメールの送信をはるかに簡単にするために取り組んでいるモジュールであり、追加のフック実装やMailSystemの知識は必要ありません。メールの送信は次のように簡単です:
simple_mail_send($from, $to, $subject, $message);
メールを送信するより簡単な方法を使用して、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.
}
?>
このコードは、カスタムモジュール内の任意のフックで使用できます。
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');