Zend_Mail y Servidores Microsoft Exchange

Durante el día de ayer y casi toda esta mañana, he estado dándole vueltas a un problema con los archivos adjuntos que enviaba usando el Zend_Mail.

El script PHP genera una imagen que luego es enviada como adjunto usando las funciones de la clase Zend_Mail. Hasta aquí todo bien. Lo pruebo y funciona correctamente. Lo prueba el cliente… y no le funciona. El adjunto llega corrupto y no puede ver la imagen. Mi primera suposición es que sería algún problema de Windows (no iba muy mal encaminado), pero dificil discernir cuando el cliente tiene instalado un filtro antivirus, otro filtro antispam y la gestión del correo en un servidor Microsoft Exchange…

Bueno, pues para los que os encontreis con el mismo problema, aquí va la solución:

Cambiar el valor de la constante LINELENGTH en el archivo Zend/Mime.php (sobre la línea 41) y poner 72 en vez de 74.

Al parecer al servidor Microsoft Exchange no le gusta que las lineas sean muy largas en los adjuntos codificados…

Gracias, gracias y mil gracias a David Brännlund .

Escrito por manuel el miércoles 20 de agosto 2008
Guardado en Zend Framework

5 comentarios para “Zend_Mail y Servidores Microsoft Exchange”
Pablo Morales comenta:
miércoles 20 de agosto de 2008 a las 3:34 pm

Si esa es la unica solucion, creo que tendrias que reportarlo en la pagina de zend, tenes un apartado para eso.

Si la solucion es tocar directamente el codigo de la libreria esta mal. Lo que habria que hacer es enviar un parametro extra al metodo que necesita esa constante, con el valor correspondiente, o especificar que vamos a usar.

Saludos

manuel comenta:
miércoles 20 de agosto de 2008 a las 3:40 pm

Hola Pablo,

el error ya está reportado desde hace tiempo:

http://framework.zend.com/issues/browse/ZF-2324

Pero a día de hoy aún no está corregido. De ahí que hasta ese momento sea necesario usar este pequeño “parche” ;)

oreales comenta:
miércoles 20 de agosto de 2008 a las 6:43 pm

Imagino que LINELENGTH es una constante de la clase en cuestión, no?. No hay ningún “parametro” o método para ajustar ese valor de forma variable?

oreales comenta:
miércoles 20 de agosto de 2008 a las 6:45 pm

En la pagina del bug uno de los comentarios dice:

Frederic Marchal - 10/Jun/08 03:01 AM
Our customers have encountered this corruption for every file attached, not only PDF.

Their environment is : Exchange v6.5, Outlook 2K3

I read the source of ezc, PHPmailer class and PEAR::Mail, and I found they all use a line length of 76.

So, I changed the constant LINELENGTH (line 41 of Mime.php) to 76, and it works well for every attachments.
I do not tried zip files.

manuel comenta:
miércoles 20 de agosto de 2008 a las 9:45 am

Si, yo también lo he visto Oscar, pero antes de llegar ahí, encontré la solución de ponerlo en 72 y tras probarlo ha funcionado perfectamente. Así que parece que lo que no le gusta al MS Exchange es el 74 :P

Como habrás visto en el reporte de error, LINELENGTH es una constante de clase y no existe ningún parámetro que te permita cambiarla. Por eso la necesidad de modificar directamente el archivo de la clase.

Deja tu comentario