13 05

PHPMailer. Enviar correos electrónicos con PHP

Publicado por Yoné Rocha en Diseño Web, PHP

Habitualmente, para el envío de correo con PHP se utiliza la función mail(), integrada en el propio lenguaje. Sí bien la función cumple con su cometido, son notorias sus limitaciones.

PHPMailer es una clase que cubre las carencias de mail() y facilita el uso de propiedades avanzadas en el envío de correos. Por ejemplo, permite ficheros adjuntos o utilizar un servidor SMTP con autenticación. Gracias a esta última característica podremos enviar correos desde nuestra cuenta Gmail y evitar la instalación de un servidor de correo.

El primer paso para usar PHPMailer es descargar la clase de sourceforge. Nos encontraremos con dos archivos que debemos instanciar en nuestro código, class.phpmailer.php con la clase y class.smtp.php, opcional para utilizar servidores SMTP.

Empezamos con un ejemplo simple usando Sendmail:

require 'class.phpmailer.php';
 
$mail = new PHPMailer();
 
$mail->IsSendmail();//usamos Sendmail, también podemos usar mail() con isMail()
 
$mail->FromName = 'Juan Palomo';
$mail->From = 'remitente@dominio.com';//email de remitente desde donde se envía el correo.
 
$mail->AddAddress('destinatario@dominio.com', 'Destinatario');//destinatario que va a recibir el correo
 
$mail->AddCC('copia@dominio.com', 'copia');//envía una copia del correo a la dirección especificada
 
$mail->Subject = 'Asunto de email';
 
$mail->AltBody = 'cuerpo del mensaje en texto plano';//cuerpo con texto plano
 
$mail->MsgHTML('Mensaje con HTML');//cuerpo con html
 
$mail->AddAttachment("archivo.zip");//adjuntos un archivo al mensaje
 
if(!$mail->Send()) {//finalmente enviamos el email
   echo $mail->ErrorInfo;//si no se envía correctamente se muestra el error que ocurrió
} else {
   echo 'Correo enviado correctamente';
}
 

Enviar un correo usando Gmail y PHPMailer:

require 'class.phpmailer.php';
require 'class.smtp.php'; //incluimos la clase para envíos por SMTP
$mail = new PHPMailer();
 
 
$mail->IsSMTP();
$mail->CharSet = 'UTF-8';
$mail->SMTPAuth = true;
$mail->SMTPSecure = "ssl";
$mail->Host = "smtp.gmail.com"; //servidor smtp
$mail->Port = 465; //puerto smtp de gmail
$mail->Username = 'email@gmail.com';
$mail->Password = 'tucontraseña';
 
$mail->FromName = 'Juan Palomo';
$mail->From = 'remitente@dominio.com';//email de remitente desde donde se envía el correo.
 
$mail->AddAddress('destinatario@dominio.com', 'Destinatario');//destinatario que va a recibir el correo
 
$mail->AddCC('copia@dominio.com', 'copia');//envía una copia del correo a la dirección especificada
 
$mail->Subject = 'Asunto de email';
 
$mail->AltBody = 'cuerpo del mensaje en texto plano';//cuerpo con texto plano
 
$mail->MsgHTML('Mensaje con HTML');//cuerpo con html
 
$mail->AddAttachment("archivo.zip");//adjuntos un archivo al mensaje
 
if(!$mail->Send()) {//finalmente enviamos el email
   echo $mail->ErrorInfo;//si no se envía correctamente se muestra el error que ocurrió
} else {
   echo 'Correo enviado correctamente';
}
 

 

Puntuación: 5.6/10 (26 votos emitidos)

  • Imprimir
  • Facebook
  • Del.icio.us
  • Technorati
  • Digg
  • Menéame

Dirección trackback para este artículo:
http://promineostudios.com/blog/articulo/phpmailer-enviar-correos-electronicos-con-php/trackback

Conozca los últimos comentarios de éste artículo agregando el feed RSS a su lector de noticias

Artículos Relacionados
Referencias a este artículo
21 de octubre del 2011 a las 01:45 - Referencia en
23 de abril del 2012 a las 19:42 - Referencia en
Ir al formulario
26

Gracias por la información, no conocía esta clase. Saludos.

Enlace Permanente | 6 de agosto del 2010 a las 21:28 - Jorge ha dicho

hola amigo gracias, pero tengo una inquietud o duda yo con el phpmailer puedo enviar datos dinamicos sacados de una bd mysql. ej registro a alquiero quiero enviarle un mail informandole su nombre de usuario y pass, eso se pude hacer con el phpmailer como?
gracias

Enlace Permanente | 6 de agosto del 2010 a las 22:16 - charlescuellar ha dicho

Con phpmailer puedes enviar la información que creas oportuna. En ese caso extraes los datos de la db y los envías en el cuerpo del email.

Enlace Permanente | 8 de agosto del 2010 a las 14:43 - Yoné ha dicho


@Yoné:

como lo puedo hacer gracias

Enlace Permanente | 9 de agosto del 2010 a las 01:23 - charlescuellar ha dicho

Eso excede éste artículo. Debes establecer una conexión con la base de datos y obtener los datos que necesites. Puedes mirar éste artículo..

Enlace Permanente | 9 de agosto del 2010 a las 14:04 - Yoné ha dicho

Saludos he estado buscando info al respecto pero no encuentro nada... no se si puedas ayudarme.

Utilizo PHPMailer para enviar cotizaciones, en el codigo no me causa ningun conflicto pero no llega ningun correo...

Como prueba cambie el codigo del body y con ello se envia sin problema, existe alguna limitacion con respecto al tamaño del body??

Enlace Permanente | 16 de agosto del 2010 a las 17:48 - abponk ha dicho


@abponk: Si usas una cuenta gmail, puedes usar el propio servidor smtp de tu cuenta. Sino debes instalar un servidor SMTP en tu equipo... Qúe tipo de cuenta utilizas?

Enlace Permanente | 16 de agosto del 2010 a las 23:15 - yoné ha dicho

¿en que carpeta debo descargar PHPMailer?

o debe ser en el servidor?

gracias

Enlace Permanente | 11 de enero del 2011 a las 23:06 - Jose Moreno ha dicho

En la carpeta donde tengas los scripts

Enlace Permanente | 12 de enero del 2011 a las 16:55 - yoné ha dicho

dghfh

Enlace Permanente | 1 de abril del 2011 a las 01:00 - manuel ha dicho

Gracias, me ha servido de mucho.

Enlace Permanente | 11 de abril del 2011 a las 16:47 - OsFoEl ha dicho

Hola.

Podrían comentar porque no me funciona
esta linea:?

$mail->AddCC('copia@dominio.com', 'copia');//envía una copia del correo a la

La dirección original si llega, pero la copia no, porque?

de antemano gracias

Enlace Permanente | 13 de abril del 2011 a las 16:40 - Luis S ha dicho

hola trabajo con la version de php 5.2 y tengo el codigo copiado tal cual lo explicas tu para poder enviar correos con gmail pero a mi no me envia nada ni me da error, puede ser q dicha version de php no funcione con esta clase de phpmailer y tenga q bajarme una mas reciente?, en caso de ser asi ya lo he hecho pero no es igual a la q pones tu, podrias explicar un ejemplo con la version para php 5?

saludos y gracias

Enlace Permanente | 4 de julio del 2011 a las 09:27 - brais ha dicho

SAludos! excelente esa clase, pero tengo una inquietud, el puerto, y el smtp:

$mail->Host = "smtp.gmail.com"; //servidor smtp
$mail->Port = 465; //puerto smtp de gmail

el smtp es el de entrada de gmail? y seria posible sabiendo mi smtp de correos de un servidor dedicado, configurar una cuenta que cree en cpanel en vez de mi cuenta de gamil? mil gracias!

Enlace Permanente | 7 de agosto del 2011 a las 22:17 - David ha dicho


hola a mi me da este erro estoy usando el codigo del sendmail()
claro cambiando las variables pero me sale esto podrias ayudarme
muchas gracias

error:
Could not execute: /var/qmail/bin/sendmail Could not execute: /var/qmail/bin/sendmail

Enlace Permanente | 14 de septiembre del 2011 a las 18:06 - ada ha dicho

Saludos,
no se si ha alguien le a pasado pero utilizo php mailer para enviar un correo, pero no me adjunta el archivo, hasta ahora solo enviava correos con texto, pero ahora genero un reporte en formato pdf y luego deseo enviarla por correo, el problema me lo da la siguiente linea

$mail->AddAttachment("reporte.pdf")

no me da ningun error pero el correo nunca llega, por el contrario si comento la linea, el correo llega como siemrpe.
alguien puede ayudarme

Enlace Permanente | 11 de octubre del 2011 a las 18:14 - jose ha dicho

Hola, hice la prueba y funciona, de hecho lo tengo alojado en el hosting, lo probé con una dirección de correo coorporativo de la empresa y funciona sin problemas, sin embargo, al enviar correo a un hotmail o gmail no me recibe nada, existe elgún método que sirva para que cualquier tipo de servidor de correo, así se le puede dar dinamismo, gracias

Enlace Permanente | 30 de noviembre del 2011 a las 17:18 - Jonathan Parada Gaete ha dicho

Hola no entendi 8O

Enlace Permanente | 28 de diciembre del 2011 a las 00:48 - mmm ha dicho

Tengo una pregunta? Quiero saber si con esta clase de PHPMailer, puedo enviar correos desde una cuenta de "yahoo.com.mx" pero sin montar mi aplicación en un servidor local.

No sé si me explico bien, pero mi programa corre localmente y quiero enviar correos a direcciones externas, usando un SMTP de yahoo.

Por alguna extraña razón no he podido, he leído muchos tutoriales pero en ninguno dice si eso se puede hacer. Lo que si he podido hacer es que internamente me lleguen correos, y también he probado que montando en un servidor mande correos. Pero "SE PUEDE QUE CORRA LOCALMENTE Y SE ENVIEN CORREOS EXTERNOS?????" Si alguien me puede contestar se lo agradecería bastante.

Enlace Permanente | 22 de febrero del 2012 a las 20:15 - Lupita ha dicho

hola saludos a todos tengo un problema con el codigo y es que en la linea donde se debe colocar nuevamente el gmail del remitente me aparece el siguiente error The following From address failed: mcesaroh1@gmail.com queriendome decir que la direccion esta mala o algo asi cosa que es mentira, alguien sabe porque sera esto ? apreciaria su pronta respuesta

Enlace Permanente | 1 de abril del 2012 a las 21:15 - cesar1 ha dicho

mi correo es cesar_moncada@hotmail.com por si alguien es tan amable de responderme de ante mano gracias

Enlace Permanente | 1 de abril del 2012 a las 21:20 - cesar ha dicho

Buenos dias, estoy tratando de cambiar de asp a php, hasta ahora me parece muy bueno el php, hasta que me tope con el envio de correo, siento que no es la clase phpmailer ya que al ejecutar el codigo no me manda ningun error, pero el correo no se va. Alguien puede decirme si es un problema con mi equipo, antivirus, o configuracion de algun parametro de esta clase, de paso saber si esnmejor hacerlo de otra forma que no sea esta clase o el comando interno de php. Saludos y gracis por su atencion.

Mi correo es aavanegas@gmail.com en caso de que alguien quiera responder.

Enlace Permanente | 8 de abril del 2012 a las 19:17 - Adolfo ha dicho

Saludos
tengo dudas sobre el ejemplo cuando se envian los correos
todos llegan no importa si es para hotmail, gmail o cualquiera o son detectados como Spam

Enlace Permanente | 12 de abril del 2012 a las 17:12 - ysrael ha dicho

Magnifico aporte espero poder encontrar mas cosas interesante como estas

Enlace Permanente | 18 de abril del 2012 a las 23:53 - jorge ha dicho

Una duda, el fichero del enlace PHPMailer me baja uno llamado
"varinsert_for_SPAW2"

dentro de todo este no veo ningun class.smtp.php ni class.phpmailer.php

help meee plisss

Enlace Permanente | 20 de abril del 2012 a las 10:13 - Ferran ha dicho

Hey there I am so discomfited I interlude your website, I extremely base you whilom boo-boo, while I was searching on Digg pro something else, Regardless I am here two shakes of a lamb's tail and would straight like to introduce acclaim in behalf of a moving advise and a all tour striking blog (I also bite the theme/design), I don’t shoulder play to look over through it all at the elfin but I require planned saved it and also included your RSS feeds, so when I have perpetually I nodding be extend to look across a huge buy more, Delight do shut in up the unheard-of m‚tier.
Vimax, Penis Enlargement.

Enlace Permanente | 4 de mayo del 2012 a las 05:31 - bibipbub2 ha dicho

Escribe un comentario sobre este artículo

:) :D XD :( :-o 8O :-? 8) :-x :p :-| ;-) :oops: :cry: :evil: :roll: :!: :?: :idea: :arrow: :mrgreen:

Recibe los últimos artículos en tu email
  • bloglines
  • Google
  • Netvibes
  • MyYahoo
  • MyMsn
Artículos Destacados
Autores
Categorías
Archivo

2009 - PromineoStudios - Todos los derechos Reservados

Diseño con estándares web - XHTML CSS - Versión anterior del sitio