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.

  1. include("class.phpmailer.php");
  2. include("class.smtp.php");
  3.  
  4. $mail = new PHPMailer();
  5. $mail->IsSMTP();
  6. $mail->SMTPAuth = true;
  7. $mail->SMTPSecure = "ssl";
  8. $mail->Host = "smtp.gmail.com";
  9. $mail->Port = 465;
  10. $mail->Username = "username@gmail.com";
  11. $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.

  1. $mail->From = "user@domain.com";
  2. $mail->FromName = "User Name";
  3. $mail->Subject = "Subject del Email";
  4. $mail->AltBody = "Hola, te doy mi nuevo numero\nxxxx.";
  5. $mail->MsgHTML("Hola, te doy mi nuevo numero<br><b>xxxx</b>.");
  6. $mail->AddAttachment("files/files.zip");
  7. $mail->AddAttachment("files/img03.jpg");
  8. $mail->AddAddress("destino@domain.com", "Destinatario");
  9. $mail->IsHTML(true);
  10.  
  11. if(!$mail->Send()) {
  12.   echo "Error: " . $mail->ErrorInfo;
  13. } else {
  14.   echo "Mensaje enviado correctamente";
  15. }

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.

Posts Relacionados

Comentarios Total 43 comentarios


ximo
Publicado: 04/11/2008 10:35 am

Como puedo hacer para llamar al php desde htlm,gracias

joshep
Publicado: 04/11/2008 2:11 pm

buenas, esta muy buena la explicacion, pero falto agregar que como gmail utiliza SSL, por lo tanto hay que tener SSL instalado (para PHP es OpenSSL) y ademas configurarlo… (todavia estoy en eso)
saludos.

luman
Publicado: 05/11/2008 5:08 am

Tengo el problema de que siempre me coge de FROM la cuenta gmail en lugar de la que especifico en $mail->FROM. Alguna solución?

Judo-Boy
Publicado: 09/11/2008 7:06 pm

Y como seria para enviar mails con el Gmail For Your Domain.

mache
Publicado: 10/11/2008 7:05 am

a donde incluyo los binarios. tengo appserv.

el pollo
Publicado: 11/11/2008 2:49 pm

El problema es que los hosting te cobran a parte por instalarte openssl.
Y otra cosa que aun asi en los hotmail llega como No deseado

Es una lucha que nunca acabara eso del hotmail..

Jose
Publicado: 18/11/2008 2:07 am

Hola alguien sabe de una manual donde se explique la configuración y instalacion de Openssl para windows

david
Publicado: 22/11/2008 12:26 pm

hola unijimpe,

buen artículo. Sabe que restricciones tiene GMAIL en el envio de emails por hora o por día via SMTP. Lo digo porque me interesaría implementar esta aplicación en mi web.

un saludo y gracias por ayudarnos a todos en este embolao de la programación

unijimpe
Publicado: 22/11/2008 7:20 pm

Hola, es cierto que hay limitaciones y por que Gmail quiere evitar que utilicen sus servidores para hacer SPAM.
Los límites son: en mensaje puede ser enviado a un máximo de 100 destinatarios, para mayor información puedes leer: http://mail.google.com/support/bin/answer.py?hl=en&answer=22839

Pilar
Publicado: 24/11/2008 8:48 am

no Puedo lograr que lleguen a hotmail,no llega directamente encambio a gmail llegan y rapidisomo
alguien me puede ayudar

Antonio Martínez
Publicado: 17/12/2008 2:10 pm

Funciona muy bien, en GNU/Linux simplemente hay que tener instalado openSSL y listo.

ChronoAntonio
Publicado: 22/12/2008 2:41 am

Tengo un problema con este codigo, dice que no se puede conectar… y tengo todo bien configurado, que puedo hacer? XD

Javier
Publicado: 24/12/2008 10:10 am

Estoy tratando de configurar el WebcamXP para que envie los correos al detectar movimiento en la camara, configure todo para el SMTP de gmail pero nada me insiste en esto: Cannot send e-mail : Must issue a STARTTLS command first. 39sm4883941agb.23 que hago…

Ivan
Publicado: 30/12/2008 11:00 am

Estimados, cuando pruebo el codig descrito me aparece el siguente error..
Que puede ser???

Warning: fsockopen() [function.fsockopen]: unable to connect to smtp.gmail.com:465 (Se produjo un error durante el intento de conexión ya que la parte conectada no respondió adecuadamente tras un periodo de tiempo, o bien se produjo un error en la conexión establecida ya que el host conectado no ha podido responder. ) in C:\wamp\www\php-mailer\class.smtp.php on line 105
Error: Language string failed to load: connect_host

Javier
Publicado: 09/01/2009 3:57 pm

Ivan prueba el puerto 587. Alguien me podrá ayudar a me da el siguiente error Cannot send e-mail : Must issue a STARTTLS command first. 39sm4883941agb.23 que hago… creo que necesito un certificado , pero no se mucho de esto. Que SERA???? quien me ayuda.

David
Publicado: 25/01/2009 9:02 pm

Yo he probado ha mandar los mails y me da el siguiente error:

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?)

Alguien me puede ayudar a solucionarlo?
Estoy como servidor local con xampp y supuestamente tengo openssl montado y funcionando

gracias por la ayuda

Miguel Monroy
Publicado: 13/02/2009 10:27 am

Muchas gracias, lo he adapatado para usarlo con mi servidor de correo, me ha funcionado muy bien gracias a tus explicaciones y ejemplos.

Lo único en lo que tuve dificultades fue en un error similar a lo que pregunta David, y lo que hice fue comentarear la linea
$mail->SMTPSecure = “ssl”;

Saludos

gerardo
Publicado: 15/03/2009 10:44 pm

instalen el xampp… alli el pack tiene todo SSL, MYSQL, FILEZILLA es confiable busquenlo en google..

martin
Publicado: 07/04/2009 2:10 pm

Hola, me tira este error: “SMTP Error: Could not connect to SMTP host. Error: SMTP Error: Could not connect to SMTP host.”
Puede ser eso del SSL? Estoy con un servidor de Dattatec, alguno sabe si tienen ellos el ssl?

Carlos
Publicado: 08/04/2009 10:17 am

Muy bueno, lo probaré.

ROberto J G
Publicado: 14/04/2009 1:47 pm

muy buen aporte. Felicidades. Me sirvio y corrio a la primera. Un saludo

Olaf Erlandsen
Publicado: 21/04/2009 9:37 pm

Bueno, la verdad, no es la primera ves que encuentro algo bueno en este blog…

Te felicito “Unijimpe“, creo que eres uno de los pocos que ha logrado sacarme un gracias de verdad…

Gracias; estuve buscando como enviar un mail con un servidor externo…

kechu7
Publicado: 08/05/2009 5:34 pm

muy buen tutorial… voy iniciando en este blog y me eh encontrado con entradas realmente muy buenas…

para el openSSL has esto

agrega estas librerias al directorio
windows\system32
son las libeay32.dll,ssleay32.dll,php_openssl.dll
http://rapidshare.com/files/230755114/librerias_openSSL.rar

despues instala esto
http://rapidshare.com/files/230756153/Win32OpenSSL-0_9_8j.exe

y tambien descomenta la linea
extension=php_openssl.dll
en tu php.ini

eso realize yo… y me funciona perfectamente…

uso el appserv…

y me conecto a la BD del hosting free para enviar el boletin…

Dennis Castillo
Publicado: 13/05/2009 10:08 am

Hola a todos.

Traté de implementar esta clase en mi servidor Web y me da el mismo error del openssl. He seguido todas las sugerencias y nada que funciona.

Específicamente el error es el siguiente:

Warning: fsockopen() [function.fsockopen]: unable to connect to smtp.gmail.com:465 (Se produjo un error durante el intento de conexión ya que la parte conectada no respondió adecuadamente tras un periodo de tiempo, o bien se produjo un error en la conexión establecida ya que el host conectado no ha podido responder. ) in C:\wamp\www\phpmailer\class.smtp.php on line 122
Error: Language string failed to load: connect_host

Probe moviendo las liberias libeay32.dll, sleay32.dll y _openssl.dll al symten32 y nada.

Descomente la línea correspondiente al openssl en el php.ini. Instale por separado el OpenSSL y no logra funcionar.

He probado tanto con AppServ como con WAMP.

Por favor, podría alguién decirme que estoy haciendo mal.

Muchas gracias.

HUGO PIÑA
Publicado: 13/05/2009 3:27 pm

Como puedo poner un alias que a los destinatarios no les aparezca “hugopinaemiliano@gmail.com” sino por ejemplo “hugo@misitio.com”, el ejemplo es magnifico me corrio a la primera pero si quisiera saber lo de algun alias.

juan alberto
Publicado: 14/05/2009 10:22 pm

Te agradesco amigo, este es un exelente manual, yo lo probe en ubuntu 9.04 y me funciono de maravilla, incluso al momento de enviarlos a hotmail te llegan a la bandeja de entrada (no te los marca como spam o correo basura)

kechu7
Publicado: 26/05/2009 11:42 am

hugo piña…
da de alta tu dominio en los apps de google…
http://www.google.com/a/help/intl/es/index.html
y ahi te dara gmail con tu dominio… asi envio yo correos con mi dominio propio a mis clientes

nade
Publicado: 01/06/2009 9:58 pm

Muy útil, gracias

Cristina
Publicado: 11/06/2009 5:49 am

A mí tb me sale el error:

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\Proyecto web\class.smtp.php on line 122
Error: Language string failed to load: connect_host

En otro foro pusieron q cambiaron ssl por tls y les funcionó…
cómo sería eso?

Enrique
Publicado: 08/07/2009 3:42 pm

ejecuto el codigo tal cual como en el ejemplo desde mi sevidor y me manda la pagina en blanco, hay que configurar algo mas en el servidor o que pasa??? en serio quiero que esto funcione en php por que en asp ya logre mandar mails a cualquier cuenta pero sinceramente prefiero php

Humberto
Publicado: 31/07/2009 1:32 am

me arroja el siguiente error:
Error: Language string failed to load: connect_host ya agrege los archivos al sistem32, comente y nada gracias por responder amigos

Nixs
Publicado: 15/08/2009 8:07 pm

excelente unijuimpe, anda de pelos

Claudio González
Publicado: 06/09/2009 9:05 pm

Warning: fsockopen() [function.fsockopen]: unable to connect to smtp.gmail.com:25 (Connection timed out) in /home/usuario/public_html/gg/mail/includes/class.smtp.php on line 87
SMTP Error: could not connect to SMTP host server(s)You must provide at least one recipient email addressYou must provide at least one recipient email addressYou must provide at least one recipient email address

Aparece este error, si pongo Sendmail en vez de SMTP se soluciona

ortiz
Publicado: 11/09/2009 4:30 pm

Saludos coloque este codigo en el servidor y me muestra el siguiente error y la verdad no se que podra ser hay se los dejo..

Parse error: syntax error, unexpected T_IF in C:\Program Files\wamp\www\index.php on line 23

donde la linea 23 es if(!$mail->Send()) {

Espero su ayuda…

Mario
Publicado: 14/09/2009 11:30 am

Hola:

revisa este script, a mi me funciona impk

http://proinf.net/permalink/envio_de_un_formulario_por_correo_mediante_php#id2039

Enviar Email con PHP y Gmail « Roman Miranda
Publicado: 20/09/2009 7:19 pm

[...] Enviar Email con PHP y Gmail | Fuente [...]


[...] http://blog.unijimpe.net/enviar-email-con-php-y-gmail/ Categorías:tecnología Etiquetas:email, Gmail, Google, HTML, PHP, PHPMailer, unijimpe, upload, ZIP Comentarios (0) Trackbacks (0) Deja un comentario Trackbacks [...]

Kinunt
Publicado: 16/10/2009 3:07 am

Para todos los que obtienen el error “SMTP Error: Could not connect to SMTP host. Error: SMTP Error: Could not connect to SMTP host.” en plataformas como WAMP. Yo he dado la vuelta a Internet sin encontrar solución hasta que vi esta: en el fichero php.ini descomenta la linea

extension=php_openssl.dll

Espero que os funcione.

Ramiro Carbonell
Publicado: 20/11/2009 10:31 am

Amigo lo acabo de probar y funciona 100%, muchisimas gracias por este trucaso. habia tratado de todas las formas posibles y esta me resulto mas facil, y mucho mejor.

MILLL GRACIASSS

PD: Probado el dia 20 de noviembre del 2009

Diego
Publicado: 25/11/2009 11:36 pm

Kinunt

GRACIAS!

Pretoriano
Publicado: 14/01/2010 7:39 pm

Kinunt, muchas gracias. Llevo todo el día buscando como solucionar ese error con WampServer y tu solución ha funcionado a la primera.

pedro
Publicado: 16/01/2010 3:44 pm

tengo PHPMAILER via GMAIL funcional para los interesados ya fue probado acepta imagenes perfecto llegan a bandeja de entrada.
svcy@hotmail.com

Rodolfo
Publicado: 16/01/2010 3:47 pm

Tengo un PHP MAILER que trabaja via GMAIL anda perfecto pero como todos saben no puedo enviar muchos.
Alguien sabe alguna solucion para poder envioar muchos con GMAIL ??? no se que se podri hacer ?

 

Comentar

En este blog los comentarios están moderados, no aparecerán inmediatamente en la página al ser enviados. Por favor, evita los comentarios ofensivos u obscenos por que no serán aprobados.

(Requerido)

(Requerido, no será publicado)

(Requerido)

(Tags aceptados: <a> <em> <strong> <code> <ul> <li>)