Enviar un email con PHPMailer usando una cuenta de Gmail

Ya hace un tiempo hablamos aquí de cómo enviar correos desde un script de php usando PHPMailer. He decidido hacer una serie de artículos ampliando un poco más el tema.

Una cuestión que puede ser interesante, sobre todo para aquellos que a lo mejor están en un hosting gratuito y no tienen cuentas de correo vinculadas a su dominio, es utilizar una cuenta de Gmail para enviar los correos. Ya que Gmail nos permiter usarlo como cualquier otro correo SMTP esto es factible.

Configurar PHPMailer para usar Gmail es simple, y podéis ver cómo se haría en el siguiente ejemplo (va comentado línea a línea):

/*Lo primero es añadir al script la clase phpmailer desde la ubicación en que esté*/
require '../class.phpmailer.php';

//Crear una instancia de PHPMailer
$mail = new PHPMailer();
//Definir que vamos a usar SMTP
$mail->IsSMTP();
//Esto es para activar el modo depuración. En entorno de pruebas lo mejor es 2, en producción siempre 0
// 0 = off (producción)
// 1 = client messages
// 2 = client and server messages
$mail->SMTPDebug  = 0;
//Ahora definimos gmail como servidor que aloja nuestro SMTP
$mail->Host       = 'smtp.gmail.com';
//El puerto será el 587 ya que usamos encriptación TLS
$mail->Port       = 587;
//Definmos la seguridad como TLS
$mail->SMTPSecure = 'tls';
//Tenemos que usar gmail autenticados, así que esto a TRUE
$mail->SMTPAuth   = true;
//Definimos la cuenta que vamos a usar. Dirección completa de la misma
$mail->Username   = "tucuenta@gmail.com";
//Introducimos nuestra contraseña de gmail
$mail->Password   = "tucontraseña";
//Definimos el remitente (dirección y, opcionalmente, nombre)
$mail->SetFrom('tucuenta@gmail.com', 'Mi nombre');
//Esta línea es por si queréis enviar copia a alguien (dirección y, opcionalmente, nombre)
$mail->AddReplyTo('replyto@correoquesea.com','El de la réplica');
//Y, ahora sí, definimos el destinatario (dirección y, opcionalmente, nombre)
$mail->AddAddress('destinatario@sucorreo.com', 'El Destinatario');
//Definimos el tema del email
$mail->Subject = 'Esto es un correo de prueba';
//Para enviar un correo formateado en HTML lo cargamos con la siguiente función. Si no, puedes meterle directamente una cadena de texto.
$mail->MsgHTML(file_get_contents('correomaquetado.html'), dirname(ruta_al_archivo));
//Y por si nos bloquean el contenido HTML (algunos correos lo hacen por seguridad) una versión alternativa en texto plano (también será válida para lectores de pantalla)
$mail->AltBody = 'This is a plain-text message body';
//Enviamos el correo
if(!$mail->Send()) {
  echo "Error: " . $mail->ErrorInfo;
} else {
  echo "Enviado!";
}

Esencialmente es casi lo mismo que viene en los DOCS que acompañan a los archivos, pero traducido.

Espero que os sirva. Próximamente más PHPMailer, y más programación web.

Anuncio publicitario

13 comentarios en “Enviar un email con PHPMailer usando una cuenta de Gmail

  1. Gonzalo

    He estado revisando muuuchos foros de PHPMailer, y con todos los ejemplos que he probado, obtengo este error:

    «Fix the way that SMTP host lists are parsed, see #112»

    ¿Sabrás a que puede deberse?, copié textualmente tu ejemplo, y obviamente cambié las direcciones de correo, pero nada…

    Cualquier cosa, quedo atento. Gracias por la comprensión y el tema !

  2. Dani

    Hola Donie, sobre eel envio por phpmailer he realizado un scrip.php con el codigo que indicas cambiando los correos por los mios y dejando depuracion en 2. lo he subido al host junto con los class.smtp.php y class.phpmailer.php en la misma carpeta, cuando hago el envio no da error pero se queda la pagina en blanco y no recibo ningun correo, he mirado por la red y dicen que lo mejor es cambiar el puerto a 465 y tambien lo he probado y no hace nada.
    Me puedes ayudar a conocer el problema ya que el host «Hostinger» no me permite utiizar su smpt por temas de spam y me han dicho que lo unico es que utilice el phmailer.
    Gracias por tu tiempo.
    Dani.

    1. Amigo a mi tambien me genera error al querer enviar el correo, igualmente he intentado cambiar de puertos y la verdad me frustra ver como el código les sirve en tutoriales y cuando lo aplico yo no funcion. Y uso exactamente el mismo código que todos las mismas configuraciones hasta he habilitado mi cuenta de gmail a que pueda funcionar en otras aplicaciones, es decir, para que no me bloquee mi cuenta a la hora de enviar el correo desde mi página web.
      Alguien podría ayudarme no se que más hacer :/

  3. Pedro

    Hola he seguido el articulo paso a paso.
    He intentado tanto con este tutorial como con otros, además también lo he intentado con swiftmailer y aunque parece que todo está correcto, al ejecutarlo siempre aparece el mismo mensaje:
    «La página localhost no funciona

    La página localhost no puede procesar esta solicitud ahora.
    500»

    Estoy bajo ubuntu y he instalado lamp.
    SI alguien sabe porque aparece este error y puede ayudarme lo agradecería.
    Un saludo.

  4. Diego Ranieri

    Buenas tardes y gracias por tanto aporte!
    Te hago una consulta, el unico error que obtengo es al llamar a PHPMailer.
    Me sale: undefined type PHPMailer.php y realmente no se como resolverlo.

    Gracias!

Deja una respuesta

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.