Drupal 8.のカスタムモジュールでメールの送信をいじっています。メールは送信されましたが、件名と本文が空です。何日も問題があり、取得できません。コードとvar_dumpは次のとおりです。問題を見つけることができません。たぶん誰かができるでしょう!
hook_mail
のコード:
<?php
/**
* Implements hook_mail().
*/
function document_mail($key, $message, $params)
{
$options = array(
'langcode' => $message['langcode'],
);
switch ($key) {
case 'send_file':
$message['from'] = \Drupal::config('system.site')->get('mail');
$message['subject'] = t('@title', array('@title' => $params['mail_title']), $options);
$message['body'][] = $params['message'];
break;
}
}
メールを送信するコード:
$mailManager = \Drupal::service('plugin.manager.mail');
$module = 'document';
$key = 'send_file';
$to = '[email protected]';
$params['mail_title'] = 'a title';
$params['message'] = 'a message';
$langcode = \Drupal::currentUser()->getPreferredLangcode();
$send = true;
$result = $mailManager->mail($module, $key, $to, $langcode, $params, null, $send);
var_dump($result);
if ($result['result'] !== true) {
drupal_set_message(t('There was a problem sending your message and it was not sent.'), 'error');
} else {
drupal_set_message(t('Your message has been sent.'));
}
mailManagerの$ resultからの結果のvar_dump
array(12) {
["id"]=> string(18) "document_send_file"
["module"]=> string(8) "document"
["key"]=> string(9) "send_file"
["to"]=> string(24) "[email protected],"
["from"]=> string(22) "[email protected]"
["reply-to"]=> NULL
["langcode"]=> string(2) "en"
["params"]=> array(2)
{
["mail_title"]=> string(7) "a title"
["message"]=> string(9) "a message"
}
["send"]=> bool(true)
["subject"]=> object(Drupal\Core\StringTranslation\TranslatableMarkup)#410 (5)
{
["string":protected]=> string(6) "@title"
["translatedMarkup":protected]=> NULL
["options":protected]=> array(1)
{
["langcode"]=> string(2) "en"
}
["stringTranslation":protected]=> NULL
["arguments":protected]=> array(1)
{
["@title"]=> string(7) "a title"
}
}
["body"]=> array(1)
{
[0]=> string(9) "a message"
}
["headers"]=> array(7)
{
["MIME-Version"]=> string(3) "1.0"
["Content-Type"]=> string(51) "text/plain; charset=UTF-8; format=flowed; delsp=yes"
["Content-Transfer-Encoding"]=> string(4) "8Bit"
["X-Mailer"]=> string(6) "Drupal"
["Return-Path"]=> string(22) "[email protected]"
["Sender"]=> string(22) "[email protected]"
["From"]=> string(44) "a string"
}
["result"]=> bool(true)
}
参照($message
)で&
を渡すのを忘れたと思うので、以下の詳細に従って hook_mail
の実装を再確認してください:
hook_mail($key, &$message, $params)
それ以外の場合、$message
を変更しても効果はありません。
以下のように、本文から空の配列タグを削除します。
$message['body'] = $params['message'];