Generalidades PHP mail()

Generalidades

Los sitios web creados en PHP pueden aprovechar la función de correo PHP que crea la capacidad de enviar correos electrónicos directamente desde tu sitio web. Puedes leer más sobre esta función en el sitio web de PHP:

PHP está disponible de forma predeterminada en todos los planes de alojamiento, por lo que no hay nada que necesites habilitar para usar la función de correo PHP.

Nunca uses la entrada de formulario (como nombres o direcciones de correo electrónico) en la sección "Additional headers" del comando PHP mail(). Esto puede conducir a exploits de inyección de encabezado de correo que permiten a los spammers secuestrar tus formularios de correo electrónico. Visita la siguiente página para obtener información adicional sobre cómo funcionan estos ataques y cómo prevenirlos:

Ejemplo simple de phpmail()

Crea un archivo llamado algo así como "phpmail.php" y agrega el siguiente código.

Asegúrate de cambiar la dirección FROM a un correo electrónico en el dominio de tu sitio. Por ejemplo, si su sitio es 'example.com', la dirección FROM debería ser algo como 'admin@example.com'. Esto es para evitar cualquier problema con la 'Política de dominio del remitente'.

<?php
//sending email with the php mail()
mail('user@example.com', 'Subject Line Here', 'Body of Message Here', 'From: admin@example.com');
?>

Cuando visites esta página en un navegador, aparecerá como una página en blanco en blanco. Pero al visitarlo, invoca la función de correo PHP para enviar un correo electrónico a la dirección ingresada.

Ejemplo básico con variables

Este ejemplo agrega las variables $message directamente en los parámetros mail():

<?php

// compose message
$message = "Lorem ipsum dolor sit amet, consectetuer adipiscing elit.";
$message .= " Nam iaculis pede ac quam. Etiam placerat suscipit nulla.";
$message .= " Maecenas id mauris eget tortor facilisis egestas.";
$message .= " Praesent ac augue sed enim aliquam auctor. Ut dignissim ultricies est.";
$message .= " Pellentesque convallis tempor tortor. Nullam nec purus.";

// make sure each line doesn't exceed 70 characters
$message = wordwrap($message, 70);

// send email
mail('somebody@example.com', 'Nonsensical Latin', $message);
?>

Ejemplo Avanzado

Este ejemplo utiliza variables como $to, $subject y $headers que luego se agregan a los parámetros de mail():

<?php
$to = "somebody@example.com";
$subject = "Nonsensical Latin";

// compose headers
$headers = "From: webmaster@example.com\r\n";
$headers .= "Reply-To: webmaster@example.com\r\n";
$headers .= "X-Mailer: PHP/".phpversion();

// compose message
$message = "Lorem ipsum dolor sit amet, consectetuer adipiscing elit.";
$message .= " Nam iaculis pede ac quam. Etiam placerat suscipit nulla.";
$message .= " Maecenas id mauris eget tortor facilisis egestas.";
$message .= " Praesent ac augue sed enim aliquam auctor. Ut dignissim ultricies est.";
$message .= " Pellentesque convallis tempor tortor. Nullam nec purus.";
$message = wordwrap($message, 70);

// send email
mail($to, $subject, $message, $headers);
?>

Envío de correo HTML

Este ejemplo te permite agregar código HTML a tu correo electrónico. Pon el siguiente contenido en un archivo con una extensión .php:

<?php

// multiple recipients (note the commas)
$to = "somebody@example.com, ";
$to .= "nobody@example.com, ";
$to .= "somebody_else@example.com";

// subject
$subject = "Nonsensical Latin";

// compose message
$message = "
<html>
  <head>
    <title>Nonsensical Latin</title>
  </head>
  <body>
    <h1>Nonsensical Latin</h1>
    <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
       Nam iaculis pede ac quam. Etiam placerat suscipit nulla.
       Maecenas id mauris eget tortor facilisis egestas.
       Praesent ac augue sed <a href=\"http://lipsum.com/\">enim</a> aliquam auctor.
       Pellentesque convallis tempor tortor. Nullam nec purus.</p>
  </body>
</html>
";

// To send HTML mail, the Content-type header must be set
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";

// send email
mail($to, $subject, $message, $headers);
?>

Inyección de encabezado de correo

El siguiente código se puede colocar en la parte superior de tu script PHP para disuadir las inyecciones de encabezado más comunes. Ten en cuenta que este código no permite el acceso directo a la página, así que solo agrega a una página de "proceso" accesible mediante una acción Enviar. Filtrará cualquier encabezado CC o BCC que se esté inyectando, así como cualquier nueva línea o etiquetas de retorno de carro inyectadas en el encabezado del correo electrónico.

<?php
if (!isset($_POST['submit'])) {
   echo "<h1>Error</h1>\n
      <p>Accessing this page directly is not allowed.</p>";
   exit;
}

$email = preg_replace("([\r\n])", "", $email);

$find = "/(content-type|bcc:|cc:)/i";
if (preg_match($find, $name) || preg_match($find, $email) || preg_match($find, $url) || preg_match($find, $comments)) {
   echo "<h1>Error</h1>\n
      <p>No meta/header injections, please.</p>";
   exit;
}
?>

Script avanzado de correo PHP

Ve los siguientes artículos para ver ejemplos completos sobre cómo enviar correo SMTP a través de un script PHP.

Ver También

¿Este artículo ha respondido sus preguntas?

Última actualización el PST.