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.