Skip to Content »

Enviar Email con Adjuntos

  • 31/07/2007
  • 10:49 am
  • unijimpe

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.

mailattach.gif

Creando el Formulario
Lo primero es crear un formulario en el cual el usuario ingresará los datos del destinatario, asunto, mensaje y seleccionar el archivo que se desea adjuntar. Para ello creamos un formulario con los campos necesarios:

HTML:
  1. <form action="" method="post" enctype="multipart/form-data">
  2. Destinatario <input type="text" name="destino"><br>
  3. Asunto <input type="text" name="asunto"><br>
  4. Adjunto <input type="file" name="archivo"><br>
  5. Mensaje <textarea name="mensaje"></textarea><br>
  6. <input type="submit" name="btsend" value="Enviar Email">
  7. <input type="hidden" name="action" value="send" />
  8. </form>

Notese que hemos utilizado la propiedad enctype con la cual permitimos el envío de archivos adjuntos en el formulario. Además hemos agregado un campo oculto llamado action para verificar que se ha enviado el formulario.

Enviando el Email
Es el momento de recibir los datos enviados en el formulario y enviarlos por email, para ello utilizaremos la clase PHPMailer para lo cual lo adjuntamos en la primera linea. Lo que sigue es verificar si se ha envíado el formulario para ello comprobamos la variable action del formulario. Luego recuperamos el nombre del archivo adjunto y el archivo temporal en las variables $varname y $vartype. Lo siguiente es crear una instancia de la clase PHPMailer donde le pasamos todas las variables necesarias.

PHP:
  1. require("class.phpmailer.php");
  2. if ($_POST['action'] == "send") {
  3.     $varname = $_FILES['archivo']['name'];
  4.     $vartemp = $_FILES['archivo']['tmp_name'];
  5.    
  6.     $mail = new PHPMailer();
  7.     $mail->Host = "localhost";
  8.     $mail->From = "blog@unijimpe.net";
  9.     $mail->FromName = "Blog Unijimpe";
  10.     $mail->Subject = $_POST['asunto'];
  11.     $mail->AddAddress($_POST['destino']);
  12.     if ($varname != "") {
  13.         $mail->AddAttachment($vartemp, $varname);
  14.     }
  15.     $body = "<strong>Mensaje</strong><br><br>";
  16.     $body.= $_POST['mensaje']."<br>";
  17.     $body.= "<i>Enviado por http://blog.unijimpe.net</i>";
  18.     $mail->Body = $body;
  19.     $mail->IsHTML(true);
  20.     $mail->Send();
  21. }

En el código anterior hay que notar que hemos verificado si existe un archivo adjunto para luego añadirlo como adjunto utilizando la propiedad AddAttachment. Finalmente asignamos el texto del mensaje y procedemos a enviar el correo con $mail->Send().

No olvidar que estamos utilizando PHPMailer, asi que es necesario descargar los archivos fuente de esta clase. Para finalizar he creado un archivo de prueba en http://samples.unijimpe.net/mailattach.php y también les dejo los archivos fuente para su descarga.

Posts Relacionados

Total de Comentarios: 40

Publicidad
31/07/2007
10:19 pm

[...] Enlace al tutorial [...]

31/07/2007
10:21 pm

http://www.blogdelsur.com.ar/?p=36

Excelente tuto, ya lo recomendamos en el blog!!

GabrieLi0
01/08/2007
5:43 am

aha cheve programacion

muy bueno salu2

01/08/2007
11:04 am

No entiendó muy bien cómo hay que aplicar PHPMailer. Descargué ese programa junto con el Apache. Ahora estoy copiando textual los códigos que están más arriba en la entrada de mi blog. El formulario aparece cuando compilo, pero también aparece todo el código de abajo.

Espero puedan ayudarme.

Saludos.

03/08/2007
2:47 pm

Una vez que descargas el phpmailer donde lo descomprimes y guardas?? saludos

04/08/2007
4:42 am

Para aprender a utilizar PHPMailer pueden leer: http://blog.unijimpe.net/introduccion-a-phpmailer/, ahora en el caso de hacer descargado phpmailer deben estar en la misma carpeta donde estan tus archivos php.

16/08/2007
9:45 pm

Que buen blog, lo corri y funciona a la perfecccion, gracias y felicidades..

Eduardo Dominguez
28/08/2007
12:31 am

Esta muy bien la formay funciona a la perfeccion, pero en caso de que yo quiera que el campo de destinatario sea donde yo escribo la direccion de mail desde donde se manda (From) y la direccion destino este fija que hago, lo he intentado y no me sale

28/08/2007
8:32 am

Lo que tendrías que hacer es cambiar las propiedades AddAddress donde se indica a donde se va a enviar y From que indica quien es el remitente, con lo cual se tendría:

$mail->From = $_POST['destino'];
$mail->AddAddress(blog@unijimpe.net);

Como se ve habría que eliminar la propiedad FromName.

Pablo
28/08/2007
1:49 pm

De lujo. Me has ayudado un montón. ya que no sabía como recoger correctamente el nombre y el archivo temporal del input file.

Ahora sé que es así.

#
$varname = $_FILES['archivo']['name'];
#
$vartemp = $_FILES['archivo']['tmp_name'];

03/09/2007
2:54 am

correo de prueba

Hernan Velasquez
05/09/2007
11:03 pm

Hice la prueba en el ejemplo que muestras en tu blog, pero lo quiero probar en mi maquina local, es decir, que me funcione en mi servidor local, tengo el xampp y el wamp funcionando en ella, que tengo que hacer para configurarlo y que funcione como si fuera en la web, ojala y me pudieras explicar todos los pasos necesarios, ya que he tenido muchos problemas ocn esto.

Hernan Velasquez
07/09/2007
4:10 am

Hice la prueba en el ejemplo que muestras en tu blog, pero lo quiero probar en mi maquina local, es decir, que me funcione en mi servidor local, tengo el xampp y el wamp funcionando en ella, que tengo que hacer para configurarlo y que funcione como si fuera en la web, ojala y me pudieras explicar todos los pasos necesarios, ya que he tenido muchos problemas ocn esto

orlando
18/09/2007
8:18 pm

hola
He realizado un formulario para el envio de correos mas o menos igual al de arriba ejemplificado. Pero el problema es que no me sale y sobre todo porque no se a que host hacer referencia.

Podrian ayuidarme por favor.

gracias:

19/09/2007
8:04 am

[...] Email con Adjuntos: Aqui podras encontrar una guía para poder implementar un formulario para poder enviar email con archivos adjuntos mediante php, aqui encontrara informacion sobre la codificacion php y los pasos a seguir para realizar este proyecto. [...]

19/09/2007
7:07 pm

[...] Email con Adjuntos: Aqui podras encontrar una guía en la cual te informaras sobre la manera de como implementar un formulario para enviar email con archivos adjuntos, cuenta con la descripcion de cada uno de los pasos y los pantallazos de los mismos. [...]

21/09/2007
9:29 am

[...] Mandar Email con Adjuntos: Aqui podras encontrar una guía para poder implementar un formulario para poder enviar email con archivos adjuntos mediante php, aqui encontrara informacion sobre la codificacion php y los pasos a seguir para realizar este proyecto. [...]

03/10/2007
4:11 am

hola, estoy haciendo un web necesito que capturar comentarios y enviarlos al correo del sitio, tengo mi smtp (smtpout.secureserver.net)y el puerto (80) sin embargo este servidor requiere autenticación de salida (mi usuario y contraseña)como le hago para que funcione porque asi aun no funciona. Gracias

03/10/2007
8:04 am

Si deseas utilizar un servidor SMTP que necesita autentificación debes utilizar:

$mail->IsSMTP();
$mail->Host = "smtp.site.com";
$mail->SMTPAuth = true;
$mail->Username = "tuusuario";
$mail->Password = "tupassword";

Puedes encontrar mas información en: http://phpmailer.sourceforge.net/

Claudio González Soto
14/10/2007
6:56 am

Hola, ¡Que tal?.

Hacia tiempo que busco algo como esto, encuentro que esta muy bien, lo probe desde el ejemplo de tu web, y funcionó perfecto, yo tengo una web, privada en la cual tengo que enviar correos a mis socios, los cuales mantengo una base de datos, en el formulario solo pongo el asunto y el mensaje, y los datos de los destinatarios los saco de la base de datos, pero me hacia falta el adjuntar archivos.

Subi, los archivos del ejemplo al servidor donde tengo alojada la web,
y efectue el llamado a ella de la siguiente forma, http://www.misitio.com/mailattach/mailattach.php y me da el siguiente error:

Warning: Unknown: failed to open stream: Permission denied in Unknown on line 0

Fatal error: Unknown: Failed opening required ‘/home/misitio/public_html/mailattach/mailattach.php’ (include_path=’.:/usr/lib/php:/usr/local/lib/php’) in Unknown on line 0

Me puedes explicar que pasa, y como lo puedo adaptar a mis necesidades de leer los datos desde una base de datos?

Muchas gracias y excelente tu blog

jose
28/11/2007
5:55 pm

todo esto es weno, perotengo una duda, alguien sabe como adjuntar un archivo en flash y despues enviarlo por mail…. toda la web esta hecha en flash…. porfavor si alguien sabe de esto, me serviria de mucho….se agradece

28/11/2007
11:07 pm

Jose, para aprender a adjuntar archivos en flash puedes leer Upload de Archivos con Flash y para hacer el envío de email puedes leer Enviar email con Flash y PHP.
Saludos

jose
30/11/2007
10:02 am

gracias por responder, eso ya lo hice, y ya hice el emvio de mail desde flash, y tambien el adjuntar archivos desde flash, pero por separado como en los ejemplos, ahora mi problema es, como los uno,… es decir una vez adjuntado el archivo desde flash, tambien enviarlo por mail…. eh ahi mi problema

12/12/2007
5:19 pm

Hola que tal?

El código me funciona muy bien, pero necesito un formulario que me envie dos archivos adjuntos. Me pueden facilitar un codigo para poder hacerlo. Gracias de antemano.

Javi
30/01/2008
8:02 am

Este código da malas ideas pues, si en vez de dar la opción de enviar algún archivo adjunto, engañamos al que envía el mail y recibimos el archivo donde “por ejemplo” se guardan las contraseñas, habremos recibido mucho más de lo que el emisor esperaba enviar…
Bueno, pero esto es sólo un dato, no digo que todo el mundo lo use para ello. Cada cual se aplica sus leyes.
:)

25/02/2008
11:30 am

Una vez mas te escribo. No se si recuerdes mi nombre pero tu me recomendaste esta seccion. ¿Y adivina? He probado el ejemplo y funciona perfectamente. Me imagino que a traves de phpmailer se puede usar el tipico: ” recomendar a un amigo”, enviar formularios con archivos adjuntos dentro de otras cosas.

De momento intento crear un formulario en el que se puedan incluir archivos adjujtnos y enviarlos a mi mail. Seguire experimentando ya que como licenciado de arquitectura el php se me hace un poco complicado. Sin embargo de a poco he podido ir haciendo pequeñas cosas en mi pagina web, gracias a la buena disposicion de gente como tu.
Por cierto,una vez mas: Gracias

25/02/2008
6:55 pm

Hola nuevamente.
Despues de todo el dia experimentando he conseguido ahcer el formulario gracias a la guia que nos m,uestras. Sin embargo tengo un pequeño inconveniente.

El inconveniente es que al enviarlo a horde.
el archivo no lo puedo abrir dirtectamente como un email normal. sino que se tengo que descargarlo como un archivo de texto.

Cuando lo probe en hotmail tampoco se me abria directamente. al parecer lo reconocia como spam.

El asunto es que quisiera saber porque me llega de esta forma la informacion.

Mis sospechas apuntasn a que mi mail reconoce el archivo como spam y lo bloquea. Supongo que por el body del mensaje.

agradeceria pudiras aconsejarme respecto de si es posible evitar este pequeño problemilla.

Danielito
06/03/2008
10:15 pm

muy bueno tu blog socio…

Cristián Jeria
10/03/2008
3:37 pm

Hola,
Gracias por esta solución, quisiera saber si es posible implementarla para un sitio desarrollado en Wordpress. Quiero implementar una sección de ofertas laborales y que los postulantes puedan enviar sus CV.
Saludos

LORENA
02/04/2008
2:36 pm

me encanta este blog
I love it……
conecting and you can speak whit me…..
bye

andres
15/04/2008
10:13 am

como hago si el archivo que queiro enviar lo tengo fijo en el servidor y no es variable desde el form?

Javi
29/04/2008
9:05 pm

Es unos de los temas que yevo tiempo buscando, el post es sensacional pero…
Abria manera de hacer esto en una pagina html???…
Les agradeceria su ayuda, saludos.

lucas
01/05/2008
9:06 pm

me funciona perfectamente,,pero me sumo a la pregunta de como adjuntar dos o mas archivos!!!

joseba
12/05/2008
11:53 am

Buenas, ya que veo que usáis la phpMailer a ver si me podéis resolver una pequeña duda que tengo, veréis, el problema es que al enviar un archivo adjunto un poco grande ( unos 256 Kb) el phpMailer me devuelve que no lo ha enviado, pero sin embargo si que lo envía, sabéis como se puede solucionar esto????

maxi
21/05/2008
5:34 pm

me funciona perfectamente el codigo,,pero me sumo a la pregunta de como adjuntar dos o mas archivos!!!
DESDE YA MUCHAS GRACIAS

Carlos Andrés
09/06/2008
9:34 pm

Todo me funciona, pero ahora estoy integrando el editor TinyMCE y no logro poder que el mensaje me vaya con al correo, como hago eso?

la variable del campo es mensaje, pero para que funcione el TinyMCE debe ser elm1

que hago???

10/06/2008
1:58 pm

gracias!!

justo lo que necesitaba.

Betzabe Salas
23/06/2008
11:26 am

Hola he tenido un pequeño problema con el uso de la Clase y es que al enviar los mail, estos llegan al destinatario como spam. COmo puedo solucionarlo. Gracias

02/07/2008
9:25 pm

Hola todos quisiera utilizar este formulario y ponerle mas text box pues necesito recolectar mas informacion como empresa pais y ciudad intente agregarlos ,no me funciona por favor quien sepa cual es la solucion. les agradecemos

David
07/07/2008
2:56 pm

Y si quiero agregar 2 campos mas el de NOMBRE y el de EMAIL como se hace para que tambien me lleguen a mi correo? gracias buenaaweb
!!

Enviar Comentario

(*)

(*)