2011-03-04 11 views
6

Estoy usando la función de correo interno php para enviar correo, lo envolví en una función que UTF8 el proceso, encontré en línea.El correo de PHP UTF8 se confunde en la aplicación de correo de iPhone

funciona, envié el correo electrónico en el código a mi GMAIL y a mi servidor de INTERCAMBIO, tanto en GMAIL como en mi cliente de Outlook en mi PC obtengo el mensaje correcto.

Mi iPhone también está conectado a las cuentas de intercambio y GMAIL, por lo que recibo ambos mensajes en mi iPhone. el iPhone recibe el mensaje GMAIL correctamente, pero la cuenta de INTERCAMBIO muestra el mensaje con un galimatías ilegible donde no hay caracteres latinos.

el ejemplo abajo envía caracteres hebreos en el sujeto y en el cuerpo. En mi iPhone, el tema se recibe correctamente en hebreo, pero las partes hebreas en el cuerpo del mensaje están distorsionadas.

¿alguien puede comentar al respecto? tal vez intente en su propia configuración?

gracias,

<?php 


function mail_utf8($to, $subject = '(No subject)', $message = '', $header = '') { 
$header_ = 'MIME-Version: 1.0' . "\r\n" . 'Content-type: text/plain; charset=UTF-8' . "\r\n"; 
mail($to, '=?UTF-8?B?'.base64_encode($subject).'?=', $message, $header_ . $header); 
} 

$mymessage = "Hello <BR>"; 
$mymessage.= "Received: now<BR/><BR/>"; 
$mymessage.= "details: שלום שלום<BR/><BR/>"; 

mail_utf8 ("[email protected],[email protected]", "שלום", $mymessage, "my_mail", "[email protected]"); 


?> 
+0

por cierto, no creo que necesita el '
's al enviar un correo electrónico' text/plain', 'PHP_EOL' probablemente funcionaría mejor. – Czechnology

+0

en realidad estoy tratando de enviar HTML, acabo de copiar el encabezado incorrecto en este ejemplo –

Respuesta

1

que tiene el mismo problema con el iPhone y Exchange, he resuelto mi problema utilizando Content-Transfer-Encoding: quoted-printable\r\n y quoted_printable_encode() probar su código de esta manera:

function mail_utf8($to, $subject = '(No subject)', $message = '', $from ='') { 
    $headers = "MIME-Version: 1.0\r\n"; 
    $headers .= "Content-type: text/html; charset=UTF-8\r\n"; 
    $headers .= "Content-Transfer-Encoding: quoted-printable\r\n"; 
    $headers .= "From: $from\r\n"; 
    mail($to, $subject, $message, $headers); 
} 
$mymessage = "Hello <BR>"; 
$mymessage.= "Received: now<BR/><BR/>"; 
$mymessage.= "details: שלום שלום<BR/><BR/>"; 
$mymessage = quoted_printable_encode($mymessage); 

mail_utf8 ("[email protected],[email protected]", "שלום", $mymessage, "[email protected]"); 
0

respuesta simple - utilizar Swift Mailer. La magia del encabezado en los correos electrónicos es impredecible. También intenté jugar con él durante mucho tiempo, pero tarde o temprano, alguien informó que en su configuración (proveedor de correo electrónico o aplicación), el texto está distorsionado o algo así (envío muchos correos electrónicos en checo, por lo que trabajo UTF es una prioridad).

Utilice Swift Mailer y ahorre algunos nervios. Es rápido de configurar y aprender y funciona de maravilla.

+0

Un contenedor de correo como el que proporcionó o PHPMailer funcionaría, pero no es una solución a este problema específico. Especialmente si el código funciona completamente refactorizando para trabajar con un contenedor, podría ser más trabajo que solo arreglar el error. – dtech

+1

Probé con PHPMAILER, otra envoltura, me envió el correo y obtuve el mismo resultado exacto ... aún confuso ... –

+0

@Moshe Marciano, en ese caso no puedo ayudarte mucho más, no tengo mucho experiencia con iProducts y precisamente cero experiencia con sus componentes internos ... – Czechnology

1

Debido a que el mensaje se recibe correctamente en su cuenta de Gmail a través de su iPhone, esto es probablemente una falla/configuración incorrecta en el servidor de intercambio o en la sincronización de iPhone Exchange.

Lo mejor que se puede hacer es codificar base64 no solo el tema sino todo el mensaje: los caracteres base64 que se usan casi siempre se transfieren correctamente ya que los códigos de los caracteres son los mismos en US-ASCII, ISO-8859-x y UTF-8. Todos los clientes de correo modernos pueden decodificar base64, pero aumenta el tamaño de su mensaje en aproximadamente un 33%.

function mail_utf8($to, $subject = '(No subject)', $message = '', $header = '') { 
     $header_ = 'MIME-Version: 1.0' . "\r\n" . 
       'Content-type: text/plain; charset=UTF-8' . "\r\n" . 
       'Content-Transfer-Encoding: base64' . "\r\n"; 
     mail($to, '=?UTF-8?B?'.base64_encode($subject).'?=', base64_encode($message), $header_ . $header); 
} 
+0

Intenté su código, GMAIL lo hizo bien, Outlook y iPhone tienen todo su cuerpo mutilado ahora, incluso texto en latín ... –

+1

Estoy usando Thunderbird para enviar los mensajes y tengo los mismos síntomas cuando el iPhone los lee de la cuenta de GMail.En mi caso, se define 'Content-Transfer-Encoding: 8bit', por lo que parece que la codificación de transferencia no es la raíz del problema. Consulte http://www.google.com/support/forum/p/gmail/thread?tid=0cb7a810647d9dd8 y http://forum.nuevasync.com/forum/posts/list/15/118.page –

+0

Una palabra de advertencia a cualquiera que use esto: base64_encoding hace que sea más probable que su correo electrónico termine en el filtro Spam/Bulk porque un cuerpo codificado en base64 es una bandera roja para los filtros de spam. –

Cuestiones relacionadas