標準出力はひどいので、contactモジュールからの送信メールのテーマを設定します。これはどこでできますか?これは、admin( http://example.com/user/1 )で始まるもので、 http://example.com/contact の問い合わせフォームを使用してメッセージを送信しました。
Drupal 8.1.0でBerdirの回答を機能させることができました。しかし、それを実現するためにいくつかのことを行わなければなりませんでした。
/admin/config/swiftmailer/messages
)HTMLを使用します。/admin/config/swiftmailer/transport
)優先トランスポートタイプ/admin/structure/display-modes/view
連絡先メッセージの新しい表示モードを追加し、名前空間をmail
に設定します。これは、電子メールを送信するときに使用される表示モードです(これは、私がわかるものからハードコードされています)。full
ビューモードを作成し、それも構成する必要があります。注、カスタムモジュールでBerdirのMessageViewBuilderオーバーライドも持っていますが、それがもはや必要かどうか確信がありません。まだ削除しようとしていません。
8.xでHTMLメールを送信するには、 Swiftmailer をお勧めします。
ただし、お問い合わせフォームの場合、いくつかの主要な問題/制限により、現在、フォームが適切に機能していません。 https://www.drupal.org/node/266616 (パッチが必要、またはD8コア8.1.0+の使用)および https://www.drupal.org/を参照) node/2223967 (連絡先メッセージビュービルダーを置き換え、連絡先メールのコンテンツタイプをHTMLに設定することにより、必要に応じて/回避策)、次のようになります。
/**
* Implements hook_entity_type_alter().
* @param \Drupal\Core\Entity\EntityTypeInterface[] $entity_types
*/
function yourmodule_entity_type_alter(array &$entity_types) {
$entity_types['contact_message']->setViewBuilderClass('Drupal\yourmoule\ContactMessageViewBuilder');
}
/**
* Implements hook_mail_alter().
*/
function yourmodule_mail_alter(&$message) {
if ($message['module'] == 'contact' && isset($message['params']['contact_message'])) {
// Enforce that we are sending mails as HTML.
$message['headers']['Content-Type'] = 'text/html';
}
}
namespace Drupal\yourmodule;
use Drupal\contact\MessageViewBuilder;
use Drupal\Core\Entity\EntityInterface;
/**
* Customized contact message view that does not do HTML to plain conversion.
*/
class ContactMessageViewBuilder extends MessageViewBuilder {
/**
* {@inheritdoc}
*/
public function view(EntityInterface $entity, $view_mode = 'full', $langcode = NULL) {
$build = parent::view($entity, $view_mode, $langcode);
// Remove the post render callback that converts the HTML to plain text.
unset($build['#post_render']);
return $build;
}
}
発信連絡メールのテーマを設定するために、ノードとその本文を取得できます。その後、メール本文として設定できます。 hook_mail_alter()
を使用します。 Swift Mailer モジュールが必要です。
use Drupal\Core\Render\Markup;
function hook_mail_alter(&$message) {
if ($message['id'] == 'contact_page_mail') {
$contact_message = $message['params']['contact_message'];
//load the node that has html body
$node = \Drupal\node\Entity\Node::load(155);
$record = $node->body->value;
//replace the params as per you requirement
$record = str_replace("@name", $contact_message->get('field_name')->getValue()[0]['value'], $record);
$message['body'][1] = $record;
$message['body'][1] = Markup::create($message['body'][1]);
}
}
最初に Mime Mail モジュールが必要なようです。それはあなたのウェブサイトがHTMLメールを送信することを可能にし、テンプレートを変更する方法を提供します。
@ nicholas.alipazの回答に追加したいだけです。
ポイント#8までフォローし、表示スーツモジュールを使用した場合。
admin/structure/contact/manage/[〜#〜] yourcontactform [〜#〜]/display/mailに移動します
下にスクロールして、「レイアウト[〜#〜] yourcontactform [〜#〜] in mail」を表示します。
[レイアウトの選択]で[1列のレイアウト]を選択すると、一時的な提案が表示されます。
それらの1つを選択してください。私はds-1col--contact-message.html.twigを選択しました
私はテーマのtempalteフォルダーにmodules/contrib/ds/templates/ds-1col.html.twigをコピーし、名前をds-1col--contact-message.html.twigに変更して、好みに合わせて編集しました。
これは少し単純な電子メールのテンプレートですが、私の単純な連絡フォームではうまく機能しました。