mail - salto de linea en php
¿Qué salto de línea en el encabezado del correo php, / r / n o / n? (7)
He visto muchos ejemplos usando la función de correo php. Algunos de ellos usan / r / n como salto de línea para el encabezado, algunos usan / n.
$headers = "From: Just Me/n";
$headers .= "Reply-To: Just me <$email>/n";
vs
$headers = "From: Just Me/r/n";
$headers .= "Reply-To: Just me <$email>/r/n";
cual es correcto?
A veces he tenido casos en los que se usa / r / n y algunos clientes de correo interpretan parte del encabezado como texto de correo (perdiendo la información del encabezado). ¿Esto es porque / r / n es incorrecto?
Cambié mi script para usar PHP_EOL que parece funcionar, como este:
//Set Content-type header
$headers = "MIME-Version: 1.0" . PHP_EOL;
$headers .= "Content-type: text/html; charset=iso-8859-1" . PHP_EOL;
//Additional headers
$headers .= "From: $from" . PHP_EOL;
$headers .= "Cc: $cc" . PHP_EOL;
$headers .= "Content-type: text/html" . PHP_EOL;
$headers .= "Bcc: $bcc" . PHP_EOL;
NÓTESE BIEN. ¡Asegúrennos "en lugar de" ya que este último parece no funcionar!
Como se indicó anteriormente, / r / n es lo que debe usar de acuerdo con el RFC, pero esto rompe sus encabezados en varios sistemas de correo (fi Outlook 2003). Aunque / n no es el salto de línea ''apropiado'' para usar, en mi experiencia funciona correctamente en todos los sistemas de correo que he encontrado hasta ahora. Debido a esto, siempre uso simplemente / n.
El CRLF /r/n
debe usarse de acuerdo con la documentación de php . Además, para ajustarse a las líneas de especificación RFC 2822 , debe estar delimitado por el carácter de retorno de carro, CR /r
inmediatamente seguido de la alimentación de línea, LF /n
.
Como /r/n
es nativo de las plataformas Windows y /n
de Unix, puede usar la constante PHP_EOLDocs en Windows, que es el nuevo carácter de línea apropiado para la plataforma en la que se está ejecutando actualmente el script.
El RFC exige formalmente CRLF (/ r / n) pero el uso de interrupciones de Unix (/ n) para los encabezados le ahorrará mucha molestia. Algunos servidores de correo, como qmail, rechazarán su mensaje si usa / r / n.
Fuente: experiencia, confirmada por esta nota: http://www.php.net/function.mail#40204
En caso de que un motor de búsqueda lo recoja y le ahorre a otra persona la frustración que experimenté: aquí hay una curiosidad adicional.
En php 5.2x en Linux, tenía / r / n en mis encabezados de correo electrónico en php mail (), después de una actualización a php 5.3.3, el formateo y el envío fallaron misteriosamente. Al eliminar el archivo, se arregló el script (después de examinar muchas otras posibilidades).
Mi experiencia: los correos electrónicos en HTML funcionaban en clientes web, pero incluían clientes de escritorio basados en MS (Entourage, Outlook). Estaba usando / r / n. Se eliminó el / r en la versión MIME solamente y ahora funciona en todos los ámbitos.
Tuve el problema de que gmail malentendió / r / n encabezados, pero simplemente dejar la línea de encabezado se rompe en / n no fue suficiente en mi caso, porque en ese caso algunas versiones de Outlook mostraban los correos electrónicos como vacíos.
La solución en https://.com/a/7960957 (elijo instalar postfix 2.9 en lúcido desde un ppa) junto con el uso de / n parece funcionar en todas partes ahora.