Enviar Email con PHP y Gmail

  • 03/11/2008
  • 12:24 am
  • unijimpe

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

Total de Comentarios: 29

Publicidad
ximo
04/11/2008
10:35 am

Como puedo hacer para llamar al php desde htlm,gracias

joshep
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
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
09/11/2008
7:06 pm

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

mache
10/11/2008
7:05 am

a donde incluyo los binarios. tengo appserv.

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..

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

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

17/12/2008
2:10 pm

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

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
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
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
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
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
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
15/03/2009
10:44 pm

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

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

08/04/2009
10:17 am

Muy bueno, lo probaré.

14/04/2009
1:47 pm

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

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
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
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.

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
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
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
01/06/2009
9:58 pm

Muy útil, gracias

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

Enviar Comentario

(*)

(*)