web-dev-qa-db-ja.com

レンダリングTwig hook_mail()で

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']または小枝付きのこの部分。出来ますか?

1
monkeyUser
$body_data = [
  '#theme' => 'something',
  '#somearg1' => 'somevalue1',
  '#somearg2' => 'somevalue2',
];
$body_content = \Drupal::service('renderer')->render($body_data);
$message['body'] = explode("\n", $body_content);
2
user21641

可能ですが、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をプレーンテキストに変換します。

0
kiamlaluno