2012-01-08 7 views
5

Tengo la función PHP mail(): trabajando para un formulario que estoy usando en mi sitio. Ahora estoy tratando de formatear el atributo $ body para que se vea mejor y más organizado cuando reciba el correo electrónico posterior.

he tratado \ n Y he tratado
y ambos me dan

He aquí el fragmento del código que estoy trabajando con (creo que es sólo una cuestión de sintaxis que estoy haciendo mal):

if(!empty($brandname) && !empty($firstname) && !empty($lastname) && !empty($email) && !empty($goals) && !empty($bio)){ 
     $to = '[email protected]'; 
     $subject = 'Submission Form'; 
     $body = 'Brand Name: '.$brandname.'<br />Name: '.$firstname.' '.$lastname.'<br />Email: '.$email.'<br />About the Company:'.$bio; 
     $headers = 'From: '.$email; 

Es sólo muestra la <br /> como texto en la dirección de correo que recibo. Fue lo mismo cuando utilicé \ n (que supongo que es la manera correcta de hacerlo). ¿Qué estoy haciendo mal? Gracias.

Respuesta

7

Debe colocar \ n entre comillas dobles "no entre comillas simples 'Si desea que esta secuencia sería interpretarse como una nueva línea (línea de alimentación 0x0A) carácter

Eche un vistazo a esta documentación php:

http://php.net/manual/en/language.types.string.php

1

forma más fácil para este

$newline = ' 
'; 

utilizar la variable $ salto de línea en cualquier lugar que desee (:

+3

Dependiendo de dónde escriba la tecla Intro, obtendrá diferentes resultados, ya que Mac, Windows y Linux manejan las líneas nuevas con diferentes combinaciones de '\ r' y' \ n'. –

1

A partir del manual page of the mail() function, nos enteramos de que para enviar correos electrónicos HTML, se deben mencionar encabezados adicionales. Esto se demuestra de manera concisa en Example #4.

Sin embargo, para los saltos de línea, no aconsejaría usar HTML. Para eso, simplemente inserte "\ n" en la cadena, asegurándose de usar comillas dobles, como lo menciona Abraham.

2

uso "<br>" en lugar de \n que funcionará 100% mi descubrimiento

por ejemplo

$subject="Mail from customer ".$_POST['Name'].`"<br>"`; 

disfrutar :)

2

(PHP 4, PHP 5)

$body = 'Brand Name: '.$brandname."\r\n".'Name: '.$firstname.' '.$lastname."\r\n".'Email: '.$email."\r\n".'About the Company:'.$bio; 

Uso "\r\n" para nueva línea como la anterior

+0

Esto funciona. Gracias – KarenAnne

0

No pude agregar un comentario a la respuesta de Mohammad Saqib, pero quería decir que no debe usar <br> como reemplazo de \r\n porque esto puede provocar que el correo electrónico quede atrapado por filtros de correo "demasiado largos". . ¡Las nuevas líneas son importantes para mantener el correo electrónico más humano y permitir una entrega exitosa!

El método que recomiendo es:

$output[] = "line 1"; 
$output[] = "line 2"; 
$EmailBody = join("\r\n",$output); 

También debe asegurarse de que 'desinfectar' cabeceras para evitar la inyección de cabeza desde la entrada del usuario, aquí es una función que es el doble de seguro de parar la inyección:

function sanitize(&$data){ 
    return str_ireplace(array("\r", "\n", "%0a", "%0d"), '', stripslashes($data)); 
} 


$headers = 'From: '.sanitize($email); 

Si quería etiquetas HTML para mostrar en el correo electrónico, cambiar el tipo de uso de la cabecera:

$headers = 'Content-type: text/html;\r\nFrom: '.sanitize($email); 

Si visualizó HTML, debe limpiar la entrada del usuario para evitar cualquier cosa inesperada ... es decir, inyección de HTML. Utilice esta función en cualquier lugar donde muestre la entrada del usuario en HTML:

function htmlclean($str){ 
    return htmlentities($str, ENT_QUOTES); 
} 

e.g. $ body = "Nombre de la marca:". htmlclean ($ marca);

Cuestiones relacionadas