registrarse - mandar un email con php
El correo de PHP codifica la lĂnea de asunto (7)
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.
Cuando trato de enviar un correo electrónico HTML codificado desde PHP, si el asunto contiene caracteres especiales como "Here''s the information you requested"
, PHP lo codifica para que diga "Here's the information you requested."
¿Cómo puedo solucionar esto?
Así es como se ve el código usando 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);
Da el mismo error que ejecutarlo a través de la clase SugarPHPMailer.
Intente ejecutar la línea de asunto a través de html_entity_decode () , parece que tal vez tenga algunas entidades en la línea de asunto.
Intente utilizar SwiftMailer u otra biblioteca que maneje todas las complejidades de crear y codificar correo HTML para usted.
Si la cadena realmente no contiene valores codificados antes de enviar, échele un vistazo a esto :
$subject= mb_encode_mimeheader($subject,"UTF-8", "B", "/n");
// or
$subject= mb_encode_mimeheader($subject,"UTF-7", "Q", "/n");
Eche un vistazo a estas publicaciones relacionadas con SugarCRM:
Tuve un problema similar en un complemento de Wordpress en el que estaba trabajando y volví a analizar mi cerebro una y otra vez al intentar diferentes sugerencias desde aquí y en varios 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 única 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.
Deberías usar mb_encode_mimeheader , solo recuerda establecer 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 encargará de la codificación (legible por el ser humano) de impresión entre comillas cuando sea necesario y dividirá automáticamente al sujeto en la cantidad correcta de líneas en función de la duración.
Prueba esto:
$newsubject=''=?UTF-8?B?''.base64_encode($subject).''?='';
De esta forma no depende de PHP o la codificación del MTA, usted hace 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.