Carlos Robles frikiblog

Magento envía un email en blanco

| 0 comments

Hay veces en que nos encontramos con que nuestra tienda envia alguno de los emails (por ejemplo de nuevo pedido, de envio, de lo que sea) y el asunto se lee correctamente, pero no tiene contenido. De hecho si miramos el código fuente del email (si, soy un raro) vemos que no tiene nada, es decir, no es que el HTML este mal formado, sino que ha habido algún fallo antes y no se ha llegado a generar el cuerpo del mail

Magento esta increiblemente bien programado, asique el fallo esta sin duda en las plantillas.

Y eso tenemos que revisar. Primero comprobamos qué plantilla estamos usando (si la hemos definido desde el admin, desde ahi mismo podemos ver el código, si no recordais como, un dia de estos preparé un post) y si es una de las del sistema (que posiblemente hayamos adaptado o que sea de una traduccion) buscamos el archivo. Las plantillas de los emails se encuentran en:
app\locale\en_US\template\email\
app\locale\en_US\template\email\sales

(cambiando en_US por lo que corresponda al idioma que sea, por ejemplo es_ES para español)

dentro veremos una serie de archivos, los nombres son bastante representativos. Si no habeis tocado mucho más, directamente sabreis lo que hace cada uno, pero en cualquier caso no esta de mas comprobarlo. Tengo pendiente es post explicando como saber que plantilla esta asociada a cada evento del sistema, y de paso como crearlas nuevas.

Ahora que las tenemos localizadas, lo primero es asegurarnos que la que buscamos está. Si no está ya hemos encontrado el problema.
Si sí esta, la abrimos, y vemos lo que pasa. Por lo general sera o que esta mal formateado, o que utiliza variables mal, o que tiene algun caracter que no puede reconocer, porque no olvidemos que lo que va a hacer magento es cargar ese archivo, parsearlo, y rellenarlo con datos, y si falla una sola linea al parsear o asignar los datos de las variables, lo que va a pasar es que falle todo y el mail llegue en blanco.

La primera cosa que tenemos que buscar, y esto es sorprendente…son caracteres que no sean “normales”. Todo lo que no sea un caracter alfanumerico normalito del alfabeto ingles, deberá substituirse por el código html correspondiente. Por ejempo si pones la palabra “teléfono” fallara, deberas poner su equivalente “teléfono”. Y asi con todo.

Si ese no es el problema, tocará revisar estructuras.
un ejemplo de plantilla es algo asi:

<!--@subject {{var store.getFrontendName()}}: Cambios en pedido # {{var order.increment_id}} @-->
<!--@vars {"store url=\"\"":"Store Url", "skin url=\"images/logo_email.gif\" _area='frontend'":"Email Logo Image", "htmlescape var=$order.getCustomerName()":"Customer Name", "var order.increment_id":"Order Id", "var order.getStatusLabel()":"Order Status", "store url=\"customer/account/\"":"Customer Account Url", "var comment":"Order Comment", "var store.getFrontendName()":"Store Name"} @-->
<!--@styles body,td { color:#2f2f2f; font:11px/1.35em Verdana, Arial, Helvetica, sans-serif; } @--></pre>
<div style="font: 11px/1.35em Verdana, Arial, Helvetica, sans-serif;">
<table style="margin-top: 10px; font: 11px/1.35em Verdana, Arial, Helvetica, sans-serif; margin-bottom: 10px;" width="98%" border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td align="center" valign="top"><!-- [ header starts here] -->
<table width="650" border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top"><a href="{{store url="><img style="margin-bottom: 10px;" src="{{skin url=" alt="{{var store.getFrontendName()}}" border="0" /></a></td>
</tr>
</tbody>
</table>
 <!-- [ middle starts here] -->
<table width="650" border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top">
 <strong>Estimado/a {{htmlescape var=$order.getCustomerName()}}</strong>,

 Tu pedido # {{var order.increment_id}} ha sido
 <strong>{{var order.getStatusLabel()}}</strong>.

 Puedes comprobar el estado de tu pedido <a style="color: #1e7ec8;" href="{{store url=">en la web de ups: www.ups.es</a>.

{{var comment}}

 Si tienes alguna duda, contacta con nosotros:
 <a style="color: #1e7ec8;" href="mailto:{{config path='trans_email/ident_support/email'}}">{{config path='trans_email/ident_support/email'}}</a><!--                       o por tel&eacute;fono:  {{config path='general/store_information/phone'}}-->.

Gracias de nuevo,
<strong>{{var store.getFrontendName()}}</strong></td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</div>
<pre>

La primera linea en comentario es el asunto que llegará realmente, aqui es donde se define. El siguiente bloque como comentario es un poco complicado de explicar, y prefiero no hacerlo, y despues son los estilos CSS que se meteran en el body. Por ultimo esta todo el HTML del cuerpo del mail, con sus variables y etc.

Tanto en el asunto como en el cuerpo, lo unico que tenemos que hacer es comprobar que las variables se estan usando bien. Las variables son todo lo que hay entre {{}}
Posiblemente alguna la hayamos escrito mal y esté fallando por ahi. Podemos ver una lista completa de las permitidas aqui:

http://www.magentocommerce.com/wiki/modules_reference/english/mage_adminhtml/system_email_template/index

su significado es bastante intuitivo. De todas formas siempre te puedes crear un email con todas ellas para saber qué valor tienen en tu caso concreto.

Basicamente controlando que las variables se esten usando bien, y los caracteres especiales estén codificados correctamente, aseguramos que el mail llegue como tiene que llegar. Y si no, a quejarse en los comentarios.

Facebook Twitter Linkedin Plusone Digg Delicious Reddit Email

Leave a Reply

Required fields are marked *.