Enviar Email con Adjuntos
- 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.

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:
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.
-
require("class.phpmailer.php");
-
if ($_POST['action'] == "send") {
-
$varname = $_FILES['archivo']['name'];
-
$vartemp = $_FILES['archivo']['tmp_name'];
-
-
$mail = new PHPMailer();
-
$mail->Host = "localhost";
-
$mail->From = "blog@unijimpe.net";
-
$mail->FromName = "Blog Unijimpe";
-
$mail->Subject = $_POST['asunto'];
-
$mail->AddAddress($_POST['destino']);
-
if ($varname != "") {
-
$mail->AddAttachment($vartemp, $varname);
-
}
-
$body = "<strong>Mensaje</strong><br><br>";
-
$body.= $_POST['mensaje']."<br>";
-
$body.= "<i>Enviado por http://blog.unijimpe.net</i>";
-
$mail->Body = $body;
-
$mail->IsHTML(true);
-
$mail->Send();
-
}
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
- Envíar E-mail con PHP
- Introducción a PHPMailer
- Enviar email multiple con PHP
- Javascript: Evitar doble Submit
- Enviar email con Flash y PHP
Total de Comentarios: 40
http://www.blogdelsur.com.ar/?p=36
Excelente tuto, ya lo recomendamos en el blog!!
aha cheve programacion
muy bueno salu2
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.
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.
Que buen blog, lo corri y funciona a la perfecccion, gracias y felicidades..
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
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.
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'];
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.
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
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:
[...] 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. [...]
[...] 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. [...]
[...] 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. [...]
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
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/
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
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
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
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
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.
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.
:)
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
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.
muy bueno tu blog socio…
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
me encanta este blog
I love it……
conecting and you can speak whit me…..
bye
como hago si el archivo que queiro enviar lo tengo fijo en el servidor y no es variable desde el form?
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.
me funciona perfectamente,,pero me sumo a la pregunta de como adjuntar dos o mas archivos!!!
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????
me funciona perfectamente el codigo,,pero me sumo a la pregunta de como adjuntar dos o mas archivos!!!
DESDE YA MUCHAS GRACIAS
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???
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
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
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
!!


