Thursday, August 15, 2013

Corrección de doble punto en SwiftMailer (SWIFT)

Bueno, pués simple y rápido.

Tengo un cliente con un sistema que envía correos electrónicos. Dentro del diseño de la plantilla hay varias imágenes vinculadas a URL que por supuesto llevan algún punto. Al romper las líneas para enviar el correo conforme a estándares, SwiftMailer puede hacer que un punto de esa URL se vaya a una nueva línea; por ejemplo, si el mensaje original tiene la url "www.ejemplo.com" y queda para romper línea, podría resultar:

"............www.ejemplo=
.com"

Así debería de ser, pero SwiftMailer le añade otro punto a todas las líneas que comiencen con un punto (ya que los mensajes de correo electrónico deben de terminar con un punto solo) resultando así:

"...........www.ejemplo=
..com"

Efectivamente haciendo la URL inválida.

La corrección se encuentra en el archivo classes/Swift/Transport/MailTransport.php al rededor de le línea 167, y hay que reemplazar esto:

$body = str_replace("\r\n.", "\r\n..", $body);

por esto:

$body = str_replace("\r\n.\r\n", "\r\n..\r\n", $body);

Así nos aseguramos que el punto solo, realmente sea un punto solo.

Salud!

EDIT:


El reemplazo correcto debe ser en classes/Swift/Transport/AbstractSmtpTransport.php cerca de la línea 327 ($this->_buffer->setWriteTranslations)