viernes, 1 de agosto de 2014

Enviar un correo en PHP a través de nuestra cuenta de GMail, Outlook o Yahoo

A veces se da el caso de que necesitamos enviar un correo a través de una página web realizada en PHP, ya sea por un formulario de contacto o porque queremos que la página nos envíe una notificación (un pago recibido, un inicio de sesión fallido, etc). A pesar de que PHP cuenta con la función "mail()" la cual puede solucionarnos la vida bastante rápido, la verdad es que muchos hosting no permiten enviar correo a través de esta función. Para ello podemos hacer uso de una clase muy útil llamada PHPMailer, la cual permite enviar correos a través de casi cualquier sistema de correo que soporte SMTP.

Puedes descargar el paquete de PHPMailer directamente aquí: https://github.com/Synchro/PHPMailer/archive/master.zip

Una vez que hallamos descargado el paquete vamos descomprimir el contenido en un directorio llamado "PHPMailer" dentro de la raiz principal de nuestro sitio PHP y agregaremos mediante "includes" las librerías necesarias al principio de nuestra página PHP.

require_once('../PHPMailer/class.phpmailer.php');
include("../PHPMailer/class.smtp.php");

Ahora, crearemos un objeto y configuraremos algunos parámetros para enviar correo a través de nuestra cuente PHP:

$mail  = new PHPMailer();

//asigna a $body el contenido del correo electrónico
$body = "Contenido del cuerpo del correo"; 

// Indica que se usará SMTP para enviar el correo
$mail->IsSMTP(); 

$mail->SMTPDebug  = 2;                     
// Activar los mensajes de depuración, 
// muy útil para saber el motivo si algo sale mal
// 1 = errores y mensajes
// 2 = solo mensajes entre el servidor u la clase PHPMailer

$mail->SMTPAuth = true;
// Activar autenticación segura a traves de SMTP, necesario para gmail

$mail->SMTPSecure = "tls";
// Indica que la conexión segura se realizará mediante TLS

$mail->Host = "smtp.gmail.com";
// Asigna la dirección del servidor smtp de GMail

$mail->Port = 587;
// Asigna el puerto usado por GMail para conexion con su servidor SMTP

$mail->Username = "tucorreo@gmail.com";  
// Indica el usuario de gmail a traves del cual se enviará el correo

$mail->Password = "tu contraseña";
// GMAIL password

$mail->SetFrom('name@yourdomain.com', 'First Last'); 
//Asignar la dirección de correo y el nombre del contacto que aparecerá cuando llegue el correo

$mail->Subject = "Probando enviar un correo con PHPMailer y GMail"; 
//Asignar el asunto del correo

//$mail->MsgHTML($body); 
//Si deseas enviar un correo con formato HTML debes descomentar la linea anterior

$mail->AddAddress("jonnathang@servidorcorreo.com", "Jonnathan Gutierrez"); 
//Indica aquí la dirección que recibirá el correo que será enviado

if(!$mail->Send()) {
  echo "Error enviando correo: " . $mail->ErrorInfo;
} else {
  echo "Correo enviado!!!";
}

Y de esta forma ya podrás probar el envío de correos desde PHP con tu cuenta de GMail. Si deseas probar enviar desde Hotmail/Outlook o Yahoo debes usar la siguiente combinación de servidores y puertos:

Outlook/Hotmail
$mail->Host = "smtp-mail.outlook.com";
$mail->Port = 587;
$mail->Username = "tucorreo@outlook.com"; //o bien tucorreo@hotmail.com  
$mail->Password = "tu contraseña";

Yahoo:
$mail->Host = "smtp.mail.yahoo.com";
$mail->Port = 465;
$mail->Username = "tucorreo@yahoo.com";
$mail->Password = "tu contraseña";   

Algunos consejos finales:

  1. En caso de querer enviar correo a través de gmail, hotmail, outlook o yahoo, asegúrate de usar en $mail->SetFrom(correo, nombrecontacto) el mismo correo que asignas a $mail->Username, si no lo haces tu servidor de correo o el servidor de correo del destinatario podrían marcar el correo como "SPAM" o un intento de suplantación de identidad y el correo nunca llegara a la bandeja de entrada del destinatario.
  2. Si deseas enviar publicidad mediante una página PHP te recomiendo respetar los limites de correos del sistema de correos que usaras. Por ejemplo GMail permite enviar solo 100 correos diarios. Tu cuenta de correo podría ser bloqueada por uno o varios días si superas esos límites.
  3. En caso de usar gmail, outlook, hotmail o yahoo, en $mail->Username debes usar el correo completo con dominio (tucorreo@hotmail.com, tucorreo@gmail.com...), no solamente el nombre de usuario.
En otra oportunidad hablaremos sobre unos consejos para enviar correo masivo mediante PHP...

No hay comentarios:

Publicar un comentario en la entrada