web-dev-qa-db-ja.com

送信する連絡先メールにテーマを設定するにはどうすればよいですか?

標準出力はひどいので、contactモジュールからの送信メールのテーマを設定します。これはどこでできますか?これは、admin( http://example.com/user/1 )で始まるもので、 http://example.com/contact の問い合わせフォームを使用してメッセージを送信しました。

5
Fropper

Drupal 8.1.0でBerdirの回答を機能させることができました。しかし、それを実現するためにいくつかのことを行わなければなりませんでした。

  1. Mailsystem、swiftmailer、contact_storage、およびcontact(core)モジュールをインストールします
  2. カスタムの連絡先フォームをセットアップして構成し、必要に応じてフィールドを追加します。
  3. Swiftmailerメッセージ設定(/admin/config/swiftmailer/messages)HTMLを使用します。
  4. Swiftmailerトランスポート設定(/admin/config/swiftmailer/transport)優先トランスポートタイプ
  5. フォーマッタプラグインと送信者プラグインの両方にswiftmailerを使用するように、メールシステムのデフォルトのメールシステム設定を構成します。必要に応じて、後のセクションでモジュールごとに構成することもできると思いますが、試したわけではありません。
  6. /admin/structure/display-modes/view連絡先メッセージの新しい表示モードを追加し、名前空間をmailに設定します。これは、電子メールを送信するときに使用される表示モードです(これは、私がわかるものからハードコードされています)。
  7. サイトの連絡先メッセージノードをきれいに表示したい場合は、fullビューモードを作成し、それも構成する必要があります。
  8. 作成したカスタムの連絡先フォームでビューモードを構成します。 Display Suiteモジュールでは、フィールドテンプレートを使用してマークアップをカスタマイズし、Display Suite Extrasで利用できるようになりました。

注、カスタムモジュールでBerdirのMessageViewBuilderオーバーライドも持っていますが、それがもはや必要かどうか確信がありません。まだ削除しようとしていません。

5
nicholas.alipaz

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;
  }
}
2
Berdir

発信連絡メールのテーマを設定するために、ノードとその本文を取得できます。その後、メール本文として設定できます。 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]);
  }
}
1
amol

最初に Mime Mail モジュールが必要なようです。それはあなたのウェブサイトがHTMLメールを送信することを可能にし、テンプレートを変更する方法を提供します。

0
Aram Boyajyan

@ 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に変更して、好みに合わせて編集しました。
これは少し単純な電子メールのテンプレートですが、私の単純な連絡フォームではうまく機能しました。

0
Sarah