Enviar correo usando un servidor SMTP con PHP

Enviar correo usando un servidor SMTP con PHP

Dentro de las funcionalidades básicas de cualquier aplicación web se encuentra la comunicación con el usuario a través de correo electrónico. Tenemos la opción fácil y directa de usar la función mail() de PHP que usa un demonio de SMTP propio (suele ser sendmail), sin embargo, los filtros de spam harán su labor y aunque seamos confiables, tenemos todas las papeletas para que nos tachen de los contrario y el correo no llegará a su destino.

Enviar correo usando servidor SMTP con PHP

La solución es usar un servidor SMTP externo, aquí mismo explicamos cómo hacer uso del servidor SMTP de Gmail para usarlo dentro de WordPress, pero vamos a explicaros un método válido para cualquier aplicación que desarrolléis con PHP.

Lo primero que tenemos que hacer es descargar la clase que se encargará del trabajo, es software libre bajo licencia GPL, hablamos del proyecto PHPMailer. Descargamos la última versión disponible para nuestra versión de PHP (aquí hablaremos de la versión más actual, la que corresponde con PHP 5) y descomprimimos.

Nos comenta danipelon que la versión oficial del proyecto está ahora en GitHub, esta es la dirección.

La clase tiene otras funcionalidades, pero nosotros como sólo vamos a enviar correo, usaremos el código de los ficheros:

  • class.phpmailer.php
  • class.smtp.php

El procedimiento es el siguiente: incluimos los ficheros en cuestión, instanciamos un objeto, asignamos sus atributos (asunto, remitente, destinatario, cuerpo del mensaje) y finalmente ejecutamos un método que lo envía.

Veamos un ejemplo completo:

require(‘class.phpmailer.php’);
require(‘class.smtp.php’);

$mail = new PHPMailer();

$body = “Cuerpo del mensaje”;

$mail->IsSMTP(); 

// la dirección del servidor, p. ej.: smtp.servidor.com
$mail->Host = “direccion_servidor”;

// dirección remitente, p. ej.: no-responder@miempresa.com
$mail->From = “Dirección_remitente”;

// nombre remitente, p. ej.: "Servicio de envío automático"
$mail->FromName = “Nombre_remitente”;

// asunto y cuerpo alternativo del mensaje
$mail->Subject = “Asunto”;
$mail->AltBody = “Cuerpo alternativo 
    para cuando el visor no puede leer HTML en el cuerpo”; 

// si el cuerpo del mensaje es HTML
$mail->MsgHTML($body);

// podemos hacer varios AddAdress
$mail->AddAddress(“dirección_destino”, “Nombre_destino”);

// si el SMTP necesita autenticación
$mail->SMTPAuth = true;

// credenciales usuario
$mail->Username = “Usuario”;
$mail->Password = “Contraseña”; 

if(!$mail->Send()) {
echo “Error enviando: ” . $mail->ErrorInfo;
} else {
echo “¡¡Enviado!!”;
}