[Drupal] メールを送信する
やりたいこと
記事タイプのノードが保存されたら管理者にメールを送る
やり方
/**
* Implements hook_ENTITY_TYPE_presave().
*/
function my_module_node_presave(NodeInterface $node) {
if ($node->bundle() === 'article') {
$mail_manager = \Drupal::service('plugin.manager.mail');
$result = $mail_manager->mail(
'my_module', // このメールに対応するhook_mailを持つモジュールのマシン名.
'my_module_node_save_mail', // メールを識別するためのキー.
\Drupal::config('system.site')->get('mail'), // 送信先.
\Drupal::config('system.site')->get('langcode'), // 言語コード.
['nid' => $node->id()] // メールの中で使用する変数等.
);
if (!$result) {
// エラーのログ等.
}
}
}
/**
* Implements hook_mail().
*/
function my_module_mail($key, &$message, $params) {
if ($key === 'my_module_node_save_mail') {
// $mail_manager->mail()の第5引数で指定した値を$paramから取得できる.
$nid = $params['nid'];
// 送信元、タイトル、本文などを定義する.
$message = [
'from' => \Drupal::config('system.site')->get('mail'), // 送信元.
'title' => 'ノードが更新されました。', // タイトル.
'body' => "NID{$nid}のノードが更新されました。", // 本文.
];
}
}
必ずhook_mailを経由しないといけない & fromとtoの定義場所がバラバラなのがわかりづらい。Simple Mailというモジュールを使うと簡略化できるようです。
simple_mail_send($from, $to, $subject, $body);
Author And Source
この問題について([Drupal] メールを送信する), 我々は、より多くの情報をここで見つけました https://qiita.com/863/items/7412a4d4ed6c1ea12d5b著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .