twig電子メールを送信するとき(可能な場合))またはテンプレートを含めたい。
私のコードはそうです:
/**
* Implements hook_mail().
*/
function reg_email_mail($key, &$message, $params) {
$options = array(
'langcode' => $message['langcode'],
);
switch ($key) {
case 'new_user':
$message['from'] = \Drupal::config('system.site')->get('mail');
$message['subject'] = t('User created: @title', array('@title' => $params['title']), $options);
$message['body'][] = \Drupal\Core\Mail\MailFormatHelper::htmlToText($params['message']);
break;
}
}
変更したい$params['message']
または小枝付きのこの部分。出来ますか?
$body_data = [
'#theme' => 'something',
'#somearg1' => 'somevalue1',
'#somearg2' => 'somevalue2',
];
$body_content = \Drupal::service('renderer')->render($body_data);
$message['body'] = explode("\n", $body_content);
可能ですが、TwigからのHTML出力を保持したい場合は、HTMLタグを他の文字列で置き換えないメールプラグインを使用するか、または実装してDrupal useデフォルトのプラグインの代わりにそのプラグイン。
表示しているコードは、HTMLタグを他の文字列に置き換えています。これは、 \ Drupal\Core\Mail\MailFormatHelper :: htmlToText() を呼び出しているためです。これは、_========
_および_<hi>
_ではなく_</h1>
_が表示される理由でもあります。
そのメソッド呼び出しを削除する場合でも、メールプラグインのデフォルトの実装では PhpMail::format()
の次のコードを使用します。
_ // Join the body array into one string.
$message['body'] = implode("\n\n", $message['body']);
// Convert any HTML to plain-text.
$message['body'] = MailFormatHelper::htmlToText($message['body']);
// Wrap the mail body for sending.
$message['body'] = MailFormatHelper::wrapMail($message['body']);
_
電子メールメッセージに設定されたヘッダーはチェックしません。常にHTMLをプレーンテキストに変換します。