Generalidades de PHP mail()

Generalidades

Los sitios web creados en PHP pueden aprovechar la función de correo PHP que crea la capacidad de enviar correos 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) 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. 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 agrégale el siguiente código.

DreamHost recomienda encarecidamente asegurarte de que los mensajes enviados a través PHP mail() estén autenticados a través de SMTP. Revisa el siguiente artículo para más información:

Asegúrate de cambiar la dirección FROM a un correo en el dominio de tu sitio. Por ejemplo, si tu 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 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', 'Subject', $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 = "Subject";

// 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. Agrega 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 = "Subject";

// compose message
$message = "
<html>
  <head>
    <title>Title</title>
  </head>
  <body>
    <h1>Topic</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.

<?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

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

Ver También

Enlaces internos

Enlaces externos

¿Este artículo ha respondido sus preguntas?

Última actualización el PST.

¿Aún no encuentra lo que busca?