Formulario de Contacto PHP Gratis v3: Adjuntar archivo al mail
Acá va otro update del formulario de contacto en PHP. La nueva funcionalidad permite cargar un archivo y enviarlo como attachment del email usando PHP. Esta versión es en realidad una actualización de la v2. Ahora, además de copiar el archivo en el servidor y enviar el link al archivo en el mail, el script va a enviar el mail adjuntando el archivo del usuario.
Para agregar esta funcionalidad, el formulario utiliza la clase PHPMailer para el envío y proceso. La clase PHPMailer es un script PHP que permite infinitos usos a la hora de procesar envíos de mails con PHP. Se puede usar un determinado servidor SMTP, adjuntar archivos,
Es solo un ejemplo de una posible implementacion de PHPMailer
La clase se puede descargar desde http://phpmailer.sourceforge.net/ Junto con mas ejemplos y documentacion.
La configuración es muy sencilla, sólo deben descomprimir los archivos y editar las primeras lineas del archivo contactenos-v3.php. Luego deben crear una carpeta llamada “archivos”, y asignarle CHMOD 777. Hay que mantener el archivo class.phpmailer.php en el mismo directorio. El archivo class.smtp.php nos va a permitir realizar configuraciones adicionales, como utilizar otros servidores SMTP llegado el caso.
—————————————-
ACTUALIZACION 17-01-2008
Debido a varias preguntas, he subido una versión del formulario que no valida los campos, ni el tamaño, ni el formato del archivo.
—————————————-
Ejemplos:
Formulario para envio de mail con archivo adjunto. (con validación de datos)
Formulario para envio de mail con archivo adjunto. (SIN validación de datos)
Descargar:
contactenos-v3.zip (con validación de datos)
contactenos V3.1.zip (sin validación de datos)
Espero que les sirva.
Categorías: PHP.
Amigo… no se que decirte, solo que eres un master !! Por mucho tiempo busque un formulario como este y al fin lo encontre.
Todo funciona a la perfección, ya lo he montado y probado en mi sitio y funciona excelente, te felicito y te agradezco mucho por esta aportación tan importante.
Talves más adelante nos enseñas a crear ese verificador de código para evitar que robots automáticos envien spam. (ese que tu llamas “humano?”) por cierto muy original.
Saludos,
Buenas, te estoy agradecido por este ejemplo pero….necesito autenticar el smtp(una de las propiedades de phpmailer) y me es imposible.
Tienes alguna solución para usar este mismo ejemplo phpmailer autenticando smtp.
Gracias
hola Javier,
si, para autenticar SMTP, tenes que agregarle al script las siguentes lineas:
$mail->SMTPAuth = “true”;
$mail->Host = “mail.youdomain.com”; //Your SMTP mail server
$mail->Username = “User”; //
$mail->Password = “Pwd”;
las podes poner despues de la linea 40.
avisame si te funciona. Un saludo!
Hola, como se puede hacer para agregarle mas campos al formulario?
En realidad lo que necesito es poder agregar otro upload de archivo mas , gracias!! sos un genio!
recien acabo de encontrar esta pagina y la busque por dias y dias, espero que me ayude a mi problema, ya que hice mas de dies formularios de envios en php pero no consigo que lleguen ni siquiera a un lugar de la pagina, y como veo creo que va a resultar.
gracias y estare respondiendo y felicitando si funciona otro dia.
Funciona de maravilla, pero quisiera que adjuntar archivos sea un opcional y no requerido, si me echas una mano, gracisa de antemano.
Hola, tengo una duda sobre el formulario. ¿Como hago apra que la opcion de adjuntar un archivo, sea opcional?
Gracias
Hola. Ante todo gracias por compartir vuestros conocimientos con los que no llegamos. He realizado este formulario y me llega a mi correo con los archivos y el comentario pero los campos de nombre y e-mail llegan siempre vacíos
¿Qué debo de cambiar o agregar? Por favor necesito ayuda
Mil Gracias
Joan
me podria auxiliar me aparece este error
Warning: copy(archivos/BRISA-1916033647.doc) [function.copy]: failed to open stream: No such file or directory in /home/mexiquensc/domains/mexiquenseweb.com/public_html/britosjeans/archivos/contactenos-v3.php on line 101
al momento de enviarlo y si llega el mail, y el link de descarga pero no baja nada
¿Se pueden adjuntar archivos de audio? como…?
El formulario me funciona de maravilla el unico problema es que no se como adjuntar archivos mp3
Gracias anticipadas
Christian:
Para agregar otro upload de archivo mas hay que modificar el código un poco. Habría que hacer un for…each para cada uno de los campos. Lo ideal seria agregarle un “Añadir otro archivo” como tiene gmail con un poco de ajax. La próxima versión del formulario seguramente va a ser esa.
Ignacio:
El error “Warning: copy(archivos/BRISA-1916033647.doc) [function.copy]: failed to open stream: No such file or directory in….” puede ser por dos motivos, o no creaste la carpeta “archivos”, que tiene que acompañar al script de formulario. O la carpeta existe pero no tiene permisos de escritura (chmod 777 o 666, según el servidor)
Joan:
Si te llegan campos vacíos es probable que hayas modificado algo en el código. Revisalo por las dudas, o descargalo de nuevo para probarlo.
Manuel y Javier, Ronaldo: acabo de subir una versión que no valida los campos ni la extensión del archivo. De esa forma se puede enviar cualquier formato/tramaño de archivo, y se pueden dejar campos vacíos.
Pueden descargar la version 3.1 del formulario
Alfonso, gracias de antemano por contestarme, he probado la nueva version (V3.1)que has puesto en tu blog y cuando intento adjuntar un archivo mp3 me sale esto:
Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate 9155257 bytes) in /var/www/vhost/gestiongrafica.net/home/html/paco/class.phpmailer.php on line 1111
Un saludo y perdona mi insistencia
Hola Ronaldo, estas intentando subir un archivo muy grande? suena a que es un problema de memoria de PHP. Tenes que ampliar el limite de memoria en php.ini. Es la variable llamada “memory_limit”. Se ve que lo tenes puesto en 8mb
Efectivamente… el archivo no es muy grande unos tres megas y pico lo que pasa es que el servidor no los admite porque he probado con un archivo mas pequeño y si que me lo envia… los que pasa es que el host es de pago y no puedo tocar el php.ini pero eso es ya otra historia… solo quiero agradecerte el magnifico formulario que has puesto en la red y la atencion que me has prestado…
Un saludo
Hola Alfonso, sou el pesado de Ronaldo…
al final resulta que mi correo no admite tanto tamaño pero sin embargo si que me sube los archivos de sonido a la carpeta “archivos” mi pregunta es la siguiente..
¿es posible que en vez de que te lleguen los archivos al correo te llegue un aviso (o link) de que te han subido los archivos?
Gracias anticipadas
Hola Ronaldo! como andas?
nada de pesado, todo bien che.
Podes probar la version 2 del formulario:
http://www.alfonsocatron.com.ar/2007/08/26/formulario-de-contacto-php-gratis-v2-permitir-al-usuario-enviar-un-archivo/
Esa version sube el archivo al server y solo pone en el mail un link para descarga, tal vez te sirve.
Avisame si te sirve
muchisimas gracias por publicar este script, me funciono a la perfeccion para el envio de imagenes adjuntas, ahora tengo un problema y es que llegan los adjuntos pero no llegan los datos, me gustaria saber si me puedes colaborar con al parte del script en donde le agrego ciertas lineas para que me lleguen todos los campos que se llenan, el formulario en cuestion es el siguiente: http://www.conexionesdenegocios.com/prueba/afiliaciones02.php, de ante mano agradezco la colaboracion y espero respuesta.
psdt. y la forma en que se genera que no se corra la pagina cuando sale la pagina de agradecimiento por enviar el formulario. gracias
que pena tanta molestia, bueno despues de andar dandole al codigo, ya logre que no se me descuadrara del sitio cuando sale la parte de agradecimiento, pero de todas formas todavia no me salen los otros datos del formulario en el correo que llega, muchas gracias y espero respuesta
hola gohan, ese formulario esta muy modificado, estas levantando por POST todos los campos que agregaste?
Alfonso eres un genio… con la version v3 no me dejaba enviar los archivos a mi correo por falta de memoria (ya te lo comente) y con esta version si que puedo hacerlo… además estaba en un apuro y tu me los has solucionado.. darte las gracias es poco…
un abrazo y sigue asi
aca es donde toca marcar las variables que van a llegar y cero que ahi es donde esta el error, lo e buscado por todo lado y probando varias cosas y no lo hallo quizas vos me puedas hacer el favor de comentarme cual es el error, de antemano un agradecimiento infinito y espero respuesta.
//armamos el html
$contenido = ”;
$contenido .= ‘Formulario de afiliacion Conexiones de Negocios’;
$contenido .= ‘Enviado el ‘.date(”d M Y”).”;
$contenido .= ”;
$contenido .= ‘Ciudad:’.$ciudad.”;
$contenido .= ‘Nombre:’.$_POST['email']”;
$contenido .= ‘Email:’.$email.”;
$contenido .= ‘Archivo: ‘.$nuevonombre.’ (formato:’.$ext.’ - ‘.$tamano.’ bytes)‘;
$contenido .= ‘Nit:’.$Nit.”;
$contenido .= ”;
$contenido .= ”;
vieras que ahorita mirando me doy cuenta de que llega la imagen y el nombre pero tampoco llega ni la extension ni el tamaño :S:S:S:S creo que debe ser algo del post que vos dices, si algo adjunto el coodigo de nuevo y pos espero me puedas colaborar gracias.
//armamos el html
$contenido = ”;
$contenido .= ‘Formulario de afiliacion Conexiones de Negocios’;
$contenido .= ‘Enviado el ‘.date(”d M Y”).”;
$contenido .= ”;
$contenido .= ‘Fecha:’.$fecha.”;
$contenido .= ‘Ciudad:’.$ciudad.”;
$contenido .= ‘Nombre:’.$nombre.”;
$contenido .= ‘Nit:’.$nit.”;
$contenido .= ‘Email:’.$email.”;
$contenido .= ‘Archivo: ‘.$nuevonombre.’ (formato:’.$ext.’ - ‘.$tamano.’ bytes)‘;
$contenido .= ”;
$contenido .= ”;
:D:D:D muchisimas gracias por el ejemplo ya lo solucione muy vacana la asesoria espero seguir en contacto. un fraternal abrazo. :D:D :D
Estimado amigo, gracias por este gran aporte al mundo. Hoy por hoy, solo existe el afan de lucro en todo.
No soy experto, pues mi area son las leyes, pero estoy tratando de construir una pequeña web de mis servicios profesionales. El reporte que tengo es que el formulario en el navegador firefox, en el campo que se refiere a comentario se escribe en una linea recta al infinito y no en lineas a renglon aparte como si lo hace en el Internet explorer. Si esto solo esto ocurre en mi maquina, disculpe la impertinencia.
Otra inquietud, no puede diseñarse un formulario mediante el cual se pueda enviar un archivo adjunto como opción y también se pueda validar los campos como la version 3?
Puede incorporar la validación que tiene en este formulario que se refiere a “Humano”?
GRACIAS POR TODO…..
Muchisimas gracias por tu aportación, llevaba varios días dándole vueltas hasta que he encontrado tu página con tu maravilloso formulario.
Alfonso hay alguna forma de que lo envie direcctamente al mail que uno expecifica, sin querer copiarlo al servidor.???
1ro porque el servidor no me deja copiarlo a la carpeta archivo
2do porque si me llegan los datos al correo destino, hasta nombre completo del archivo adjuntado, pero NO lo adjunta!! 0 bytes!
Me gustaria no copiar al servidor los archivos adjuntados, que lineas tendria que modificar sin perder el formulario!
please help
gohan y alcazar: me alegro que les haya servido!
Francisco: gracias por el reporte. Lo estuve testeando en firefox mac y pc, pero no veo lo que me decis. Solo aparece la barra horizontal cuando se escribe una cadena de caracteres larga y sin espacios, pero eso es normal. ¿en que version de firefox lo estas usando?
Respecto a tus otras dos preguntas: si, se pueden hacer ambas cosas.
Para que adjuntar sea opcional, tenes que cambiar la linea 92:
if ($_POST['email']!=” && $_POST['nombre']!=” && $_POST['comentario']!=” && $error_archivo==”) {
por:
if ($_POST['email']!=” && $_POST['nombre']!=” && $_POST['comentario']!=”) {
Respecto a la validacion, si, se puede hacer, pero ya escapa la intencion de este formulario :)
Fernando: ¿por que no lo sube al server? ¿tenes problemas de permisos en las carpetas? Si se puede evitar copiar los archivos al servidor. tenes que comentar la linea 93:
copy($_FILES['archivo']['tmp_name'],’archivos/’.$nuevonombre);
y tenes que cambiar la linea 110:
$mail->AddAttachment(’archivos/’.$nuevonombre.”, $nuevonombre); // optional name
por:
$mail->AddAttachment($_FILES['archivo']['tmp_name'], $nuevonombre); // optional name
De todas maneras, tu servidor tiene que permitir la carga de archivos con PHP, yo revisaria eso primero.
un saludo.
hola alfonso :) , por lo leido en esta página podrias ayudarme muchisimo.
Mira, actualmente desarrollo un pequeño sistema para una empresa de mi ciudad y en la aplicacion me piden, en otras cosa, enviar los datos de un formulario con solicitudes a una BD y paralelamente deberia llegar un email al o los responsables de las solicitudes.
mi problema es el siguiente, el correo es interno, su SMTP 100.1.0.8, el dominio: cotel.bo, y cuando intente mandar correo con la funcion mail(), me daba mensajes de error como que no reconocia el dominio cotel.bo.
Cabe mencionar que la alpicacion esta instalada en mi equipo y deseo hacer pruebas mandandome email a mi correo interno que en mi caso es rodolfo.ramirez@cotel.bo
Soy principiante en esto del mundo PHP y lo poco que se y aplico es producto de haber leido tutoriales y manuales por lo tanto hay conceptos basicos que aun no me los conozco a la perfeccion, como por ejemplo: “Luego deben crear una carpeta llamada “archivos”, y asignarle CHMOD 777″.
Espero me puedas ayudar…un abrazo.
PD: Cuando es necesario autenticar el SMTP ???
gracias amigo por la ayuda lo he colocado y me sale un error en la parte de copy($_FILES['archivo']['tmp_name'],’archivos/’.$nuevonombre);
si a esto le coloco comentario si corre pero no envia a mi correo
nuze cual sera el problema pues yo quiero que se envie a mi correo y nop envia necesariamente tiene que ser un correo gmail o tambien puede ser en hotmail ……….. Haver si me dan una ayudita que aun soy novato en esto.
muy bueno el posteo, lo coloq, me figura q envio el formulario como ok, me sube el archivo en la carpeta archivos, pero no me envia el mail con el texto completado, la verdad que tmb estoy en un aprieto, y necesito el adjuntar, muchas gracias, muy bueno el posteo, si me podrias solucionar esto no se como podria agradecertelo, ya q seria muy importante para mi, gracias desde ya
hola, miren, he insertado el cuestionario y todo bien, pero tengo una enorme duda, no sé lo que es el chmod 777, o más bien, no logro saber como dar ese permiso pues una vez que tengo la carpeta en el servidor me dice que no puede cambiar los permisos.
un saludos y muchas gracias (espero contestación)
HOla amigo, este formulario corre excelente, solo tengo una duda, como puedo hacer para que los datos lleguen a 2 cuentas de correo? Es decir como esta este me corre de maravilla, pero necesito que los datos los reciban en 2 cuentas distinas. Gracias de antemano. Me has ayudado muchisimo
muy weno el form de contacto agradecido
Muchas gracias por el código php, me funciona excelente.
Ricardo Rojas.
Como se puede hacer para que el formulario tome los datos de un boton radial y de los que elegis el pais de procedencia del loco para que llegue al correo el pais que eligio en loco?
Hola, excelente informacion, habia estado trabajando con la opcion mail() a la perfeccion pero me surgio la necesidad de adaptar el formulario para que tambien adjunten archivos, bueno e probado las recomendaciones que das recibo el correo con todos los datos que llenas en el formulario, pero no me llega el adjunto, en el formulario me llega algo asi como una liga, bueno en torno a esto tengo una duda los correos que adjuntas te llegan igual que usando un cliente de correo normal o definitivamente los tienes que descargar del servidor como se propone un la version 3.1, por cierto apenas empiezo a manejar php asi que algunas cosas las desconozco gracias por excelenete publicasión.
El formulario me funciona al 100%, solamente que me llega una imagen al mi E-mail y necesito que me lleguen las 5. ¿Cómo hago?
Echén un vistazo a ver que le falta:
http://www.fullextras1.com/ejemplos/form-adjunto/contactenos-v3.php
Gracias.
Ricardo Rojas
Amigos, el CHMOD 777 yo lo modifique entrando al Cpanel de mi página web, encima de la carpeta Archivos clic derecho y clic en Modificar permisos, aparece una cajita con unos números Ej: 674, los borras y digitas 777. Lo que hace el número 777 es darle full permisos a la carpeta. Otra sería segun su Cpanel que al final de la línea, o sea; en la parte derecha de su monitor están los números Ej: 674, encima de estos números doble clic y le colocas 777 y enter. Suerte!!!!
Ricardo Rojas Castro
http://www.oficinacreativa.com
Palmares, Alajuela. Costa Rica.