2009-01-15 15 views
12

Cuando trato de enviar un correo electrónico HTML codificado desde PHP, si la línea de asunto contiene caracteres especiales como "Here's the information you requested", PHP codifica para leer "Here's the information you requested."PHP correo Codifica línea de asunto

¿Cómo puedo solucionar esto?


Aquí es lo que el código es el uso de PHP mail():

$headers = 'MIME-Version: 1.0' . "\r\n"; 
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; 

$headers .= 'To: ' . $mod_params['name'] . '<' . $mod_params['email'] . '>' . "\r\n"; 

$headers .= 'From: <[email protected]>' . "\r\n"; 

$email_to = $mod_params['email']; 

$email_sub = "Here's the Information You Requested"; 

$body = html_entity_decode("<html><body>" . $email_html_body . "</body></html>"); 

mail($email_to,$email_sub,$body,$headers); 

Se da el mismo error que la ejecución a través de la clase SugarPHPMailer.

Respuesta

-1

Pruebe usar SwiftMailer u otra biblioteca que maneje todas las complejidades de crear y codificar correo HTML para usted.

+0

Estoy haciendo esto dentro de SugarCrm y estamos tratando de usar la clase SugarPHPMailer de SugarCRM para enviar estos. Boss quiere usar las funciones de SugarCRM. – ericwindham

0

Intente ejecutar la línea de asunto a través de html_entity_decode(), parece que tal vez tenga algunas entidades en el asunto.

+0

Ya lo intenté. Gracias, sin embargo. – ericwindham

5

Si la cadena realmente no contiene valores codificados antes de enviar, echar un vistazo a this:

$subject= mb_encode_mimeheader($subject,"UTF-8", "B", "\n"); 
// or 
$subject= mb_encode_mimeheader($subject,"UTF-7", "Q", "\n"); 

Tome un vistazo a estos puestos relacionados con SugarCRM:

+0

Intentó ambos en vano. Nunca he visto esto antes. Gracias por su respuesta. – ericwindham

+0

Agregar más referencias –

-1

Enviar el bloque de código ofensivo muchas veces le asegurará una mejor respuesta más rápido. Probablemente estés codificando el texto en alguna parte antes de que esta acción tenga lugar. Como se sugirió anteriormente, puede buscar esa acción y corregirla, o simplemente puede decodificar la línea de asunto antes de enviar el correo electrónico.

+0

He intentado decodificarlo antes de enviarlo. También intenté enviar el mismo correo electrónico desde la función php mail() en lugar de la clase SugarPHPMailer. No es específico de SugarCrm. Lo mismo sucede con mail(). – ericwindham

+0

Necesita publicar el código que parece. – Sampson

6

Tuve un problema similar en un plugin de Wordpress en el que estaba trabajando y me devasté el cerebro una y otra vez probando diferentes sugerencias aquí y en otros resultados de búsqueda de Google. Finalmente encontré una solución que funcionó en mi situación, así que la compartiré. Diré que fue la solución de Paul la que probé al principio y no funcionó, pero la razón fue que intenté "taquicar" la solución. En mi caso, solo llamar a html_entity_decode() no funcionó. ¿Por qué? Si hubiera leído el documento PHP más de cerca hubiera sido obvio. Mi problema era con la codificación en una sola cotización y el valor predeterminado para html_entity_decode() es 'ENT_COMPAT', lo que deja solo las comillas simples. La solución fue establecer todos los parámetros y funcionó. En realidad, probablemente podría haber dejado el juego de caracteres ya que estaba codificando UTF-8, pero pensé que sería minucioso.

$decoded_str = html_entity_decode ( $value_to_decode, ENT_QUOTES, 'UTF-8'); 

La lección aquí es buena, "Lea los documentos". No estoy diciendo que no lo hiciste (probablemente lo hiciste), pero muchos de nosotros tenemos prisa y pasamos por alto la solución que está sentada allí mirándonos a la cara si solo miramos.

39

Prueba esto:

$newsubject='=?UTF-8?B?'.base64_encode($subject).'?='; 

De esta manera usted no se basan en PHP o codificación de la MTA, a hacer el trabajo, y el cliente de correo debe entenderlo. No habrá personajes especiales en su nuevo tema, por lo que no deberían surgir problemas al enviar el correo electrónico.

+0

Estoy usando este Peter. Se ve bien, excepto cuando el tema es algo largo. ¿Sabes cómo dividirlo? Quiero decir, ¿cuál es el tamaño en que el tema debe ser particionado? ¿y cómo? –

+2

Solución absolutamente maravillosa. ¡Muchas gracias a ti @Peter por terminar una sesión de tirar el pelo por tres horas! –

+2

+1 ¡OMG! funciona. –

2

Debe usar mb_encode_mimeheader, solo recuerde configurar antes.

mb_internal_encoding("UTF-8"); //has to be set (of course your internal encoding may not be UTF-8). 
$subject = mb_encode_mimeheader($subject,'UTF-8','Q'); 

Se cuidará de codificación a (el legible por humanos) citado imprimible cuando sea necesario y de forma automática romper el tema en la cantidad de líneas en función de longitud.

Cuestiones relacionadas