Necesita usar MIME. Añadir cabeceras de correo:
MIME-Version: 1.0
Content-Type: text/plain;charset=utf-8
(Si ya está utilizando un MIME multipart/alternative
para poner HTML y texto en el mismo correo, se pone el Content-Type: text/plain;charset=utf-8
en el sub-cabeceras de la parte de texto en su lugar.)
Esto supone que la codificación en la que enviarás tus caracteres "internacionales" es UTF-8. Si espera atender varios países, UTF-8 es la única opción razonable de codificación que se puede usar en su aplicación, pero si realmente no lo ha pensado, su sitio puede tener una codificación de Europa occidental. Verifique que cosas como los caracteres chinos funcionen correctamente en su sitio y base de datos antes de preocuparse por ellos en el correo.
Derail: hay lugares donde el envío de correo en UTF-8 no es lo más efectivo. No sé nada de China, pero en Japón todavía hay algunos sistemas de correo ridículos (especialmente webmail) que no pueden hacer frente a Unicode y que tienen que recibir una codificación específica del lugar, como Shift-JIS. Si se concentra en esos mercados, a menudo terminará teniendo que usar iconv
para crear versiones del correo especialmente codificadas. Desagradable.
Ahora, debido a que muchos servidores de correo no pueden manejar los caracteres que no son ASCII en el cuerpo del correo, tendrá que codificarlos. Puede elegir entre comillas imprimibles o base64 para esto; QP es generalmente más pequeño y más fácil de leer para el contenido que tiene caracteres ASCII en ella también:
Content-Type: text/plain;charset=utf-8
Content-Transfer-Encoding: quoted-printable
Hello! An a-acute is =C3=A1
La función de codificar en este formato es quoted_printable_encode. Sin embargo, necesita un PHP razonablemente actualizado para obtener esa función; si no lo tiene, puede configurar el Content-Transfer-Encoding
en el base64
en su lugar y usar base64_encode.
Por último, si desea incluir caracteres no ASCII en los encabezados (por ejemplo, en From
, To
o Subject
), hay una sintaxis completamente diferente:
Subject: =?utf-8?b?QW4gYS1hY3V0ZSBpcyDDoQ==?=
Donde que QW...==
desastre en el medio es el base64_encode
de "An a-acute is á" en UTF-8.
Esa 'sintaxis completamente diferente' es la codificación RFC2047 'B'. Por lo general, es mejor utilizar la codificación 'Q' del mismo RFC, ya que generalmente es más legible (al igual que la impresión entre comillas) y más corta. PHPMailer maneja ambas cosas, y en general es una forma mucho mejor de resolver la codificación que tratar de hacerlo desde cero: ¡para eso son las bibliotecas! – Synchro