PHPMailer

Problemas de codificación UTF-8 PHPMailer

Problemas de codificación UTF-8 PHPMailer. Si estas usando PHPMailer para enviar correos electrónicos de registro y/o recuperación de contraseña u otro tipo de envío y observas que existen caracteres especiales en las tildes, en este articulo daremos solución.

El caso es que el cuerpo del mensaje está correctamente codificado aplicando $mail->CharSet = 'UTF-8'; pero el asunto del mensaje no reconoce las tildes, por ello me llegan sin asunto.

¿Cuál es la solución para caracteres especiales en PHPMailer?

La solución es agregar el objeto $mail->CharSet= 'UTF-8'; dentro de PHPMailer y con esto funcionaria correctamente.

$mail = new PHPMailer();
$mail->From = 'midireccion@email.com';
$mail->FromName = 'Mi nombre';
$mail->AddAddress('emaildestino@email.com');
$mail->Subject = 'Prueba';
$mail->Body = 'Hola, esto es una prueba de envio con eñes y tíldes';
$mail->IsHTML(true);
// Activo condificacción utf-8 para corregir problemas de caracteres especiales
$mail->CharSet = 'UTF-8';
// Envio mail
$mail->Send();

Problemas con las tildes en el asunto de PHPMailer

Para corregir rápidamente los problemas de codificación de caracteres (eñes, tildes, etc.) en el envío de emails usando la clase PHPMailer podemos configurar para que el envío soporte caracteres UTF-8 usando el parámetro «CharSet«

El problema se resuelve haciendo un decode al contenido antes de establecer el Subject del objeto mail:

$subject = "Recuperar contraseña";
$subject = utf8_decode($subject);
$mail->Subject = $subject;

Problemas de codificación UTF-8 PHPMailer

El segundo paso importante es establecer el juego de caracteres (Charset) en el objeto llamado mail:

$mail->CharSet = 'UTF-8';

Otra solución es establecer el charset() después del isHTML, y no sería necesario usar el encode o decode.

$mail->isHTML(true);
$mail->CharSet = 'UTF-8';

Editar el archivo PHPMailer.php

Sería otra opción viable y si tienes experiencia en PHP podemos editar el archivo PHPMailer.php donde se define la clase y en la línea 77 donde se define el charset debe quedar de la siguiente manera:

public $CharSet = self::CHARSET_UTF8;

Recomendaciones para establecer UTF-8 en PHPMailer

La línea $mail -> CharSet = "UTF-8"; debe estar después $mail = new PHPMailer();, veamos un ejemplo:

$mail = new PHPMailer();
$mail->CharSet = "UTF-8";

Configuración del Servidor

Dependiendo de la configuración de su servidor, es posible que deba especificar el carácter estrictamente con letras minúsculas utf-8; de lo contrario, se ignorará. Pruebe esto si termina aquí buscando soluciones y ninguna de las respuestas anteriores le ayuda:

$mail->CharSet = "UTF-8";

Hay que cambiar de mayusculas a minusculas y debería quedar de la siguiente manera:

$mail->CharSet = "utf-8";

Conclusiones

Hoy en día la clase PHPMailer es muy usada para el envío de emails y archivos adjuntos por su amplia configuración y que acepta el envío de HTML y CSS personalizado.

Si deseas obtener más informacón acerca de esta clase puedes visitar su repositorio oficial

Para caracteres especiales en correos de destino la solución es agregar $mail->CharSet = "utf-8"; en la declaración de PHPMailer.

Esta clase es muy configurable y te animo a que lo pruebes y lo uses en tus proyectos web.

Nestor Tapia

Bloggero, amante de la programación PHP, innovador y me fascina compartir información. Desde que conocí el entorno informatico y el internet me llamó la atención la programación, Por tal motivo he creado mi blog BAULPHP.COM para compartir mis experiencias con todos ustedes. ¡Gracias por leerme!.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba