Jump to content

Entités html dans les messages des emails textes (text/plain) envoyés depuis le BO


Recommended Posts

Problème : Lorsque l'on écrit à un client depuis la page commande (AdminOrdersController.php) ou le SAV (AdminCustomerThreads), et que la boutique envoie ses emails en text/plain et pas en HTML, le contenu du message -- et pas le template -- voit ses caractères accentués convertis en entités html (eg.Un problème nous empêch)

 

Deux solutions Overrider les postProcess des deux controllers en supprimant htmlentities pour les emails plain/text. Pour AdminOrdersController cela donnera

 

/* Fix html entites in plain text email */
if (Configuration::get('PS_MAIL_TYPE', null, null, $order->id_shop) == Mail::TYPE_TEXT || Configuration::get('PS_MAIL_TYPE', null, null, $order->id_shop) == Mail::TYPE_BOTH)
  $customer_message->message = strip_tags(Tools::getValue('message'));
else
  $customer_message->message = htmlentities(Tools::getValue('message'), ENT_COMPAT, 'UTF-8');

 

 

Soit directement dans la classe Mail, en fonction du template appliquer html_entity_decode sur la variable $template_vars['{message}']; Cette solution est peut-être moins propre mais elle a l'avantage de limiter les overrides des controllers surtout si cette classe est déjà overridée.

Cela donnera quelque chose comme ça :

 

 

// Do this before $template is modified
if($template == 'order_merchant_comment')
  $template_vars['{message}'] = strip_tags(html_entity_decode($template_vars['{message}'],ENT_COMPAT,"UTF-8"));
else if($template == 'reply_msg')
{
  // br to new line : http://stackoverflow.com/questions/2436145/br2nl-replace-all-xhtml-html-line-breaks-with-newlines-in-php
  $template_vars['{reply}'] = preg_replace('#<br\s*/?>#i', "\r\n", $template_vars['{reply}']);
}

 

 

 

Edit En fait le problème ne se présente pas dans AdminCustomerThreads car au lieu de htmlentities on trouve Tools::htmlentitiesutf8. Par contre les nouvelles lignes sont remplacées par <br />, il faudra donc quand même modifier AdminCustomerThreads dans la première solution. Dans la deuxième, on peut faire un preg_ireplace sur <br />.

Edited by emily_d (see edit history)
Link to comment
Share on other sites

  • 3 months later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...