miércoles, 12 de mayo de 2010

Configurando newsletter en drupal 6 para su envío en codificación diferente a UTF-8

Drupal 6 es un gestor de contenidos moderno que utiliza enteramente la codificación de caracteres UTF-8, esto es de gran ayuda cuando tenemos que implementar sitios web internacionalizados pues podemos utilizar cualquier juego de caracteres por extraño que sea.

A la hora de enviar una newsletter o boletín de noticias utilizando Drupal 6 tenemos que los emails van a ser enviados también utilizando la codificación UTF-8. Esto en principio no debería ser un problema pero si en nuestra organización se usa un cliente de correo antiguo es posible que los emails se vean con caracteres extraños.

Para evitar esto tendremos que enviar la newsletter en codificación Latin-1 o ISO 8859-1 algo que drupal no puede hacer de forma sencilla.

Esta solución se basa en la utilización de la función php utf8_decode que utilizaremos en diferentes partes del código fuente:

Fichero htmlmail.module:
En la función htmlmail_mail_alter sustituimos la siguiente línea de código
$message['headers']['Content-Type'] = 'text/html; charset=UTF-8; format=flowed;';
por
$message['headers']['Content-Type'] = 'text/html; charset=ISO-8859-1; format=flowed;';

Fichero simplenews.module:

En la función simplenews_mail añadimos estás líneas de código en negrita:

$subject = theme('simplenews_newsletter_subject', $name, $node->title, $message['language']);
$subject = str_replace(array("\r", "\n"), '', $subject);
$subject = utf8_decode($subject);
$message['subject'] = $messages[$nid][$langcode]['subject'] = $subject;

// Buffer body text node and language specific       
$body = utf8_decode($body);
$messages[$nid][$langcode]['body'] = $body;

// Build and buffer message footer
$footer = theme(array('simplenews_newsletter_footer__'. $context['node']->simplenews['tid'], 'simplenews_newsletter_footer'), $context['node'], $key, $message['language']);
$footer = utf8_decode($footer);
$messages[$nid][$langcode]['footer'] = $footer;

Con estos cambios nuestra newsletter se verá correctamente en clientes de correo antiguos y nuevos, eso si, siempre tendremos que usar caracteres latinos en los emails.
Publicar un comentario