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 .
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.
/admin/config/swiftmailer/messages
) pour utiliser HTML./admin/config/swiftmailer/transport
) au type de transport préféré/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).full
et le configurer également.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.
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;
}
}
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]);
}
}
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.
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.