Ejemplo PHP: Enviar emails con SMTP

logo de php

Ejemplo de código fuente en PHP, con el cual podremos enviar emails o correos electrónicos, a través de un servidor SMTP y puerto que nosotros configuremos, mucho más útil para cuando la función mail de php, se nos queda obsoleta y no puede realizar envíos masivos.

 

 

Descripción del ejemplo

Como hay casos en los que nos topamos con que la función mail() que trae php, se nos queda corta, y necesitamos configurar un servidor SMTP con su puerto y su autenticación correspondiente, pues para ello tenemos que utilizar una clase específica, o un framework que se encargue de hacer todo esto.

Yo destaco estos 2:

 

 

Para este ejemplo, usaremos la clase PHPMailer, la cual es usada por muchos CMS como WordPress, Drupal, Joomla, etc. Entre las características que trae esta clase pues podemos destacar las siguientes:

 

  • Soporte SMTP integrado, para enviar sin la necesidad de un servidor de correo local.
  • Envíos múltiples a varios remitentes con CC, CCO, etc.
  • Soporte para contenido UTF-8, 8bit, base64, binary 8bits, base64 y binarios.
  • Emails alternativos para clientes de correo que no leen correos en HTML.
  • Autenticación SMTP.
  • Mensajes de error en 46 idiomas.
  • Envíos de datos adjuntos con los emails.
  • Posibilidad de incluir imágenes en los emails.

 

 

Código

<?php

require 'PHPMailer/class.phpmailer.php';

$mail = new PHPMailer;

/** Configurar SMTP **/
$mail->isSMTP();                                      // Indicamos que use SMTP
$mail->Host = 'smtp1.dominio.com;smtp2.dominio.com';  // Indicamos los servidores SMTP
$mail->SMTPAuth = true;                               // Habilitamos la autenticación SMTP
$mail->Username = 'user@example.com';                 // SMTP username
$mail->Password = 'XXXXXX';                           // SMTP password
$mail->SMTPSecure = 'tls';                            // Habilitar encriptación TLS o SSL
$mail->Port = 587;                                    // TCP port

/** Configurar cabeceras del mensaje **/
$mail->From = 'tu@correo.com';                       // Correo del remitente
$mail->FromName = 'Tu nombre y apellidos';           // Nombre del remitente
$mail->Subject = 'Asunto del correo';                // Asunto

/** Incluir destinatarios. El nombre es opcional **/
$mail->addAddress('destinatario1@correo.com', 'Nombre1');
$mail->addAddress('destinatario2@correo.com', 'Nombre2');
$mail->addAddress('destinatario3@correo.com', 'Nombre3');

/** Con RE, CC, BCC **/
$mail->addReplyTo('info@correo.com', 'Informacion');
$mail->addCC('cc@correo.com');
$mail->addBCC('bcc@correo.com');

/** Incluir archivos adjuntos. El nombre es opcional **/
$mail->addAttachment('/archivos/miproyecto.zip');        
$mail->addAttachment('/imagenes/imagen.jpg', 'nombre.jpg');

/** Enviarlo en formato HTML **/
$mail->isHTML(true);                                  

/** Configurar cuerpo del mensaje **/
$mail->Body    = 'Este es el mensaje en HTML <b>en negrita!</b>';
$mail->AltBody = 'Este es el mansaje en texto plano para clientes que no admitan HTML';

/** Para que use el lenguaje español **/
$mail->setLanguage('es');

/** Enviar mensaje... **/
if(!$mail->send()) {
    echo 'El mensaje no pudo ser enviado.';
    echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
    echo 'Mensaje enviado correctamente';
}


?>