:::: MENU ::::

Enviar Email con PHP y Gmail

PHPMailer la estupenda librería de la cual hemos comentado en oportunidades anteriores se esta actualizando constantemente y entre las nuevas cualidades esta la posibilidad de enviar Email utilizando el servidor SMTP de Gmail, con lo cual resolvemos el problema de no tener un servidor SMTP para hacer los envíos.

Utilizando PHPMailer con Gmail
Debido a las actualizaciones que han hecho en PHPMailer algunos métodos han cambiado y se han agregado otros, entre los cuales se encuentran los métodos para utilizar Gmail en nuestros envíos.

Entonces primero descargamos los archivos fuente e incluimos los archivos class.phpmailer.php y class.smtp.php, para luego inicializar la clase, luego asignamos los datos del host y puerto de Gmail y adicionalmente colocamos nuestro usuario y clave de Gmail pues para hacer uso de este SMTP hace falta autentificación.

include("class.phpmailer.php");
include("class.smtp.php");

$mail = new PHPMailer();
$mail->IsSMTP();
$mail->SMTPAuth = true;
$mail->SMTPSecure = "ssl";
$mail->Host = "smtp.gmail.com";
$mail->Port = 465;
$mail->Username = "username@gmail.com";
$mail->Password = "userpass";

Hasta este punto ya tenemos configurado nuestro script para utilizar el SMTP de Gmail, el siguiente paso es preparar y hacer el envío del email.

$mail->From = "user@domain.com";
$mail->FromName = "User Name";
$mail->Subject = "Subject del Email";
$mail->AltBody = "Hola, te doy mi nuevo numero\nxxxx.";
$mail->MsgHTML("Hola, te doy mi nuevo numero<br><b>xxxx</b>.");
$mail->AddAttachment("files/files.zip");
$mail->AddAttachment("files/img03.jpg");
$mail->AddAddress("destino@domain.com", "Destinatario");
$mail->IsHTML(true);

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

Nótese que en From podemos colocar la dirección email que deseamos se muestre y no necesariamente nuestra cuenta Gmail, en AltBody se envía el mensaje en texto plano y MsgHTML el mensaje en formato HTML. Adicionalmente y como prueba estamos adjuntando dos archivos, finalmente en el método AddAddress agregamos los datos del destinatario de nuestro email.

Conclusiones
Como pueden ver utilizar Gmail para el envío de nuestros email es muy sencillo, solo requiere unas lineas adicionales a nuestro script y obviamente una cuenta en Gmail la cual es gratuita.


89 Comentarios

  • Silvio Fernandez |

    Hola, a mi tambien me sale este error

    Warning: fsockopen() [function.fsockopen]: php_network_getaddresses: getaddrinfo failed: No such host is known. in C:\wamp\www\class.smtp.php on line 89

    Warning: fsockopen() [function.fsockopen]: unable to connect to smtp.gmail.com:465 (php_network_getaddresses: getaddrinfo failed: No such host is known. ) in C:\wamp\www\class.smtp.php on line 89
    Error: SMTP Error: could not connect to SMTP host server(s)

    configure tambien el php.ini de la siguiente forma

    SMTP = smtp.gmail.com
    smtp_port = 465

    No se que podria ser el problema

  • Hann |

    Excelentes aportes, gracias por su ayuda, despues de mucho tiempo he logrado enviar mi primer mensaje.

    MUchas gracias

  • Orlando |

    A mí me sirvio cambiando la línea:

    $mail->SMTPSecure = “ssl”;

    por:

    $mail->SMTPSecure = “tls”;

  • j steban |

    Salu2, yo tenia este scriipt funcionando correctamente, y desde hace algun tiempo para aca me dejo de funcionar, a alguien mas le paso esto ?
    ya cambie los puertos, y l linea de $mail->SMTPSecure = “tls”; pero sigue sin funcionar.

    alguien me puede ayudar ¡¡¡¡

  • Manuel Rojas |

    hice todo lo que dicen…

    y me sigue dando el siguiente error…

    Error al enviar email: SMTP Error: Could not connect to SMTP host.

    que puede ser??

    es algo de windows vista??? yo uso ese…

  • Francisco |

    Hola, tengo el sitio subido a un servidor gratuito y me da el siguiente error al enviar email: SMTP Error: Could not connect to SMTP host.

    Cuando lo uso en mi localhost con xampp funciona todo perfecto! pero en el hosting gratuito me da ese tristisimo error… somebody help me!!!!

  • Ralph |

    Q tal Sres !!

    De igual forma he seguido todos los pasos, modifique el archivo xampp\apache\bin para habilitar el SSL pero me sigue mandando el error de SMTP Error: Could not authenticate. y Error: SMTP Error: Could not authenticate.

    Que prosigue ??

    Saludos

  • Pablo Cartes |

    Me funciona super bien, ahora yo hago lo siguiente para poder enviar a multiples usuarios pero no me funciona muy bien, se aceptan sugerencias

    $result_mail = pg_Exec ($conexion,”select mail,cod_cmail from contactoscli where cod_cmail>=$inicio limit $limite”);
    if (!$result_mail) {
    echo “Error en el listado.\n”;
    exit;
    }
    $num_filas_mail= pg_numrows($result_mail);
    $linea_mail=0;
    while ( $linea_mail AddAddress($row_mail[‘0′], $row_mail[‘0′]); //correo de la persona quien recibe
    $mail->IsHTML(true);

    if(!$mail->Send()) {
    echo “Error: “.$cod_cm.””; //$mail->ErrorInfo;
    //$delete_mail = pg_Exec ($conexion,”delete from contactoscli where cod_cmail=$cod_cm”);
    $update_mail = pg_Exec ($conexion,”update contactoscli set estado=0 where cod_cmail=$cod_cm”);
    $el=$el+1;
    } else {
    echo “Mensaje enviado correctamente “.$cod_cm.””;
    $sum=$sum+1;
    $update_mail = pg_Exec ($conexion,”update contactoscli set enviados=enviados+1 where cod_cmail=$cod_cm”);
    }

    $linea_mail++;
    }
    echo “Total enviados: “.$sum.””;
    echo “Total Eliminados: “.$el;
    /*
    $mail->AddAddress(“pcartes@gmail.com”,”pcrtes”); //correo de la persona quien recibe
    $mail->IsHTML(true);

    if(!$mail->Send()) {
    echo “Error: ” . $mail->ErrorInfo;
    } else {
    echo “Mensaje enviado correctamente”;
    }
    */

    ?>

  • Judith |

    Una consulta no me funciona el código tengo que entregar un ejercicio y no lo logro.Creo que es un tema de que no configuré bien al phpmailer, no se ya estoy agotada y no sé que más probar

    Por favor me podrían explicar a los que le funcionó, como configurar el WAMP para que funcione? Es decir en qué directorio debo instalar el phpmailer con los archivos class?

    Espero se haya entendido

    Desde ya muchisimas gracias!!!!

  • javier |

    me saleeste error q puedo hacer >>>>Error: Language string failed to load: connect_host

  • Eduardo |

    Gracias, me salvó. Anduvo a la primera.
    Habia probado con la clase para php5_6 pero me daba error, con esto funcionó enseguida.
    Desde ahora en mis favoritos

  • Pag. en blanco |

    Hola,
    Cree un nuevo doc.php ingrese las lineas personalizadas,
    Pero al cargar la pag. queda en blanco y no llega ningun correo a destino. Que puede ser ?? Porfavor ayuda.

  • mari paz |

    hola a todos
    estoy intentando enviar emails desde php a gmail y no lo consigo
    he instalado las librerias libeay32 ssleay32 y php_openssl32 en window/system 32, me he bajado el openSSL pero nada sigue igual

    este es mi codigo
    IsSMTP();
    $mail->SMTPAuth = true;
    $mail->SMTPDebug = true;
    //$mail->SMTPSecure = “ssl”;
    $mail->Host = “smtp.gmail.com”;
    $mail->Port = 465;
    $mail->Username = “ejemplo@gmail.com”;
    $mail->Password = “xxxx”;
    //envio del mail
    $mail->From = “pr2@gmail.com”;
    $mail->FromName = “User Name”;
    $mail->Subject = “Subject del Email”;
    $mail->AltBody = “Hola, esto es una prueba.”;
    $mail->MsgHTML(“Hola, esto es una prueba.”);
    $mail->AddAddress(“pr2@gmail.com”, “Destinatario”);
    $mail->IsHTML(true);

    if(!$mail->Send()) {
    echo “Error: ” . $mail->ErrorInfo;
    } else {
    echo “Mensaje enviado correctamente”;
    }
    ?>

    muchas gracias

  • Francisco |

    Para el que le aparezca el error (Unable to find the socket transport “ssl” – did you forget to enable it when you configured PHP?) para el puerto que sea,esta es la solucion:

    1ºVayan al php.ini de apache y descomenten la línea:
    extension=php_openssl.dll .Es decir,quítenle el ; de delante.

    2ºReinicien Apache y pruebenlo de nuevo.

    De nada.

  • mauricio govel |

    probe el codigo y me salio el error Error: Language string failed to load: connect_host… posteriormente antes de probar todo fui a verificar el nombre de usuario y contraseña, lo cambie por otro correo de gmail que tengo y envio el correo perfectamente…. No les puedo decir si era el correo que lo escribi mal o a lo mejor que no se conecto bien con ese correo pero bueno esa fue la solucion que encontre, el posible error es que el correo este mal escrito o la contraseña no coincida…

    Saludos!! y muchas gracias excelente info la de aqui ya que no me funcionaba ningun otro de los que encontraba buscando en internet..

  • Jorge Ponce |

    Hola, les comparto que estoy trabajando en un sitio nuevo para PHP, utilizo el moodle y phpmyadmin.
    Busque muchos codigos y ninguno funciono.
    Este funciona excelente, solo le hice unos cambios por errores minimos de compatibilidad entre las versiones de PHP.
    Otra ventaja es que te deja agregar archivos, que mas se puede pedir!
    Para que no se sature tu correo solo tienes que depurar de vez en cuando tu cuenta de g-mail porque los mensajes se guardan en la bandeja de enviados.
    Gracias :)

  • Moisés |

    Super estupendo es justo lo que buscaba se los agradezco, estoy haciendo una aplicación para celular y era justo lo que necesitaba para registrar a los usuarios, ofiiiiiiiiiiiiiiiiiiiii!!!!!!!!!!!!!!!!!!!!!1

  • cesar |

    Muy interesante el codigo, y parece que resolveria mi problema, pero me sigue marcando errores despues de revisar varias cosas, tengo configurado el Mercury, aislado si envia correo, pero el programa como tal solo marca errores y como soy novato, pues si me cuesta trabajo identificar que ocurre:

    Error:
    Deprecated: Function eregi() is deprecated in C:\xampp\htdocs\mailsend\class.phpmailer.php on line 591

    Warning: fsockopen() [function.fsockopen]: unable to connect to ssl://smtp.gmail.com:465 (Unable to find the socket transport “ssl” – did you forget to enable it when you configured PHP?) in C:\xampp\htdocs\mailsend\class.smtp.php on line 122
    Error: Language string failed to load: connect_host

    Saludos

  • rodrigo |

    Me sale este error por favor necesito una mano estoy en un hosting gratuito y me sale este error
    Error: The following From address failed: bti.rodri@gmail.com
    este es mi codigo ayuda!!!!!!!

    Enviar Mensaje

    IsSMTP();
    $mail->SMTPAuth = true;
    $mail->SMTPSecure = “ssl”;
    $mail->Host = “smtp.gmail.com”;
    $mail->Port = 465;
    $mail->Username = “bti.rodri@gmail.com”;
    $mail->Password = “******”;

    $mail->From = “bti.rodri@gmail.com”;
    $mail->FromName = “Rodrigo”;
    $mail->Subject = “Subject del Email”;
    $mail->AltBody = “Hola, te doy mi nuevo numero\nxxxx.”;
    $mail->MsgHTML(“Hola, te doy mi nuevo numeroxxxx.”);
    $mail->AddAddress(“jballesteros@hotmail.com”);
    $mail->IsHTML(true);
    if(!$mail->Send()) {
    echo “Error: ” . $mail->ErrorInfo;
    } else {
    echo “Mensaje enviado correctamente”;
    }
    ?>

  • David |

    Para que funcione es necesario tener la extensión open_ssl de php. La puedes activar desde php->extensiones desde el WAMP server, que es el que he usado.

    La función funciona correctamente y envía a cualquier dirección, pero es como si enviaras un correo desde gmail. Necesitas el usuario y contraseña de una cuenta de gmail y, aunque pongas una dirección de email en el $mail->From, se queda con la del $mail->Username, ya que a todos los efectos, el correo es como si lo enviaras desde el propio gmail. Otra desventaja es que tienes que poner la contraseña en modo texto, y habría que restringir el acceso por .htaccess al fichero .php del envío del correo.

    Debería haber una solución para poder cambiar el From y para evitar poner la contraseña “en bruto” en el fichero php.

  • MENDOZA |

    Hola yo le intentado y me manda perfectamente los correos pero al momento de adjuntar un archivo cuando lo abro en mi cuentame marca que el archivo esta dañado no importa que extension adjunte me los manda vacios me llega el archivo pero con peso de 0 kb alguna sugerencia que me pudieras dar

  • Albert |

    Hola, perfecto ejmplo funciona super bien aun pasandole datos por POST, solo tengo una pregunta como hacer que cuando el usuario llena un campo de texto y alguna palabra lleva acentos estos se vean correctamente o los omita a la hr de que la persona encargada de dar respuesta al la forma de contacto veo el mensaje.

    Gracias por contestar

  • Ricardo |

    Hola, veo que los archivos que se adjuntan estan en un directorio del host, como hago si estos archivos no estan en el un directorio del servidor y se adjuntan desde un boton del tipo Examinar..
    Desde ya gracias..
    Saludos.

  • Eduardo |

    Buenos dias, les hago una consulta, implemente phpmailer para enviar un newsletter son mas de 200 direcciones de correo, la mayoria hotmail, gmail y demas.

    No uso un servidor SMTP con lo cual no se como lo estara enviando. Mi problema es que cuando pruebo para 10 correos los envia todos sin problema pero cuando envio los 200 (siempre enviando de a 1 correo por vez) los correos no llegan a los destinatarios. Existe algun problema para enviar dicha cantidad?

    Saludos.

  • carlos- |

    Albert, eso es por la codificacion de tu pagina. Prueba con utf8_encode http://php.net/manual/es/function.utf8-encode.php

    Eduardo, si estás usando tu servidor para enviar los correos es posible que la empresa de alojamiento donde está el script limite el envio de emails a 10 por hora/dia. Crea una cuenta de GMail para evitar eso.

  • LAURA |

    Podrían explicarlo un poco más sencillo para gente como yo no muy experta, preciso mandar unos 1200 mails en un par de días es para una organizacion sin animos de lucro, mil gracias desde ya.

  • Gabriel |

    Hola que tal estoy usando PHPMailer en local y me funciona perfecto,, pero cuando lo subo al servidor remoto me arroja el siguiente Error: SMTP connect() failed. A que se debe ese error?

Publica tu comentario

En este blog los comentarios están moderados, serán mostrados cuando el administrador los apruebe. Por favor, evita comentarios ofensivos u obscenos por que no serán aprobados.
Si deseas publicar código fuente debes hacerlo entre las etiquedas <code> y </code>, además debes reemplazar los carácteres < por &lt; y > por &gt;.