3

Buenas este es mi código :

 $email_body ="Nombre: ".$first_name."Apellido:"
.$last_name."Portal:".$portal."Piso: ".$piso."Email: ".$email."Telefono:"
.$phone."Incidencia:"
.$incidencia."Mensaje: ".$message.".";

Y me devuelve algo asi :

NombrededApellidoddePortaldepisodedEmail: ede@gmail.comTelefono: 234Incidencia: 2342Mensaje: 342.

¿Cómo puedo conseguir que me devuelva con saltos de línea?

Nombre:
Apellido:

ect..

A. Cedano
  • 86,578
  • 19
  • 122
  • 221
francisco
  • 111
  • 2
  • 12
  • 1
    Los saltos en html se consiguen con el tag BR entonces solo tienes que concatenarlo al final de lo que consideres linea nueva, sería algo así: $email_body = "Nombre: " . $firstname . "
    "; y así con todos los saltos de línea. Si el salto de línea lo quieres en el código generado en lugar de en HTLM, entonces es cambiar
    por \n
    – track3r Mar 21 '18 at 10:46

4 Answers4

6

Puedes utilizar la constante PHP_EOL que es multiplataforma:

PHP_EOL (string)

El símbolo 'Fin De Línea' correcto de la plataforma en uso. Disponible desde PHP 5.0.2

$email_body ="Nombre: ".$first_name. PHP_EOL ."Apellido:"
.$last_name. PHP_EOL ."Portal:".$portal. PHP_EOL ."Piso: ".$piso. PHP_EOL ."Email: ".$email. PHP_EOL ."Telefono:"
.$phone. PHP_EOL ."Incidencia:"
.$incidencia. PHP_EOL ."Mensaje: ".$message.".";
OscarGarcia
  • 26,999
  • 3
  • 26
  • 61
Kiko_L
  • 6,455
  • 1
  • 11
  • 25
  • 2
    `PHP_EOL` es la mejor opción. Es importante tener en cuenta que el salto de línea es uno de los principales dolores de cabeza según la plataforma en que se ejecute el programa. Conviene usar, cuando se pueda, [código independiente de la plataforma](https://es.stackoverflow.com/q/111912/29967) . – A. Cedano Mar 21 '18 at 11:35
  • 1
    Aunque en principio ésta pueda parecer una buena solución, está violando el RFC-2822 que define el formato del contenido de un correo y cuyo separador de línea es `CRLF`: https://tools.ietf.org/html/rfc2822#section-2.3 – OscarGarcia Mar 21 '18 at 13:13
1

Puedes insertar <br>, que es el salto de línea en HTML:

     $email_body ="Nombre: ".$first_name."<br>Apellido: "
    .$last_name."<br>Portal :".$portal."<br>Piso: ".$piso."<br>Email: 
    ".$email."<br>Telefono: "
    .$phone."<br>Incidencia: "
    .$incidencia."<br>Mensaje: ".$message.".";

O también puedes hacer lo siguiente:

$email_body[] = '';
$email_body = "Nombre: ".$first_name;
$email_body = "Apellido: ".$last_name;
$email_body = "Portal :".$portal;
...

foreach ( $email_body as $one ) { echo "<p>$one</p>"; }
msabate
  • 178
  • 7
1

El salto de línea se hace con \n de tal forma que el código quedaría así:

 $email_body ="Nombre: ".$first_name."Apellido:"
.$last_name."Portal:".$portal."\nPiso: ".$piso."\nEmail: ".$email."\nTelefono:"
.$phone."\nIncidencia:"
.$incidencia."\nMensaje: ".$message.".";
Pedro Prada
  • 1,509
  • 11
  • 18
  • genial funciono eso perfectamente,sabes como puedo hacer para que me rediriga a index.html? tengo un formulario que cuando das a enviar te lleva a un php que envia un correo y quiero que despues te vuelva a llevar al index.html – francisco Mar 21 '18 at 10:46
  • Para que te redirija al index.html solo debes colocar al final, luego de que envíes el correo, esta linea: header('Location: tu_pagina.php'); – FQuijada Mar 21 '18 at 12:25
  • El cuerpo de un mensaje de correo debería estar delimitado por `CRLF` (`\r\n`) y no sólo `LF` (`\n`). Puedes consultar la RFC correspondiente aquí: https://tools.ietf.org/html/rfc2822#section-3.5 – OscarGarcia Mar 21 '18 at 13:15
0

El RFC-2822 que define el formato del cuerpo de un mensaje de correo explica que necesitas separar las líneas mediante un separador CRLF (\r\n):

$email_body = "Nombre: " . $first_name . "\r\n" .
  "Apellido: " . $last_name . "\r\n" .
  "Portal: " . $portal . "\r\n" .
  "Piso: " . $piso . "\r\n" .
  "Email: " . $email . "\r\n" .
  "Telefono: " . $phone . "\r\n" .
  "Incidencia: " . $incidencia . "\r\n" .
  "Mensaje: " . $message . ".";

Usar un separador LF (\n) te funcionará con la mayoría de lectores de correo modernos pero podría no funcionar correctamente en alguno.

Además, si el tipo mime que usas para el contenido de tu correo es text/html entonces deberás usar como separador de líneas una etiqueta HTML como <br/> o bien encapsular las líneas en párrafos con <p> (separar las líneas con CRLF ahora se vuelve algo opcional):

$email_body = "Nombre: " . htmlspecialchars($first_name) . "<br/>\r\n" .
  "Apellido: " . htmlspecialchars($last_name) . "<br/>\r\n" .
  "Portal: " . htmlspecialchars($portal) . "<br/>\r\n" .
  "Piso: " . htmlspecialchars($piso) . "<br/>\r\n" .
  "Email: <a href=\"mailto:" . htmlspecialchars($email) . "\">" .
  htmlspecialchars($email) . "</a><br/>\r\n" .
  "Telefono: " . htmlspecialchars($phone) . "<br/>\r\n" .
  "Incidencia: " .htmlspecialchars( $incidencia) . "<br/>\r\n" .
  "<hr/>" .
  "<b>Mensaje:</b> " . htmlspecialchars($message) . ".";
$cabeceras  = "MIME-Version: 1.0\r\n" .
  "Content-type: text/html; charset=utf-8\r\n";
mail($destinatario, $asunto, $email_body, $cabeceras);
OscarGarcia
  • 26,999
  • 3
  • 26
  • 61