Introducción a PHPMailer

  • 17/02/2007
  • 2:14 am
  • unijimpe

PHPMailer es una clase escrita en PHP que facilita el envío de correo, añadiendo facilidad en el envío de correos con adjuntos, en formato HTML y con diferentes codificaciones, soporte para imagenes embebidas, headers personalizados y además funciona con múltiples servidores de correo.

phpmailer.png

Típicamente para el envío de correo con PHP se utiliza la función mail(), pero esta función tiene varias limitaciones, por ejemplo que no soporta el envío de adjuntos. Entonces PHPMailer nos viene a facilitar este trabajo que de otra forma seria muy engorroso. Viene con un conjunto de métodos que nos ayudarán en el envió de emails.

Empezando

El primer paso es descargar PHPMailer, aquí encontraremos dos archivos: class.phpmailer.php el cual contiene las funciones para el envío de correo y class.smtp.php para enviar correo mediante servidores SMTP.

Creamos un nuevo documento PHP en donde incluimos la clase y luego creamos una instancia de la clase para utilizarla mas adelante.

  1. <?php
  2. require("class.phpmailer.php");
  3. $mail = new PHPMailer();
  4. ?>

Propiedades del Mensaje

El siguiente paso es asignar las propiedades del correo que vamos a enviar como el servidor de correo, subject y From. Luego con el método AddAddress asignamos a quien o quienes vamos a enviar el correo, también se puede utilizar AddCC y AddBCC para las copias y copias ocultas:

  1. $mail->Host = "localhost";
  2. $mail->From = "remite@email.com";
  3. $mail->FromName = "Nombre del Remitente";
  4. $mail->Subject = "Subject del correo";
  5. $mail->AddAddress("destino1@correo.com","Nombre 01");
  6. $mail->AddAddress("destino2@correo.com","Nombre 02");
  7. $mail->AddCC("usuariocopia@correo.com");
  8. $mail->AddBCC("usuariocopiaoculta@correo.com");

Cuerpo del Mensaje

Hasta aquí hemos utilizado las funciones básicas de correo, pero ahora viene la parte del cuerpo del mensaje. Podemos enviar correo en formato HTML e incluso definir un texto que se mostrará si es que el lector de correo no soporta HTML.

  1. $body  = "Hola <strong>amigo</strong><br>";
  2. $body .= "probando <i>PHPMailer<i>.<br><br>";
  3. $body .= "<font color='red'>Saludos</font>";
  4. $mail->Body = $body;
  5. $mail->AltBody = "Hola amigo\nprobando PHPMailer\n\nSaludos";

Agregar Archivos Adjuntos

Ahora si deseamos añadir un archivo adjunto a nuestro mensaje utilizamos el método AddAttachment el cual recibe dos parámetros, el primero es la ruta del archivo que vamos a incluir y el segundo es el nombre que se va a mostrar en el correo para este archivo.

  1. $mail->AddAttachment("images/foto.jpg", "foto.jpg");
  2. $mail->AddAttachment("files/demo.zip", "demo.zip");

Finalizando

Finalmente el envío del correo se hace con la función send(). Entonces uniendo todas las partes de nuestro código tenemos:

  1. require("class.phpmailer.php");
  2. $mail = new PHPMailer();
  3. $mail->Host = "localhost";
  4.  
  5. $mail->From = "remite@email.com";
  6. $mail->FromName = "Nombre del Remitente";
  7. $mail->Subject = "Subject del correo";
  8. $mail->AddAddress("destino1@correo.com","Nombre 01");
  9. $mail->AddAddress("destino2@correo.com","Nombre 02");
  10. $mail->AddCC("usuariocopia@correo.com");
  11. $mail->AddBCC("usuariocopiaoculta@correo.com");
  12.  
  13. $body  = "Hola <strong>amigo</strong><br>";
  14. $body .= "probando <i>PHPMailer<i>.<br><br>";
  15. $body .= "<font color='red'>Saludos</font>";
  16. $mail->Body = $body;
  17. $mail->AltBody = "Hola amigo\nprobando PHPMailer\n\nSaludos";
  18. $mail->AddAttachment("images/foto.jpg", "foto.jpg");
  19. $mail->AddAttachment("files/demo.zip", "demo.zip");
  20. $mail->Send();

Si probamos este mensaje obtendremos el siguiente resultado en nuestra cuenta de correo en el cual notamos el mensaje en HTML y los archivos adjuntos.

php-mailer.gif

Desde luego que hemos utilizado solo las funciones básicas, hay muchas más opciones con las cuales se puede personalizar completamente el mensaje que enviamos, puedes encontrar un referencia de estas opciones en: http://phpmailer.sourceforge.net/docs/. Finalmente les dejo los archivos de este ejemplo funcionando para que lo prueben.

Posts Relacionados

  • Uncategorized

Total de Comentarios: 120

Publicidad
Luis G
27/02/2007
9:05 am

Hola, te agradezco mucho la info. Estoy usando un script muuuy parecido a este y me funciona perfectamente. Sin embargo lo que me gustaria es que los usuarios de mi pagina puedan enviarme sus mensajes (en realidad algo asi como este cuadro donde estoy escribiendo, solo que enviando mi comentario a un email fijo).
Estoy intentando varias cosas, como usando $_POST[’texto’] en el $body, etc. Pero no consigo nada. Ademas, la opcion mail() esta desactivada por el servidor, asi que no se que mas opciones tengo.

Agradeceria infinitamente si me puedes/podeis ayudar

28/02/2007
6:53 pm

Para ello puedes leer http://blog.unijimpe.net/enviar-e-mail-con-php/ donde se explica como crear el formulario y enviar el correo. Ahora si esta deshabilitada la función mail(), es por que no tienes un servidor de correo. Para ello utiliza PHPMailer en donde puedes colocar que servidor de correo hará el envío.

ellioh
09/03/2007
11:16 pm

hola que tal, quisiera saber como enviar email a correos corporativos. lo que pasa es que estoy realizand una web que requiere el envio de mensajes a empresas q cuentan con webmail corporativos y al usar la funcion mail no puede envia r a estos correos. además quisiera saber si el php se puede conectar con el webmail para envio de email
Gracias pot todo, tus toturiales son de gran ayuda.
Agradecere tu ayuda

JO
14/03/2007
4:33 pm

Solo quisiera saber.. si de esto puede resultar un ciclo donde se envie un mail tantas veces uno quiera…¿Usted que cree?..

Gracias de Ante mano….

15/03/2007
12:19 am

Si claro que se puede, para ello debes crear un bucle y llamas a la función $mail->Send(); con lo cual se hará el envío repetidas veces. Ahora esto no es recomendable pues si envías demasiadas veces correo te pueden bloquear como si fueras spam.

29/03/2007
6:58 am

Hola, quisiera saber, que debo poner en localhost?, o debo dejarlo asi como esta?…

Daniel
29/03/2007
6:23 pm

agradezco toda la ayuda y todo lo he hecho pero mi pregunta es como obtengo los datos de un formulario para el envio ya que todo lo que escribo en html sale igual en el correo y yo quiero es recopilar los datos del usuario. Gracias por la ayuda

31/03/2007
11:08 am

luis14al, localhost es el nombre de tu servidor SMTP, es decir si tu servidor esta en la misma maquina que PHP puedes dejarlo como localhost, de lo contrario si esta en otra maquina puedes poner el nombre de dominio o el IP de la maquina donde esta el servidor SMTP.

31/03/2007
11:10 am

Daniel en tu caso antes de hacer el envío de los datos por correo, puedes colocar una sentencia SQL en el cual guardas los datos ingresados en una Base de Datos, con esto lograrás almacenar esta información que tu necesitas.

gambit
30/04/2007
1:39 pm

si uso mail() en un bucle para enviar correo, algunos no llegan, por qué y que puedo hacer en vez de eso?
Es qeu necesito que a cada destinatario le llegue el correo con unos datos que se obtienen en el bucle.
Gracias

10/05/2007
7:35 pm

Hola, tengo mi hosting con GoDaddy, pero no se si me permiten hacer uso de alguno servidor de correo, SMTP o algo parecido. Podrian ayudarme?

Gracias.

Hernan
17/05/2007
5:07 pm

Hola, me gustaria saber por que cuando corri el script me sale una pantalla en blanco y no envia nada, hice todos los pasos que estan en las indicaciones , sera que tengo que configurar algo, cambiara algun dato mas o tener instalado algo en mi maquina

17/05/2007
10:05 pm

Para hacer el envío de correo necesitas conectarte a un servidor SMTP, si esta instalado en tu maquina o hosting lo puedes llamar:

$mail->Host = “localhost”;

Ahora si el servidor de correo esta en otro dominio puedes cambiar esta línea y colocar la dirección de tu SMTP:

$mail->Host = “mail.midominio.com”;

Hernan
18/05/2007
8:37 am

Hola unijimpe, Me gustaria que me ayudara un poco mas con esto, ya que no soy experto en el tema de servidores de correo, que servidor de correo me recomendaria, ya que para aplicar el ejemplo en mi maquina, que configuracion tengo que hacerle al servidor de correo para que em funcione correctamente el ejemplo, en fin deme tada la explicacion necesaria para poner en marcha ete ejemplo, por ultimo me quiero saber si usted maneja puerto serial en PHP, le `pido disculpas por tanta molestia, pero me urge ya que es para mi proyecto de tesis, gracias…….

18/05/2007
9:09 am

Lamentablemente yo no he manejado el puerto serial, ahora si necesitas un servidor de correo local puedes utilizar Imail Server, el cual incluye un servidor de correo SMTP, descarga la versión trial y lo instalas como si fuera un programa cualquiera.

Hernan
18/05/2007
4:12 pm

El Imail Server es igual que el hMailServer, si es igual me puede ayudar a configurarlo, es que no soy muy bueno en esto… Gracias

19/05/2007
3:47 pm

hola
que hago si el hosting que adquiri no tiene instalado el PHPMAILER, hay alguna forma de instalarlo?

19/05/2007
9:44 pm

PHPmailer no viene instalado ni necesita instalación, lo que se necesita es un servidor de correo SMTP, esto es si tienes un hosting con dominio misitio.com, típicamente tu servidor SMTP esta en mail.misitio.com, otra forma de acceder a tu servidor smtp es colocando localhost.

07/06/2007
9:36 pm

unijimpe, gracias!

te queria consultar lo siguiente:

la idea es q el usuario pueda llenar 1 formulario y adjuntar su CV.

q deberia poner en esta linea entonces para hacer eso?
#
$mail->AddAttachment(”images/foto.jpg”, “foto.jpg”);

y en el HTML ?

gracias saludos!!

John Arrieta
08/06/2007
4:21 am

Viejo esto no funciona, ya lo he probado mas una docena de veces de no genera error si le cambio el servidor de correo, tampoco si una direccion o servidor de correo destino no existen, y para hacer mas chistosa la cosa, los correos nunca llegan.
Conclucion no sirve y me quedo con la funcion mail de php

Marco
17/07/2007
6:17 pm

Si funka pero ahi alguien ke tenga o sepa de un programa para tener tu correo en localhost???
ke me diga porfa
xxmarcopolo06xx@gmail.com
Graciaz

Kari
18/07/2007
3:01 am

¿Puedo agregar un for dentro del texto del correo? ¿como?

19/07/2007
8:14 am

Marco, una programa de servidor de correo SMTP es por ejemplo Imail Server, puedes descargar la versión de prueba y verás que funciona a la perfección para enviar correos desde el localhost.

Kari, lo que debes hacer es crear una variable en donde guardas tu texto, con esta variable puedes hacer for, if, while y cualquier sentencia que desees, al final esta variable se la pasas a $mail->Body para que lo puedas enviar.

JuanAn
23/07/2007
5:21 pm

Hola Unijimpe!

Enhorabuena por tu blog. Descubrí la clase phpmailer tiempo atrás y funciona perfectamente.

Ahora buscando información sobre esta clase he encontrador tu blog. Tengo un pequeño problemilla.Te comento: Uso la clase en un servidor propio y funciona, pero alguna vez cuando la uso manda correos repetidos, es decir, entrega al destinario varias copias del mismo e-mail, con lo que el correo lo detecta como SPAM. Os ha pasado? Como puedo solucionarlo? Es importante ya que mando correos corporativos a los clientes de la empresa donde trabajo y no es nada bueno que les envie siempre varias copias del mismo.

PD: Passa sobretodo con cuentas hotmail, gmail, yahoo.

hugo lepe s.
25/07/2007
1:58 am

Hola, disculpa por la consulta soy novato en el tema, pero necesito saber como y donde se instalan los archivos class.phpmailer.php y class.smtp.php.

Gracias por su ayuda.

25/07/2007
8:51 am

JuanAn, la verdad a mi siempre me ha funcionado de maravillas, puede ocurrir que en tu código este duplicado la dirección del destinantario por lo cual envía dos veces.

Hugo lepe, los archivos debes colocarlo en la misma carpeta donde se ubica el archivo que utilizarás para hacer el envío.

JuanAn
25/07/2007
2:49 pm

Hola de nuevo,

En el código no estan las direcciones repetidas. Me parece que el problema es de nuestro servidor de correo, ya que he probado con otro y funciona.

Ahora el único problema es que en cuentas de correo de hotmail, yahoo y gmail.

Un saludo y gracias,

Christian
31/07/2007
2:39 am

Hola…muy interesante el tema.
Lo que yo ando buscando es un formulario donde mis visitantes puedan atachar fotos y los envien directamente desde mi página y que llegue a mi mail particular.¿se puede hacer con esto? cómo sería?
Graciasss

31/07/2007
10:49 am

[...] La presente es una breve guía para implementar un formulario para enviar email con archivos adjuntos, para ello utilizaremos la librería PHPMailer, de la cual ya hemos hablado en Introducción a PHPMailer. [...]

31/07/2007
8:30 pm

A mi no me funciona :S
Tengo de servidor localhost y no me funciona.

Davinia
02/08/2007
4:31 pm

Hola, uso la librería PhpMailer para enviar correos desde una web. Funciona perfectamente excepto con correos hotmail y yahoo, osea, a estas cuentas nunca llegan los correos… he intentado solucionarlo cambiando algunos parámetros como el HeaderLine poniendo $this->HeaderLine(”X-Mailer”,”Microsoft Outlook, Build 10.0.2616″); o el $SMTPAuth a true, pero no hay manera.
Gracias de antemano.

09/08/2007
3:23 pm

Buenas uso esta clase desde hace tiempo la verdad, en muchas de mis paginas, pero me ocurre algo muy curioso.

Tengo varios servidores y en cada servidor varios dominios,cada uno con su propio servidor de correo.

Inicialmente use un dominio, pero me di cuenta que no envía correos a dominios que estén registrado en el mismo servidor, sin embargo envía perfectamente a cuentas que no sean del mismo servidor (entre ellas hotmail, yahoo, google, etc).

Así que probé diciéndole que enviase desde el otro servidor, y tachan me hace justamente todo lo contrario, me envía a correos que estén alojados en ese servidor, pero no a correos que estén alojados en servidor.

Se te ocurre alguna explicación, para este fenómeno extraño?

zakaria
03/09/2007
8:54 pm

hola,acabo de instalar el phpmailer y no me funciona ,no se que poner en el host,lo he instalado en easyphp,¿deberia poner el localhost del apache del easyphp o el host del smtp que me he bajado?lo que pasa que no se donde conseguir ese host.por favor ayudeme.
muchas gracias

gabriel
05/09/2007
8:06 am

hola. no enteindo como esto funciona. quien crea el archivo mailphp.php?? me puedes explicar. en mi caso debo comunicar hacia unn SMTP ya que el servidor del sitio no es el servidor de correo.

gabriel herrera
05/09/2007
8:31 am

que tantos parametros debo modificar y en que archivo…

si alguien puede explicar que y como modifica y como un desde el formulario se llega finalmente a enviar el correo ??

gracias de nuevo.

05/09/2007
9:18 am

EasyPHP es un instalador para tener Apache, PHP y MySQL pero no tiene incluido un servidor SMTP, ojo necesitas un servidor SMTP, si lo instalas en tu maquina local entonces $mail->Host debe ser “localhost“, en caso que este en otro lugar, deber poner la dirección por ejemplo “mail.mihost.com“.

Respecto a modificar, descarguen los archivos de ejemplo y cambien solo la dirección de $mail->AddAddress que debe contener la dirección a donde debe llegar el mail, en este caso la cuenta de correo de ustedes.

Christian
08/09/2007
2:50 am

Hola amigos, tengo el siguiente problema al intentar envar mails:

Warning: fputs(): supplied argument is not a valid stream resource in /usr/local/apache2/htdocs/gos/desarrollo2/includes/class.smtp.php on line 128

Esto no ocurre siempre pero cuando ocurre no envia mail.

Gracias de Antemano

Johann
10/09/2007
9:53 pm

Hola Unijimpe, tengo un hosting service habilitado para php , yo sigo las instrucciones pero lo que no entiendo es si alog hay que programar en el mismisimo hosting para que funcione, podrias por favor dar un ejemplo de donde colocar los archivos en un hosting service yo uso plataforma linux hago todo, no me bota errores pero no envia nada no se que faltara anadir o configurar

ARCO
11/09/2007
12:02 pm

talvez no tengas activada la funcion mail()

KaRuRoSu
27/09/2007
7:18 am

Muchas Gracias por este ‘peacho manual’. Me ha sido de gran ayuda.

chicogreenday
30/09/2007
3:17 am

hola no encuentro un hosting con stm no saben si hay uno gratuitot cualquier cosa me mandan un mail plis car_680@hotmail.com peroq ue ela dmonistrador pueda ayudarme

Jgucani
04/10/2007
10:39 pm

Hola. Ya hice el montaje y no devuelve nada ni llegan los email. Como valido si hubo errores en el proceso de envío ?
Gracias !

Jgucani
09/10/2007
3:25 am

Holas. Corrijo el mensaje anterior. Ya me funciona ok la función, aunque le hice un pequeño ajuste. No me funciona local desde mi pc, sino que tuve que colocarlo en un host en la web.

mariano
16/10/2007
9:29 pm

Hola
como se pueden mostrar imagenes en el body?

oidacra
20/10/2007
6:16 am

Excelente…. mejor se daña…

CARLES
25/10/2007
2:03 am

hola, he estado probando el phpmailer, pero no se como se ejecuta un script php, ¿se necesita algun programa?

hice todo lo que se dice, pero al ejecutar el script, no sale nada. Lo ejecuto desde la barra de direcciones del navegador: http://www.servidor.es/test.php

pero no ocurre nada de nada,
¿que me falta?

25/10/2007
9:37 am

Para ejecutar scripts php, necesitas tener instalado PHP. Generalmente todos los servicios de hosting actuales ya tienen soporte para PHP. Ahora si lo que deseas es instalar PHP en tu PC puedes leer Instalar Apache y PHP en WinXP.

CARLES
25/10/2007
6:37 pm

hola unijimpe, gracias por la respuesta.

Instale apache 2.0.59 y php 4.4.7 en mi pc correctamente, y me puse a probar el phpmailer, pero he fracasado.

Tengo un servidor smtp remoto, y puse el host: smtp.servidor.es, a la hora de enviar el mail me aparece el siguiente mensaje:

Message was not sent.Mailer error: SMTP Error: The following recipients failed: fulanito@mail.es, …

tambien probe de poner como host: mail.servidor.es, pero da error:

Warning: fsockopen() [function.fsockopen]: unable to connect to mail.servidor.es:25 in C:\Archivos de programa\Apache Group\Apache2\htdocs\phpmailer\class.smtp.php on line 105
Message was not sent.Mailer error: SMTP Error: Could not connect to SMTP host.

En fin, me gustaria saber como configurar el phpmailer para ejecutarlo desde mi computadora pero con un servidor de smtp remoto, ya que tambien prove de subir los archivos al servidor remoto y ejecutarlos desde alli pero sin resultado, me aparecia el codigo php escrito como texto plano en el navegador, supongo que esto es debido a que mi servidor no tiene instalado php (es asi?)

muchas gracias unijimpe

CARLES
25/10/2007
8:58 pm

perdon,

ya lo solucione, el problema estaba en que mi servidor smtp necesita autentificacion, para quien le pase lo mismo, añadir:

$mail->Mailer = “smtp”;
$mail->Host = “smtp.dominio.es”;
$mail->SMTPAuth = true;
$mail->Username = “usuario”;
$mail->Password = “contraseña”;

gracias de todas formas, aprovecho para preguntar cuales son los servidores en los que no se necesita autentificacion.

una ultima cosa, alguna guia de como añadir codigo html? he intentado poner un par de tablas con una imagen y texto pero no me funciona.

muchisimas gracias!

01/11/2007
12:29 am

cuando agrego las lineas me sale error
Notice: Use of undefined constant “smtp” – assumed ‘“smtp”’ in c:\archivos de programa\apache group\apache2\htdocs\conect3.php on line 4

en mi compañia hay servidor de smpt o ESMTP no se kual sea la diferencia, y he modificado todas las variables con el servidor y todas esas cosas y no me llega nada a mi correo…

saludos.

01/11/2007
12:40 am

oooo ya vi porque ciudado compañeros observen ke al kopiar el kodigo las comillas son ” y deben de ser “…. supongo es porque se copia el tipo de codificacion del html y debe de ser UTF-8

saludos

05/11/2007
8:45 pm

y para enviar-lo desde flash??como se cargan las variables, igual??

Roberto Ivan
07/11/2007
11:48 pm

Hola amigos tengo configurado igual

$website=”www.dominio.com”;
$subject=”Comentarios”;
$sendto=”ivan_19julio@yahoo.com”;
$fromname=”comentarios”;
$from=”webmaster@dominio.com”;

El formulario dice que el correo fue enviado pero no me llega nada

Saludos

ommaba
19/11/2007
1:36 am

en vez de colocar todos los destinatarios
#
$mail->AddAddress(”destino1@correo.com”,”Nombre 01″);
#
$mail->AddAddress(”destino1@correo.com”,”Nombre 01″);
#
$mail->AddAddress(”destino2@correo.com”,”Nombre 02″);
……………..
………………
#
$mail->AddAddress(”destinon@correo.com”,”Nombre n”);

como se hace para que se conecte a una bd y envie a los n destinatarios??

Jairo
25/11/2007
8:56 pm

Hola quisiera que por favor me explicaras como utilizar el PHPmailer ya que me gustaria utlizar como smtp el de GMAIL. Gracias.

Utlizo WampServer como Servidor local.

25/11/2007
10:04 pm

Jairo, para ello necesitas hacer uso de autentificación. Puedes encontrar mas detalles de como hacerlo en:
http://www.buayacorp.com/archivos/phpmailer-con-gmail/

JACASS
04/12/2007
12:28 pm

Alguien podria postear un zip con todo el formulario y clase,,que yo tengo todo en mi servidor pero no funka..
gracias..

20/01/2008
8:00 am

Hola, antes de nada agradecerte la ayuda que prestas a todos.
Yo ya uso phphmailer, sin tener smtp, con una cuenta gmail como se explica en
http://www.buayacorp.com/archivos/phpmailer-con-gmail/
Envio perfectamente (salvo a algunos dominios que deben detectarme como spam), ahora bien por mas que he buscado en los doc de la clase y en internet no he conseguido saber como hacer para en lugar de crear un nuevo mail responder a uno ya existente.
Supongo que sera cuestion de usar el mismo uid, pero no se como.
¿tienes idea de por donde puedo meterle mano?

dblanco
22/01/2008
7:30 pm

tengo dos preguntas:

1º) si enviamos correo masivo en un bucle no puede ser que se sobrepase el tiempo de espera y deje de funcionar la página? qué solución habría?

2º) existe opción de enviar Body en HTML y AltBody tipo TXT, ok. Pero y si sólo queremos enviar en TXT y obviar el HTML?

gracias

22/01/2008
9:36 pm

Hola dblanco, respecto a tus preguntas:

Para evitar que se sobrepase el tiempo de ejecución puedes editar tu archivo php.ini y cambiar la propiedad max_execution_time. La segunda posibilidad es colocar set_time_limit(0) al inicio de tu página. Puedes encontrar mas información en: http://www.php.net/set_time_limit

En el segundo caso solo colocar contenido a la propiedad AltBody y funcionará sin problemas.

jose
29/01/2008
10:41 am

yo tengo un problemilla:
estoy utilizando phpmailer y en el Body inserto todo el código html de la siguiente forma:

$mail2->Body = ”

/* PAGINA*/
body {

(…) TODO EL CSS NECESARIO

(…) EL CORREO

“;

el problema es que todo el estilo css se aplica y se ve correctamente en el outlook, por ejemplo, pero no se ve en gmail/hotmail/…

En un principio el css lo puse linkado:

pero no funcionaba.

¿alguién ha tenido un problema similar?

¿alguién me puede ayudar a que se vea también en gmail/hotmail?

muchas gracias a todos.

jose
29/01/2008
10:43 am

yo tengo un problemilla:
estoy utilizando phpmailer y en el Body inserto todo el código html de la siguiente forma:

$mail2->Body = ”
html>
head>
style type=’text/css’>
/* PAGINA*/
body {

(…) TODO EL CSS NECESARIO

/style>
/head>
body>
div id=’page’>

(…) EL CORREO

/div>
/body>
/html>
“;

el problema es que todo el estilo css se aplica y se ve correctamente en el outlook, por ejemplo, pero no se ve en gmail/hotmail/…

En un principio el css lo puse linkado:

link rel=’stylesheet’ href=’http://www.dominio.com/css/style.css’ type=’text/css’ media=’screen’

pero no funcionaba.

¿alguién ha tenido un problema similar?

¿alguién me puede ayudar a que se vea también en gmail/hotmail?

muchas gracias a todos.

jhon key
31/01/2008
4:40 pm

jose. si vas a insertar html en una variables hazlo con las comillas simples ejemplo:

print $texto=’

datos
ejemplo

‘;

sino mira como genera este editor el codigo html para enviarlo en el body de un mensaje :

http://www.zapatec.com/website/main/products/editor/demo.jsp#full_editor.html

haz click donde dice html , y veras como genera el codigo.

06/02/2008
12:28 pm

Hola.

Tengo una duda que no soy capaz de resolver.

tengo este codigo:

require(”class.phpmailer.php”);
$mail = new PHPMailer();
$mail->Host = “mail.copycenterdigital.com”;
$mail->From = “comercial@copycenterdigital.com”;
$mail->FromName = “Nombre del Remitente”;
$mail->Subject = “Subject del correo”;
$mail->AddAddress(”copycenter@copycenterdigital.com”,”Tu nombre”);

$body = “Hola amigo“;
$body .= “probando PHPMailer.”;
$body .= “Saludos”;
$mail->Body = $body;
$mail->Timeout=30;
$mail->AltBody = “Hola amigo\nprobando PHPMailer\n\nSaludos”;
$mail->AddAttachment(”images/foto.jpg”, “foto.jpg”);
$mail->AddAttachment(”files/demo.zip”, “demo.zip”);

if ($mail->Send())
{
echo “mail enviado”;
} else
{
echo “fallo en el envio”;
}

De esta forma si el correo se enviara correctamente saldria mail enviado.

Pero no sale ni una sola vez
Ademas no envia el correo claro.

El servidor SMTP es como indicabas aunque no se si es correcto. Los archivos estan en mi pc y los proceso mediante el servidor apache que instala wamp, pero como digo, nunca sale bien.

Ya he probado muchas cosas y nada me funciona.

Necesito ayuda por que esto me costar un dolor.

Muchas gracias.

23/02/2008
11:09 pm

bueno acabo de encontrar este mensaje y tratare de implementarlo aunque a decir verdad dificil lo veo.

para mi esto es japones.

gracias y ya les comento como me ha resultado

04/03/2008
5:45 pm

hola he usado esta funcion para envio de mail y funciona a las mil maravillas.
pero tengo que enviar este mail dos veces a la empresa con el remitente del nombre del cliente y al cliente con el remitente del mail de la empresa
como puedo hacer esto???
usando la misma funcion de arriba?
gracias

Rodrigo Inostroza
07/03/2008
9:20 am

Estoy haciendo el codigo… me envia el mail pero no me adjunta los archivos… un solucion por favor. este es el codigo:

Host=”localhost”;
$mail->AddAddress(”roinostroza@hotmail.com”, “Rodrigo Inostroza”);
$mail->Subject = “Formulario Solicitud Gráfica”;
$mail->Body = “Enviado Por “.$_POST['nombre'].” para la Empresa “.$_POST['cliente'];
$mail->AddAttachment(’home/keyadmin/public_html/formulario/formulario.pdf’, “formulario de “.$_POST['nombre'].”.pdf”);

if(!$mail->Send())
{
echo “Error en el envio del email”;
exit;
}
echo “El Mensaje se envió correctamente”;
?>

me sale repetidas veces que se envió correctamente pero no adjunta el archivo.

sol
20/04/2008
12:12 pm

Hola unijimpe, ya descarge PHPMailer, pero soy una ignorante con todo lo que he leido y necesito ayuda pasito a pasito, por favor ayudame es muy importante para mi lograr enviar e-mail masivos, va a ser la base de sustento para toda mi familia. gracias por compartir tus conocimientos.

15/05/2008
5:03 pm

realmente como puede haber gente tan bestia y necia, que intentan hacer cosas mas avanzadas en php sin siquiera saber usar el echo; realmente es indignante ver gente tan animal. que no saben ni lo que van a hacer y encima se enojan al ver que no les sale..si quieres aprender php metanse a un curso.. o si no imprimanse esto…

$acum=1;
while($acum>1000){
echo “vayanse al carajo”;$acum++;}

harold lazo
16/05/2008
8:41 am

Hola, y si quiero que en ese mail que voy a enviar salga de encabezado una imagen, como haría? no un dato adjunto si no una imagen que salga con el mensaje, gracias

marcela
06/06/2008
9:46 am

ola no olviden habilitar la extension openssl en php si estan en wamp es mas facil

Edixson
12/06/2008
1:17 pm

Javier eres un perfecto idiota, quien te crees q eres para ofender a los demas, sino kieres ayudar simplemente no te metas. Por cierto se nota q haz practicado mucho esa funcion xD…

Elena
13/06/2008
5:39 am

Mi duda es como poder insertar el Css de la página a enviar para que lo reconozcan tanto gmail como hotmail. He probado tanto insertar directamente en la cabecera los estilos como con enlace al archivo Css pero no lo reconoce.
Agradecería si pudieraís solucionarme el problema. Gracias.

23/06/2008
12:37 am

[...] la necesidad de enviar email a una lista de correo, esto lo podemos hacer utilizando la librería PHPMailer el cual nos permite enviar emails con algunas opciones avanzadas para este tipo de [...]

26/06/2008
11:56 am

Buenas, estoy probando esta función ya que necesito hacer una prueba para la universidad de un formulario que envíe un archivo adjunto a una dirección de correo. Hasta lo que he visto lo puedo hacer el problema esta en que no tengo el control del directorio donde corre PHP, y no hallo como instalar la función en la pag http://phpmailer.codeworxtech.com/install.html dice lo siguiente:

If you do not have control of the include directory and you are running PHP 4.0 or higher you can use this function to set it to the path of your files:

ini_set(”include_path”, “.:/path/to/phpmailer/dir”);

Or this:

$mail->PluginDir = “/path/to/phpmailer/dir”;

Lo que no comprendo es donde coloar esas rutas. ¿podría ayudarme?

24/07/2008
6:10 pm

[...] la necesidad de enviar email a una lista de correo, esto lo podemos hacer utilizando la librería PHPMailer el cual nos permite enviar emails con algunas opciones avanzadas para este tipo de [...]

agustin
01/08/2008
11:10 am

exelente ejemplo, pero tengo la duda de como hacer que en vez de adjuntar la imagen, esta aparezca en el encabezado del mensaje, la idea es poner un logo en el cuerpo del mensaje

03/08/2008
2:37 pm

[...] Introducción a PHP Mailer [...]

Mari
08/08/2008
12:19 pm

hola tengo un problema para enviar correos a hotmail,yahoo,gmail,etc. Supuestamente los correos si se estan enviando por que no me muestra ningun error de envio, el problema esta en que no llegan al destino, podrian decirme cual seria el motivo el por que no los envia, estoy utilizando las clases PHPMailer y SMTP.

ayundeme solo tengo una semana para resolverlo estoy en estadìas.
gracias.

si puedes ayudarme mi correo es
idem_abril@hotmail.com

Pedro
02/09/2008
10:07 am

Buenas!, muy buena la info… Pero ando necesitando algo mas… o sea, necesito poder manejar los mails rebotados..como para dejar una marca de a cuales clientes no les pude mandar el mail… Hay alguna solucion “magica” para esto???

Gracias

Roberto
04/09/2008
4:28 pm

Buenas!!, soi nuevo utilizando esta clase de PHPmailer, y no puedo mandar los correos, ya que no tengo mucho conocimiento de eso de SMTP tengo este codigo:

require(”class.phpmailer.php”);
$mail = new PHPMailer();
$mail->Host = “guanajuato.gob.mx”;
$mail->From = “jreynoso@guanajuato.gob.mx”;
$mail->FromName = “Neri”;
$mail->Subject = “Prueba”;
$mail->AddAddress(”rc.rodriguez.f@linuxmail.org”,”Carlos”);

$body = “Hola amigo“;
$body .= “probando PHPMailer.”;
$body .= “Saludos”;
$mail->Body = $body;
$mail->AltBody = “Hola amigo\nprobando PHPMailer\n\nSaludos”;
$mail->AddAttachment(”images/foto.jpg”, “foto.jpg”);
$mail->AddAttachment(”files/demo.zip”, “demo.zip”);
$mail->Send();

aver si m pueden ayudar

07/09/2008
10:29 am

[...] PHPMailer es una librería que nos permite enviar emails con algunas opciones avanzadas para este tipo de labores. [...]

Obelix
17/09/2008
5:32 pm

Buenas!!! Ando con un problemita, quisiera ver si me pueden ayduar…
Tengo esta libreria funcionando correctamente, y estoy usando una cuenta de gmail… tengo una aplicacion donde debo enviarles informacion a todos mis clientes… por lo tanto, puedo llegar a mandar cerca de 1000 mails (de a uno, ya que son personalizados)…. pero despues de los 400 o 500 mails (que van llegando bien) me tira este mensaje:
Mailer Error: Language string failed to load: data_not_accepted
en TODOS los mails.. o sea, que no envia ninguno mas…

Me da la sensacion de que Gmail es quien me bloquea, pero no estoy segurro de ello… por otro lado, quize configurar un servidor SMTP local, pero me es imposible configurar el DNS, por lo que el mail llega al servidor, pero nunca sale de ahi….

Alguien me puede dar una mano??? Grax!

Obelix
17/09/2008
6:10 pm

Efectivamente…. Gmail me bloqueo la cuenta por 24 horas, por excederme…

Pero sigo sin poder resolver el tema del DNS para el servidor local de SMTP

17/09/2008
8:08 pm

Obelix, según parece Gmail te ha bloqueado por enviar muchos emails en tan poco tiempo, a eso se le llama spam. Por otra parte la solución a este problema es utilizar un servidor SMTP de forma local, para lo cual no necesitas configurar ningún DNS, solo se configura DNS cuando quieres que mediante una dirección en Internet accedan a tu maquina local, lo cual no es tu caso.

Obelix
17/09/2008
11:05 pm

Gracias por la respuesta… lo de Gmail era “una prueba”… tenia que medir cual era el limite… y lo encontre…

Con respecto al servidor SMTP… no se que onda.. debo ser medio manko… instale ya varios y no hay caso… el mail entra la servidor… lo veo en la cola de mensajes, pero de ahi no sale… No se como solucionarlo eso…

Saludos

PhantomDark
23/09/2008
1:00 pm

Estoy viendo si me funciona pero parece que no

gn
24/09/2008
10:38 am

hola , quisiera saber si me pueden orientar para mandar mails con php
pero no con adjuntos, necesito que el html este incrustado en el cuerpo de mail , para que cuando se abra el mensaje se vea la imagen y el texto al mismo tiempo

Fernando
16/10/2008
10:02 am

Hola unijimpe sioy novanto en la programacion de php pero sabes estoy intentado utilizar el phpmailer pero loque tengo es un formulario qu eya tiene el correo en una etiqueta esta toma la direccion de uan base de datos y por ende yo deberia enviar ese correo al mail que fue selecionado no a uno preestablecido si fuera posible algun ejemplo o un lagar dodne lo pueda mirar saludos y gracias por la ayuda

24/11/2008
10:05 pm

[...] la necesidad de enviar email a una lista de correo, esto lo podemos hacer utilizando la librería PHPMailer el cual nos permite enviar emails con algunas opciones avanzadas para este tipo de [...]

Hector
28/11/2008
11:11 pm

esta muy bueno el manual lo unico que te falta es decirle al phpmailer que lo envie por smtp para esto tienes que agregar la variable

$mail->Mailer = “smtp”;

jorgete
29/11/2008
5:11 pm

puuucha necesito ayuda… hice una tarjea de saludos y me llega como spam… que debo hacer.. este es el cod. php.. las fotos estan vinculadas

<?
$cabeceras = “From: $mail\r\nContent-type: text/html; charset=UTF-8\r\n”;
$codigo = ‘

Vader is a Hater – Star Wars Fan Art

‘.$noticia2.’

‘;
if(mail( $mail , “Tarjeta de Navidad”, $codigo, $cabeceras)){
print “”;
}

else
{
return $fallo;
}
?>

jorgete
29/11/2008
5:14 pm

veo que no muestra el cod. entero.

Nacho P
16/12/2008
5:37 pm

Hola a todos, Unijimpe o cualquiera que pueda resolver el misterio; existe un problema sin solución aún y a algunos de nosotros como Mari, JuanAn, Davinia y Guzzilu parece nos tiene quietos. Podemos enviar correos solo a cuentas registradas en el servidor local, no podemos enviar correos a cuentas alojadas en servidores externos como hotmail, gmail, yahoo o cualquier otro.
Por favor, si alguien tiene la respuesta, o algunos de los acá nombrados hallan podido solucionarlo por favor cuentenos como lo hicieron, es de mucha utilidad para nosotros saberlo.
Muchas Gracias y ojala algun genio nos de la respuesta ;)

Javier
17/12/2008
6:17 am

Hola, yo acabo de enviar un mail utilizando el sencillo ejemplo del tutorial a una cuenta gmail y me llegó perfectamente, y lógicamente a cuentas locales también…

Alex
20/12/2008
10:13 pm

Hola Yo tengo una pregunta haber si alguien puede responderme, gracias de antemano.
Mi pregunto es, Si yo pongo la opcion TO, CC, CCO, hasta cuantos mail me soportaria 50? 500? 1000? y si es por cada seccion un maximo me gustaria saber cuanto, por ejemplo el CCO cuantas hasta cuantos mail me soportaria. espero haber sido claro. gracias…

Jamarchi
09/01/2009
3:12 pm

Jejeje iba hacer la misma pregunta que hizo Alex.

fernando
16/01/2009
8:18 pm

hola amigo.. de casualidad saves de algun hosting gratuito que permita en envio por medio del mailer?
si puedes contestarme por mail. te agradeceria.

Miguel Monroy
13/02/2009
10:25 am

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

Jamarchi
16/02/2009
1:01 pm

Hola Gente… ya hice que funcionara sin problema, pero lo que quiero hacer es ponerlo en un formulario, el codigo es este
getFile(’contents.html’);
$body = eregi_replace(”[\]“,”,$body);

$mail->From = “info@yahoo.com”;
$mail->FromName = “Nombre”;

$mail->Subject = “Prueba de email”;

$mail->AltBody = “To view the message, please use an HTML compatible email viewer!”; // optional, comment out and test

$mail->MsgHTML($body);

$name = $_POST['name'];
$email = $_POST['email'];
$bcc = $_POST['bcc'];

$mail->AddAddress($_POST['email']); // dirrecciones a las que se va a mandar el mail
$mail->AddBCC($_POST['bcc']);

//$mail->AddAttachment(”images/bolante.jpg”); // Archivo adjuto
$mail->AddEmbeddedImage(”images/bolante.jpg”, “Publiwebcr.com”, “images/bolante.jpg”);
$mail->Body = ‘Embedded Image: Here is an image!’;

if(!$mail->Send()) {
echo “Mailer Error: ” . $mail->ErrorInfo;
} else {
echo “Message sent!”;
}
?>

Pero tengo dos problemas
1. No se despliega la imagen, osera se manda pero queda como archivo adjunto y lo que deseo es que se despliegue en el mail, se puede hacer?
2. me muestra este error Parse error: syntax error, unexpected $end in /home/comepris/public_html/envio/correo3.php on line 152″ pero mi codigo no tiene 150 lineas, no se si me puedas ayudar

Gracias

24/02/2009
2:12 pm

necesito enviar mails a hotmail con php!!!! y con phpmailer llega como spam! q hago?

Augusto
01/03/2009
9:09 pm

Hola jamarchi… ojala puedas leer esto. No uses $mail->MsgHTML($body)
en su lugar usa la linea:
$mail->Body = $body;
A mi tambien me paso que con MsgHTML no llegan las imagenes, lo mas de raro, ni idea por que… pero con la otra funcion si llegan perfecto… Espero le sirva…

Fabian
07/03/2009
5:25 pm

He probado esta funcion y funciona perfectamente.
Pero tengo un pequeño inconveniente y es que los mail tardan mucho en llegar, alrededor de 20 o 30 minutos luego de enviarlos.
¿Esto se puede configurar desde PHPMailer? ¿O solo desde le servidor?
El envio lo realizo desde un servidor como localhost.

Gracias,
Fabian

07/03/2009
6:11 pm

Fabian eso el envío depende del servidor SMTP que estes utilizando, algunos servidores despachan automaticamente lo emails, otros esperan a tener una cierta cantidad para hacer el envío y otros lo hacen cada cierto tiempo, esto es para optimizar recursos.

31/03/2009
12:35 pm

Hola todos bueno tengo un problema quisiera ingresa por formulario los correos(100). pero el script de php mailer me permite mandar a 1 solo entonces ingrese al codigo PHP (class.phpmailer.php) y quise modificar algo pero eso variaria en lo que quiero osea mandar varios correos a la vez, derrpente se puede agregar un bucle for?

este es el original:
function AddAddress($address, $name = “”) {
$cur = count($this->to);
$this->to[$cur][0] = trim($address);
$this->to[$cur][1] = $name;
}

31/03/2009
9:10 pm

[...] de correo (Para leer acerca del envío de correo con PHP pueden leer Envíar E-mail con PHP o Introducción a PHPMailer) con lo cual nuestro código sería de la [...]

07/04/2009
10:28 am

Hola, saludos.!
Quisiera que me explicara en donde tengo que guardar la libreria phpmailer.

Darks
14/04/2009
10:38 am

hola a todos es la primera vez q hago esto en php de enviar emails, tengo infinitum como conexion en el host le puse smtp.prodigy.net.mx, ahora mi duda es en el archivo de class.phmailer.php tengo q ponerle el usuario y contraseña de una cuenta de prodigy o de cualquiera porq cuando lo pruebo me manda este error: SMTP Error: Could not connect to SMTP host

Darks
14/04/2009
10:40 am

se me olvidaba decirles q lo estoy haciendoi de manera local no he modificado nada en el php.ini todo lo declaro en el script donde envio el correo

Rodrigo
15/04/2009
8:44 pm

Che, no se podra adaptar el cuerpo del mensaje con algún WYSIWYG ??

Me interesa saber al respecto.

Gracias =D

16/04/2009
5:54 am

Hola amigo, quisiera saber si pueden ayudarme. Al usar este script, si el destinatario es gmail, el correo es recibido como spam. puedes decirme por que ?, gracias. Gilberto

require(”./class.phpmailer.php”);
$mail = new PHPMailer();
$mail->Host = “mail.higuerote.com”;

$mail->From = “info@higuerote.com”;
$mail->FromName = “higuerote punto com”;
$mail->Subject = “este el el subject del correo”;
$mail->AddAddress(”inaboxca@hotmail.com”,”el de hotmail”);
$mail->AddAddress(”gilbertohm@gmail.com”,”el de gmail”);
//$mail->AddCC(”usuariocopia@correo.com”);
//$mail->AddBCC(”usuariocopiaoculta@correo.com”);

$body = “Hola amigo“;
$body .= “probando PHPMailer.”;
$body .= “Saludos”;
$mail->Body = $body;
$mail->AltBody = “Hola amigo\nprobando PHPMailer\n\nSaludos”;
$mail->AddAttachment(”test/test.png”, “foto.jpg”);
//$mail->AddAttachment(”files/demo.zip”, “demo.zip”);
$mail->Send();

27/04/2009
12:46 pm

Hola!!! Lo mio no es una pregunta, es un agradeciemiento por la buena explicacion…Estoy empezando con PHP practicamente y el detalle de la clase esta me parecio muy explicativo y hoy estare probandola. Luego comentare.

Creo tambien que me veras seguido por aqui ya que estoy volviendo a programar despues de mucho tiempo y seguramente surgiran dudas.

Muchas gracias por tu blog.

Curenay
04/05/2009
5:28 pm

Usen la aplicación http://swiftmailer.org en vez de phpMailer es mas nueva, rapida y configurable.

Suerte

hola
07/05/2009
2:22 pm

Hola,
solo tengo un problema con el codigo.

envia perfectamenmte correos a todas las cuentas y directo a la badeja de entrada, eso es porque pongo mi identificacion en el codigo, el unico problema es que debo enviar por ejemplo 10 correos uno por uno y a cada usuario le llegan 10 correos si son 20 email llegan 20 correos por cuenta, etc.

Alguna forma de recetiar el arreglo AddAddress?

lo puedo arreglar, pero la forma que me queda no me sirve, ya que por cada correo que envie, me debve enviar un mensaje que el mail se envio correctamente a mail@mail.com o el mensaje no se envio a mail@mail.com
por lo tanto en un bucle for debo meter el $mail->AddAddress(); y el $mail->Send();
por eso necesito que al enviar el primer mail AddAddress() se resetee.

Rodrigo (soy hola)
07/05/2009
2:26 pm

probe con unset y no me funciona.

Rodrigo (soy hola)
07/05/2009
2:28 pm

como puedo resetear la variable $mail->AddAddress(); ????

probe con unset pero no hace nada $mail->AddAddress sigue con todos los datos

Rodrigo (soy hola)
07/05/2009
2:34 pm

ya lo he solucionado con $mail->ClearAddresses();

como puedo resetear la variable $mail->AddAddress(); ????

probe con unset pero no hace nada $mail->AddAddress sigue con todos los datos

Venancio
13/05/2009
2:38 pm

estoy orobando este formulario para ver si lo puedo poner en mi web graxX…
saludos

FernandoV
09/06/2009
2:42 am

Tengo este script para enviar facturas por correo con php mailer,me manda el correo pero no personifica las facturas de tal manera que me envia todas a todos, le agradecería su ayuda:
$link = mysql_connect(”localhost”,”xxx”,”xxxx”);
mysql_select_db(”xxxx”);
$consulta = “Select * from factura2,empresas where id_factura between ‘$id_factura’ and ‘$id_factura1′ AND empresas.id_empresas=factura2.id_empresas”;
$results = mysql_query($consulta, $link);
$tot=mysql_num_rows($results);
$x=0;
$pdf=new FPDF();
while($row=mysql_fetch_array($results))

{
.Aquí viene el sript de pdf….
//Se crea el formato de correo a Enviar
$mail=new PHPMailer();

$mail->Helo = “www..com”; //Muy importante para que llegue a hotmail y otros
$mail->SMTPAuth=true;
$mail->Host=”.com”;

$mail->Username=”xxx@xxxx.com”;
$mail->Password=”";
$mail->From=”";
$mail->FromName=”";
$mail->Timeout=60;
$mail->IsHTML(true);

$mail->AddAddress($row["email2"],$row["nombre"]);
//Enviamos el correo
//Puede ser Hotmail
$mail->AddCC(”");
$mail->Subject=’tu asunto’;

//Creamos el documento como String para poder enviarlo como archivo adjunto
$doc=$pdf->Output(’factura /’ .$row['id_factura'].’/',’S');
$mail->AddStringAttachment($doc, ‘factura /’ .$row['id_factura'].’/', ‘base64′, ‘application/pdf’);
if($mail->Send())
{
echo “Mail enviado exitosamente”;
}else{
echo “Correo $to no enviado”;
}

$mail->ClearAllRecipients();

}

29/06/2009
2:20 pm

Hola muchas gracias era justo lo que necesitaba porque con mail() tenía problemas con la codificación. Ya que en gmail / hotmail / outlook los mails se ven perfectos…pero en Squirrelmail no entraban como HTML o los mismos no mostraban acentos o ñ. Saludos !

Enviar Comentario

(*)

(*)