Me pareció interesante hacer este Tip para aquellos que quieran mandar mails de manera sencilla y rápida con la librería PHPMailer. La gran mayoría de personas que programan en PHP, utilizan la función mail() para realizar envíos, ya sean simples o complejos. Pero algunos servidores tienen bloqueada la función mail() de php por cuestiones de seguridad.
PHP Mailer es una librería escrita en php para envío de mails desde una web utilizando una cuenta válida de correo de un servidor de mails. Algunas de las funciones que trae son:
- Envíos a varios remitentes, con CC, CCO, etc.
- Soporta 8bits, base64 y binarios
- Autenticación por SMTP
- Envíos con HTML
- Envíos de email con adjuntos
- Inclusión de imágenes en el correo
Instalación de PHPMailer
Descarga PHPMailer desde la web oficial en Worxware. Una vez descargada la librería, copia los archivos class.phpmailer.php y class.smtp.php al servidor. Crea un archivo php, por ejemplo: “Enviar.php”
En el que escribiremos los siguiente:
Código :
<?php require("class.phpmailer.php"); //Importamos la función PHP class.phpmailer $mail = new PHPMailer(); Luego tenemos que iniciar la validación por SMTP: $mail->IsSMTP(); $mail->SMTPAuth = true; // True para que verifique autentificación de la cuenta o de lo contrario False $mail->Username = "[email protected]"; // Cuenta de e-mail $mail->Password = "************"; // Password $mail->Host = "localhost"; $mail->From = "[email protected]"; $mail->FromName = "Nombre a mostrar del Remitente"; $mail->Subject = "Asunto"; $mail->AddAddress("[email protected]","Nombre a mostrar del Destinatario"); $mail->WordWrap = 50; $body = "Hola, este es un…"; $body .= "<font color='red'> mensaje de prueba</font>"; $mail->Body = $body; $mail->Send(); // Notificamos al usuario del estado del mensaje if(!$mail->Send()){ echo "No se pudo enviar el Mensaje."; }else{ echo "Mensaje enviado"; } ?>
Sube el archivo “Enviar.php” al servidor en la misma ubicación que los archivos class.phpmailer.php y class.smtp.php.
Notas:
PHPMailer tiene la posibilidad de enviar archivos adjuntos. Los mismos se pueden agregar de la siguiente forma:
Código :
$mail->AddAttachment("imagenes/img.jpg", "nombre_a_mostrar.jpg");
El primer parámetro la ruta del archivo. El segundo, es el nombre del archivo a mostrar.
También tenemos la posibilidad de agregar cuentas con CC o CCO, con las siguientes líneas:
Código :
$mail->AddCC("[email protected]"); $mail->AddBCC("[email protected]");
Para indicar si el mensaje contiene HTML:
Código :
$mail->IsHTML(true); // El correo se envía como HTML
Espero que les sea muy útil, cualquier duda escriban en los comentarios o al foro.
Saludos. NicSonic.
¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.
Por mobiltech el 02 de Diciembre de 2009
Por nykos el 02 de Diciembre de 2009
De nada, si con reportes de envío te refereis a que te llegue una copia del mail, no conozco la forma de hacerlo desde PHPMailer, pero podes probar agregando estas lineas luego del IF que indica al usuario si se envió correctamente el mail o no:
Código :
En esta linea modificamos el destinatario, reemplazando por tu direccion de email y volver a llamar al evento Send(), para que envíe el mismo mail a tu cuenta:
Código :
Espero que eso sea lo que estabas buscando.
Si tenes mas dudas postealas en el foro.
Saludos!
Por Raxiro el 02 de Diciembre de 2009
- Le llegó el mail o rebotó
- Abrió el mail
- Hizo click(s) en el mail.
Y esto no se hace con ninguna función de envío de mail, sino que en el mail que estás enviando.
Por ej... pones una imagen (que en realidad no es una imagen) y en el source pones tudominio.com/reportes/open_mail.php entonces si el usuario abrio el mail va a "llamar" a ese archivo, en el cual vos agregas qeu el mail con es ID se abrio (en la db).
Con eso vas contando las aperturas, despues para los clicks es similar, en vez de poner el vínculo común lo llevas a un php tuyo que loguee la acción y luego redirija al destino final.
Para los rebotes es algo más complejo porque creo que tenés que leer datos del servidor de mails.
Para probarlo podes incluso armarte un html y enviarlo desde cualquier cliente de correo.
PD: No se recomienda hacer envíos masivos desde un servidor no dedicado, ya que lo más probable es que te suspendan la cuenta, y además hay que tener mucho cuidado en la forma de enviar (y que se envía) para no caer en las blacklist´s.
Por Raxiro el 02 de Diciembre de 2009
Pero uno no puede asegurar 100% que sean efectivas las estadísticas de apertura.
Por mobiltech el 02 de Diciembre de 2009
Por carnicero666 el 02 de Diciembre de 2009
Por sebasxnco el 02 de Diciembre de 2009
Por jpcw el 03 de Diciembre de 2009
Por Gerry el 03 de Diciembre de 2009
Por Obelich el 04 de Diciembre de 2009
Por Pay el 04 de Diciembre de 2009
Por sebastiancb el 22 de Enero de 2010
Por horusnet el 10 de Marzo de 2010
si le pongo una pausa tarda mucho tiempo.
No se como hacer, alguna idea?
el envio puede ser una vez a 100 y otra a 400 y otra a los 5000...
no se que hacer sin contratar un servidor de correo claro..
desesperación...
Por jesuslandach el 18 de Marzo de 2010
Por nykos el 09 de Junio de 2010
Supongo que 5000 mails debe ser para mandar un newsletter, email marketing o ... span
(Quiero aclarar que estoy en contra del spam!)
Te recomiendo que uses para eso SendBlaster, es una aplicacion de escritorio (gratuita o paga) y te permite mandar newsletter o emails marketing
Saludos!
Por Zaki el 17 de Julio de 2010
$mail->Send();
if(!$mail->Send()){
echo "No se pudo enviar el Mensaje.";
}else{
echo "Mensaje enviado";
}
debería ser solo la condición:
if(!$mail->Send()){
echo "No se pudo enviar el Mensaje.";
}else{
echo "Mensaje enviado";
}
Ya que estas envíando dos correos porque ejecutas dos veces $mail->Send();
Saludos desde otra dimensión.
Por Guido el 27 de Julio de 2010
Por CLAnonimo el 28 de Agosto de 2010
Por carlos el 24 de Septiembre de 2010
GRacias
Por Frank (Venezuela) el 27 de Octubre de 2010
Por Lucas Vazquez el 09 de Noviembre de 2010
Por [url=http://www.brok el 19 de Diciembre de 2010
Gracias
Por Victor Rodriguez el 04 de Enero de 2011
Por fernando el 19 de Enero de 2011
Por CLAnonimo el 30 de Enero de 2011
Por tribak el 30 de Enero de 2011
Por steve el 07 de Abril de 2011
Por fenternet el 07 de Mayo de 2011
Por landeros el 21 de Junio de 2011
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:\xampp\htdocs\mei\class.smtp.php on line 105
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:\xampp\htdocs\mei\class.smtp.php on line 105
No se pudo enviar el Mensaje.
Por landeros el 21 de Junio de 2011
Por davan el 23 de Junio de 2011
es cuando se registran en mi pagina todo va bien hasta que pongo un correo corporativo. y ahi no llega. he probado en otra pagina registrarme con ese mismo correo y si me llega el correo que ago
Por el_chejin el 19 de Julio de 2011
Por jpcw el 19 de Julio de 2011
el_chejin-blog :
Valida la configuración del iso que se utiliza o ajustale el "iso-8859-1"
Por RZ el 29 de Agosto de 2011
$header[] = sprintf("Content-Transfer-Encoding: %s\n", $this->$Encoding);
estoy ejecutando local host
estos son los archivos
phpmailer.inc.php
smtp.inc.php
una pregunta mas en esta linea
$mail->Host = "localhost";
la cambie por una direccion ip privada para que los usuarios de mi red puedan ver mi web, y si funciona
$mail->Host = "192.168.10.27";
pero de las dos formas me da error en esa linea #271 del archivo
phpmailer.inc.php
entonces como configuro? esta version es la de php5/6 segun la web ahi donde la descargue : gracias.
Por RZ el 29 de Agosto de 2011
Warning: require(1) [function.require]: failed to open stream: No such file or directory in C:\xampp\htdocs\enviar.php on line 2
Fatal error: require() [function.require]: Failed opening required '1' (include_path='.;C:\xampp\php\PEAR') in C:\xampp\htdocs\enviar.php on line 2
utilizo xampp.
que puede estar pasando ahora ?.
Por RZ el 29 de Agosto de 2011
Fatal error: Cannot access empty property in C:\xampp\php\PEAR\phpmailer.inc.php on line 271
pero sigue apareciendo el mismo error :s.
linea 271 que puede seR?
Por RZ el 29 de Agosto de 2011
$mail->Host = "smtp.live.com";
y datos respectivos de hotmail para entrar pero me dice que no puede :s. alguien que si haya podido he?
Por Héctor Ocampo el 12 de Septiembre de 2011
Otra cosa, al llamar el php este hace un echo de la imagen que realmente debe aparecer para evitar la X de no disponible. Si ejecuto la url en el navegador la muestra bien, pero ningún cliente de correo la muestra, aunque si suma en las estadísticas de lectura.
$body = $_POST["txtbody"];
$envio = $idenvio;
$sql = "SELECT email FROM listado ORDER BY email_direccion ASC";
$resultado = mysql_query($sql,$conexion);
while($row = mysql_fetch_array($resultado)) {
$destino = $row["email"];
$mail = new PHPMailer();
$mail->Host = "localhost";
$mail->From = $from;
$mail->FromName = $fromname;
$mail->Subject = $titulo;
$body = strtr($body,"**envio**",$envio);
$body = strtr($body,"**correo**",$destino);
$mail->Body = $body;
$mail->AltBody = $altbody;
$mail->AddAddress($destino);
$mail->Send();
}
Muchas gracias a quien pueda ayudarme.
Por Héctor Ocampo el 12 de Septiembre de 2011
Lo único que no he logrado solucionar es mostrar la imagen con el echo. Si saben de alguna forma de hacerlo se los agradezco.
Por DK el 20 de Noviembre de 2011
Alguien sabe como solucionarlo ??
Por ivan el 20 de Febrero de 2012
Por NOVO el 26 de Febrero de 2012
Mis preguntas son:
1) Donde puedo comprar un Dominio y Hosting que me permitan mandar correos masivos con PHP sin restricciones, o por lo menos que me deje mandar una buena cantidad diarios !!!
2) Que otra opción de envío de mensaje puedo usar ???? ... y baje muchos programas para enviar correos, pero ya tengo bloqueada mi cuenta ... no me funciona ninguno.
Espero ayuda de algún experto ..............."plis" ............. a mi correo:
tutorias100puntos(Arroba)gmail(punto)com
Graciaaaaaaaaaasssssssssssssssss..................
Por Gustavo el 01 de Marzo de 2012
he intentado tomar los datos de email de una tabla de sql para mandar a todos los usuarios desde una pg php y no he podido,
usted me podrá ayudar con el cód php?
Por el_chejin el 14 de Marzo de 2012
$mail->Port = 465; // Puerto
$mail->SMTPSecure = "ssl"; // Seguridad
de lo contrario no dejaba enviar el correo
Por jcasiano20 el 05 de Junio de 2012
Por Spawn el 11 de Noviembre de 2013
espero me puedan ayudar.. slds
Por alberto el 22 de Enero de 2014
Por josetrobar el 06 de Febrero de 2014
Por ruben el 12 de Agosto de 2014
Por German soto el 09 de Octubre de 2014
por ke cuando envio la tabla en el correo no muestra la imagen... si alguien sabe como hacerlo se los agradeciria mucho espero y me orienten.
Por RZ el 22 de Febrero de 2015
Por juan.alfonso el 26 de Febrero de 2015
Cuando utilizo la librería sina djuntar archivos el correo llega satisfactoriamente al usuario, sin embargo cuando adjunto un archivo (excel o pdf) el correo termina parando en el spam. Alguna configuración especial al momento de adjuntar el archivo?
Resalto que el archivo adjunto no es enviado por correo masivo ni un envio aútomatico a determinada hora, se le envia al destinatario solo cuando el desea obtener dicho archivo.
Cualquier sugererencia al correo [email protected]. Gracias