Saltar al contenido
MundoCursos

¿Cómo enviar un correo con PHP?

Ya sea porque te hayas animado a aprender PHP por tu cuenta o porque estés haciendo un curso, sabrás que hay una gran cantidad de funciones de las que te puedes beneficiar, muchas de ellas fundamentales en el uso de este lenguaje.

Saber cómo enviar correos con PHP es una de las tareas que podemos considerar imprescindibles, ya que se trata de un tipo de función que está presente en la mayoría de las webs.

¿Cómo enviar un email con PHP mail()?

Tanto si te has animado con la aventura de aprender php por tu cuenta como si estás haciendo un curso, este recurso PHP mail() será una de los primeros que dominarás. Se trata de una función que utiliza una sintaxis tan sencilla como la siguiente:

mail(to, subject, message, headers, parameters);

Esta simple estructura será la que te permitirá gestionar el envío de correos electrónicos con PHP. Para poder hacer el envío de correos, lo que necesitas es llegar a entender bien la estructura de la sintaxis. Esta se encuentra formada por tres parámetros obligatorios y dos opcionales.

¿Te gustaría aumentar tus conocimientos en PHP?

Está claro que ser autodidacta es una de las mejores cualidades que podría tener cualquier programador.

Sin embargo, si quieres acelerar al máximo tu aprendizaje, te animamos a ver esta guía para descubrir el mejor curso de PHP para ti.

Parámetros obligatorios

  • To: se utiliza para indicar el destinatario que recibirá el correo electrónico. Es posible añadir una coma después de cada destinatario con la intención de enviar el mensaje a varias personas.
  • Subject: lo que en español conocemos como “asunto”. Es el titular del correo, aquello que se suele leer antes de realizar su apertura.
  • Message: aquí es donde se coloca el cuerpo del mensaje, el contenido que se enviará dentro del mismo.

Parámetros opcionales

  • Headers: gracias a esta función optativa, es posible incorporar cabeceras adicionales dentro del envío del mensaje. Algunas de ellas son muy importantes. Es el caso de “From”, la cual utilizarás para indicar la persona que actúa como remitente. Otra de las cabeceras que puedes usar incluye “Bcc”, que se utiliza para indicar direcciones de correo adicionales que recibirán una copia del mensaje, pero que quedarán ocultadas. En tercer lugar, también es una buena idea el uso de “Cc”, cabecera que tendrás que utilizar para poner correos en copia que quedarán visibles.
  • Additional_parameters: sirve a la hora de hacer la configuración de opciones añadidas que se integrarán en el envío de correos que se realicen con tu función php. Hay distintas posibilidades y se trata de algo a lo que le podrás sacar más partido a medida que vayas aprendiendo. Una de las opciones más frecuentes que entran dentro de estos parámetros es “sendmail_path”.

Ejemplos de cómo enviar correos con PHP

Te recomendamos fijarte bien en los distintos ejemplos que te vamos a ir dando a lo largo de esta formación de PHP básica. Te ayudarán a entender mejor el funcionamiento de este sistema de correo.

Ejemplo simple para el envío de correos en PHP

Para comenzar, te enseñamos el más sencillo teniendo en cuenta lo que te hemos explicado anteriormente sobre la sintaxis y las funciones.

<?

mail("destinatario@eseldestinatario.com,destinatario2@esotrodestinatario.com",
	 "asuntodelcorreo",
	 "Escribe aquí lo que incluya el cuerpo del mensaje")

?>

En este ejemplo puedes ver que hemos utilizado el comando inicial “mail”, dos destinatarios, un asunto y el cuerpo del mensaje.

Otra forma de representar un ejemplo sencillo como este es la siguiente:

$to = "destinatario@eseldestinatario.com, destinatario2@eseldestinatario2.com";
$subject = "Asuntodelcorreo";
$message = "Escribe aquí lo que incluya el cuerpo del mensaje";

mail($to, $subject, $message);

Ejemplo complejo para enviar correos con PHP

Como te habrás fijado, en el ejemplo previo nos hemos limitado a usar la estructura básica de la sintaxis. No obstante, también te queremos enseñar cómo es un correo más complejo.

$to = "destinatario@eseldestinatario.com, destinatario2@eseldestinatario.com";
$subject = "Asuntodelcorreo";
$message = "Escribe aquí lo que incluya el cuerpo del mensaje";
$headers = "From: micorreo@eselremitente.com" . "\r\n" . "CC: destinatariocopiado@eseldestinatarioencopia.com";
mail($to, $subject, $message, $headers);

En este ejemplo tienes un envío de correo con PHP mucho más elaborado y profundo. Lo primero de todo, fíjate en cómo hemos mantenido la misma estructura que en el ejemplo sencillo. En la práctica, lo que hemos hecho ha sido realizar un trabajo similar. El mensaje que recibirán los destinatarios será el mismo, pero habrá ciertas variantes aplicadas a la sintaxis utilizada en este código.

Además de los elementos “$to”, “$subject” y “$message”, lo que hemos hecho ha sido incorporar “$headers” con la intención de enviar el mensaje a un destinatario adicional a modo de copia. Si en tu función cambias “CC” por “BCC”, lo que harás será enviar una copia a ese destinatario, pero una que se mantendrá oculta para que el resto de destinatarios no estén al tanto de ello.

Ejemplo para enviar correos con PHP y HTML incrustado

En tercer lugar, tenemos otro ejemplo en el que podrás ver que la función PHP del envío de correo también se puede integrar con HTML incrustado. La versatilidad que te aportará en el trabajo de tu web será elevada y es muy probable que te ayude a implementar un sistema mejor estructurado en la página.

$to = "destinatario@eseldestinatario.com";
$subject = "Asuntodelcorreo";
$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type:text/html;charset=UTF-8" . "\r\n";
$message = "
<html>
	<head>
		<title>HTML</title>
	</head>
	<body>
		<h1>Título principal del contenido</h1>
		<p>Escribe aquí el contenido en HTML</p>
	</body>
</html>";
mail($to, $subject, $message, $headers);

Como puedes haber visto, lo que hemos hecho en este ejemplo ha sido adaptar el ejemplo sencillo del envío de correo con PHP a la implementación combinada con código HTML. El resultado se visualiza con facilidad, por lo que no genera ningún tipo de problema en la práctica. La adaptación del ejemplo complejo sería prácticamente la misma, pero añadiendo la parte de “$headers”.

Alternativas para enviar correo con PHP

Por supuesto, hay distintas opciones alternativas que acaban ofreciéndote un rendimiento similar, pero con tecnología añadida dotada tanto de ventajas como de desventajas. Algunas de las opciones más comunes son las siguientes:

Enviar usando PHPMailer

Este es uno de los programas más usados y también uno de los más útiles. Tiene la ventaja de ser de código abierto y de ofrecer un rendimiento que no solo solapa el envío sencillo de correos con PHP, sino que aporta funciones adicionales.

Enviar correo usando PHPMailer

Lo más interesante es que el sistema básico lo hace un poco más simple, siendo recomendable para evitar complicaciones.

A eso añade posibilidades extra como el envío de correos con adjuntos o la opción de utilizar una amplia serie de servidores SMTP y no solo el básico (por ejemplo, es posible personalizar la necesidad de autenticación).

Otra de sus ventajas es que cuenta con muchos ejemplos y no resulta difícil de entender, por lo que quizá acabes recurriendo a su uso incluso si dominas la configuración de correos con PHP. Por último, no hay que dejar de lado la curiosidad de poder utilizar PHPMailer para configurar el envío de los correos por PHP con el uso del servidor de Gmail de Google.

Otros programas

Por lo general es habitual usar simplemente la función PHP mail() o, en su defecto, PHPMailer, pero es cierto que hay otros programas que puedes utilizar. Algunos de ellos son:

  • SwiftMailer
  • Email Reply Parser
  • Mautic
  • Omnimail
  • Email Validator

Cada uno tiene unas funciones muy concretas, lo que hace que se queden en segundo plano, pero que resulten igualmente útiles.

Preguntas frecuentes sobre enviar correos con PHP

¿Cómo utilizar los parámetros adicionales enviando correos en PHP?

Antes te hemos hablado del elemento “Additional_parameters” del que también puedes hacer uso, aunque no lo hemos incluido en nuestro ejemplo complejo. Es posible que lo hayas intentado usar y que no hayas tenido éxito.

Hay que saber que esta función no la puedes usar con versiones antiguas de PHP. Se incorporó como una de las novedades en PHP 4.0.5. Además, normalmente, en modo seguro se encuentra deshabilitada. Tendrás que acceder a las opciones del servidor para comprobar que todo está en orden y que la puedes utilizar.

¿Qué hay que hacer para poder enviar correos con PHP?

Es fundamental que tu servidor esté configurado correctamente. Para ello, de lo que te tienes que asegurar es de que tu hosting tiene activada la opción del servicio Sendmail. Normalmente es algo que se encuentra activado por defecto, por lo que no deberías tener problemas en usar este tipo de PHP.

No obstante, si necesitases hacerlo de forma manual, solo tendrías que entrar en el panel de administración del servidor y, en el apartado de “Emails”, hacer clic en “Control del servicio de correo”.

Aquí tendrás que buscar tres opciones y asegurarte de que están activadas: “Administrar el servicio Sendmail”, “Administrar el servicio POP3/IMAP” y “Administrar el servicio SMTP”.

¿Cómo configurar PHP para enviar correos en un servidor propio?

Si no estás usando un hosting administrado, sino un servidor propio, tendrás que llevar a cabo un proceso adicional de configuración. Para ello, abre el archivo “php.ini” y busca [mail function] para personalizar la configuración de la función de correo.

Si bien hay distintas formas de hacerlo, sobre todo variando en base a tu sistema operativo, lo cierto es que son similares. Lo que tienes que hacer es indicar el campo “smtp” y rellenarlo con el servidor saliente que utilizarás en el envío de correos que se producirá en tu web. Los servidores SMTP siempre tienen esta estructura: “smtp.tudominio.com”.

Una excepción se puede encontrar en el caso de que estés utilizando tu propio ordenador como servidor. En ese caso, no introduzcas una dirección de servidor, sino que solo tienes que incluir “localhost” para que funcione.