web-dev-qa-db-fra.com

Comment puis-je thème le courrier de contact sortant?

Je veux thème le courrier sortant du module de contact, car la sortie standard semble horrible. Où puis-je faire ça? C'est celui qui commence par admin ( http://example.com/user/1 ) a envoyé un message en utilisant le formulaire de contact à http://example.com/contact .

5
Fropper

J'ai pu faire fonctionner la réponse de Berdir dans Drupal 8.1.0. Mais j'ai dû faire un certain nombre de choses pour le faire fonctionner.

  1. Installer les modules mailsystem, swiftmailer, contact_storage et contact (core)
  2. Installez un formulaire de contact personnalisé, configurez-le et ajoutez des champs si nécessaire.
  3. Configurer les paramètres des messages swiftmailer (/admin/config/swiftmailer/messages) pour utiliser HTML.
  4. Configurer les paramètres de transport de swiftmailer (/admin/config/swiftmailer/transport) au type de transport préféré
  5. Configurez les paramètres du système de messagerie par défaut du système de messagerie pour utiliser swiftmailer pour les plugins formateur et expéditeur. Je suppose que vous pouvez également configurer par module dans la dernière section si vous le souhaitez, mais je ne l'ai pas essayé.
  6. En dessous de /admin/structure/display-modes/view ajouter un nouveau mode d'affichage pour le message Contact, en définissant son espace de noms sur mail. C'est le mode d'affichage qui sera utilisé lors de l'envoi de l'e-mail (quelque part, il est codé en dur d'après ce que je peux dire).
  7. Si vous voulez un joli affichage des nœuds de message Contact sur le site, vous voudrez également créer un mode d'affichage full et le configurer également.
  8. Configurez vos modes d'affichage sous le formulaire de contact personnalisé que vous avez créé. Le module Display Suite a vraiment permis de personnaliser le balisage avec ses modèles de champs mis à disposition dans les extras de la suite d'affichage.

Remarque, j'ai également le remplacement MessageViewBuilder de Berdir dans un module personnalisé, mais je ne suis pas sûr qu'il soit plus nécessaire. Je n'ai pas encore tenté de le supprimer.

5
nicholas.alipaz

Je recommanderais Swiftmailer pour envoyer des mails HTML en 8.x.

Mais pour les formulaires de contact, un certain nombre de problèmes/limitations fondamentaux empêchent actuellement cela de bien fonctionner. Voir https://www.drupal.org/node/266616 (correctif requis ou utilisation du noyau D8 8.1.0+) et https://www.drupal.org/ node/2223967 (solution de contournement nécessaire/éventuellement en remplaçant le générateur d'affichage des messages de contact et en définissant le type de contenu des e-mails de contact sur HTML), quelque chose comme ceci:

/**
 * 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

Pour thématiser le courrier de contact sortant, vous pouvez obtenir un nœud et son corps. Après cela, vous pouvez le définir comme corps de messagerie. Utilisez hook_mail_alter(). Cela nécessite le module 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

On dirait que vous avez d'abord besoin du module Mime Mail . Il permettra à votre site Web d'envoyer des e-mails HTML et vous donnera un moyen de modifier le modèle.

0
Aram Boyajyan

Je veux juste ajouter à la réponse @ nicholas.alipaz.
Si vous avez suivi jusqu'au point # 8 et utilisé le module dispaly-suit.
Allez dans admin/structure/contact/manage/ VOTRECONTACTFORM /display/mail

faites défiler vers le bas jusqu'à: 'Mise en page pour VOTRECONTACTFORM dans le courrier'.
Sous 'Sélectionnez une mise en page', choisissez 'mise en page à une colonne', vous devriez être présenté par des suggestions tempalte.
Choisis un d'entre eux. J'ai choisi ds-1col - contact-message.html.twig
J'ai copié modules/contrib/ds/templates/ds-1col.html.twig dans le dossier tempalte de mon thème, l'ai renommé ds-1col - contact-message.html.twig et l'ai édité à mon goût.
C'est un modèle de courriel un peu simple, mais cela a bien fonctionné pour mon formulaire de contact simple.

0
Sarah