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
- Documentación de función PHP.net mail()
- HTML <form> action Attribute — Un tutorial de w3schools sobre cómo crear y enviar un formulario de PHP.