[ View menu ]
15 Oct 07

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.

41 Comentarios

  1. Dijo David Alexander Arce:

    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,

    17 Octubre 2007 @ 14:56
  2. Dijo javier:

    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

    29 Octubre 2007 @ 5:45
  3. Dijo Alfonso:

    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!

    29 Octubre 2007 @ 17:45
  4. Dijo Christian:

    Hola, como se puede hacer para agregarle mas campos al formulario?

    7 Noviembre 2007 @ 13:08
  5. Dijo Christian:

    En realidad lo que necesito es poder agregar otro upload de archivo mas , gracias!! sos un genio!

    7 Noviembre 2007 @ 13:57
  6. Dijo carlos varas:

    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.

    14 Noviembre 2007 @ 21:58
  7. Dijo Manuel:

    Funciona de maravilla, pero quisiera que adjuntar archivos sea un opcional y no requerido, si me echas una mano, gracisa de antemano.

    25 Noviembre 2007 @ 22:17
  8. Dijo javier:

    Hola, tengo una duda sobre el formulario. ¿Como hago apra que la opcion de adjuntar un archivo, sea opcional?

    Gracias

    28 Noviembre 2007 @ 13:14
  9. Dijo Joan:

    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

    2 Diciembre 2007 @ 8:00
  10. Dijo ignacio:

    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

    4 Diciembre 2007 @ 17:49
  11. Dijo ronaldo:

    ¿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

    11 Enero 2008 @ 13:00
  12. Dijo Alfonso:

    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

    17 Enero 2008 @ 8:27
  13. Dijo ronaldo:

    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

    18 Enero 2008 @ 12:12
  14. Dijo Alfonso:

    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

    18 Enero 2008 @ 12:23
  15. Dijo ronaldo:

    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

    19 Enero 2008 @ 4:23
  16. Dijo ronaldo:

    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

    31 Enero 2008 @ 9:47
  17. Dijo Alfonso:

    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

    1 Febrero 2008 @ 10:16
  18. Dijo gohan:

    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.

    1 Febrero 2008 @ 11:43
  19. Dijo gohan:

    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

    1 Febrero 2008 @ 11:46
  20. Dijo gohan:

    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

    1 Febrero 2008 @ 12:28
  21. Dijo Alfonso:

    hola gohan, ese formulario esta muy modificado, estas levantando por POST todos los campos que agregaste?

    1 Febrero 2008 @ 12:35
  22. Dijo ronaldo:

    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

    1 Febrero 2008 @ 13:40
  23. Dijo gohan:

    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 .= ”;

    1 Febrero 2008 @ 13:50
  24. Dijo gohan:

    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 .= ”;

    1 Febrero 2008 @ 14:12
  25. Dijo gohan:

    :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

    1 Febrero 2008 @ 16:15
  26. Dijo Francisco:

    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…..

    8 Febrero 2008 @ 20:16
  27. Dijo alcazar:

    Muchisimas gracias por tu aportación, llevaba varios días dándole vueltas hasta que he encontrado tu página con tu maravilloso formulario.

    12 Febrero 2008 @ 3:38
  28. Dijo Fernando:

    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

    13 Febrero 2008 @ 0:58
  29. Dijo Alfonso:

    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.

    13 Febrero 2008 @ 8:26
  30. Dijo Rodolfo:

    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.

    21 Febrero 2008 @ 10:18
  31. Dijo Rodolfo:

    PD: Cuando es necesario autenticar el SMTP ???

    21 Febrero 2008 @ 10:43
  32. Dijo criet:

    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.

    7 Marzo 2008 @ 20:32
  33. Dijo Lautaro:

    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

    28 Marzo 2008 @ 14:25
  34. Dijo nata:

    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)

    28 Abril 2008 @ 5:24
  35. Dijo Carlos:

    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

    7 Mayo 2008 @ 22:53
  36. Dijo elo:

    muy weno el form de contacto agradecido

    20 Mayo 2008 @ 13:04
  37. Dijo José Ricardo Rojas Castro:

    Muchas gracias por el código php, me funciona excelente.

    Ricardo Rojas.

    10 Junio 2008 @ 20:58
  38. Dijo Hola alfonso:

    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?

    12 Junio 2008 @ 13:31
  39. Dijo Angel Medina Palomares:

    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.

    13 Junio 2008 @ 16:31
  40. Dijo José Ricardo Rojas Castro:

    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

    16 Junio 2008 @ 21:34
  41. Dijo José Ricardo Rojas Castro:

    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.

    16 Junio 2008 @ 21:41