Enviar Email con PHP y Gmail

Este artículo ya se encuentra obsoleto.
Para una referencia actual leer: Enviar email con PHP y evitar que sea marcado como SPAM

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
xxxx."); $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.

[download id=»6″ autop=»false»]

Comentarios Total 89 comentarios

Ernesto
Publicado: 30/07/2010 11:35 am

Unijimpe: Luego de hacerte la consulta veo que mi email ha sido publicado, a ver si lo pudieras eliminar. Gracias nuevamente, saludos

Marisol
Publicado: 25/08/2010 12:59 pm

Hola,
Implemente este codigo con Codeigniter, pero me aparece este error…
«Unable to load the requested class: classmailer
Alguien sabe porque?
Saludos

Silvio Fernandez
Publicado: 07/09/2010 10:46 pm

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

Silvio Fernandez
Publicado: 07/09/2010 11:21 pm

Ahh… ya se cual podria ser el problema..

El puerto 465 no esta habilitado en el router

Martin
Publicado: 20/10/2010 2:35 pm

Tengo el siguiete problema cuando se envia el correo me marca este error
Mailer Error: Language string failed to load: recipients_failedm_28k@hotmail.com

Kailer Udiz
Publicado: 21/11/2010 6:48 pm

KINUNT – Mas acertado imposibleeeeeee!!! Gracias!!!

Hann
Publicado: 06/01/2011 5:27 pm

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

MUchas gracias

Orlando
Publicado: 07/01/2011 10:46 am

A mí me sirvio cambiando la línea:

$mail->SMTPSecure = «ssl»;

por:

$mail->SMTPSecure = «tls»;

Orlando
Publicado: 07/01/2011 10:50 am

También cambiar el puerto 465 por el 587.

j steban
Publicado: 31/01/2011 4:10 pm

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


[…] Enviar email con PHPMailer utilizando tu cuenta de Gmail […]

Manuel Rojas
Publicado: 04/02/2011 7:21 pm

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
Publicado: 23/02/2011 5:05 pm

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
Publicado: 02/03/2011 7:46 pm

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
Publicado: 21/03/2011 10:57 am

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
Publicado: 02/04/2011 2:03 pm

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
Publicado: 05/05/2011 8:21 pm

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

Miguel
Publicado: 27/05/2011 6:18 am

Muchas gracias!! Ha funcionado a la primera, que ya es raro…

Eduardo
Publicado: 02/06/2011 2:41 pm

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

Rolando Delgado
Publicado: 13/07/2011 2:26 pm

Muchas gracias me sirvió mucho ^^

Pag. en blanco
Publicado: 04/08/2011 3:46 pm

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
Publicado: 12/08/2011 5:29 am

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

vn_vasquez
Publicado: 17/08/2011 12:02 am

Excelente manual, lo implemente en mi proyecto final y quedo perfecto.

Muchas gracias unijimpe…

Francisco
Publicado: 20/08/2011 7:05 am

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.

n_n
Publicado: 15/09/2011 7:49 am

Me sale esto:
Error: Language string failed to load: provide_address

alguna sugerencia?
Gracias

mauricio govel
Publicado: 22/09/2011 5:44 pm

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
Publicado: 30/09/2011 8:38 am

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
Publicado: 11/10/2011 11:17 am

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
Publicado: 09/11/2011 6:19 pm

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

Sphairo
Publicado: 27/12/2011 7:09 pm

Ayudaa me sale este Error: Language string failed to load: connect_host

rodrigo
Publicado: 27/02/2012 9:53 am

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
Publicado: 20/03/2012 3:37 am

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
Publicado: 25/05/2012 1:37 am

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
Publicado: 23/08/2012 3:37 pm

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
Publicado: 08/12/2012 8:17 am

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
Publicado: 14/12/2012 8:06 am

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-
Publicado: 07/03/2013 4:39 am

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
Publicado: 05/05/2013 11:17 pm

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
Publicado: 31/05/2014 4:06 pm

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?

 

Comentar

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

(Requerido)

(Requerido, no será publicado)

(Requerido)

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