Código de PHP - Formulario de contacto con adjuntos

Imágen de perfil

Formulario de contacto con adjuntosgráfica de visualizaciones


PHP

estrellaestrellaestrellaestrellaestrella(35)
Actualizado el 04 de Febrero del 2015 por Argimiro (Creado el 03 de Febrero del 2015)
19.073 visualizaciones desde el 03 de Febrero del 2015. Una media de 203 por semana
Formulario de contacto con validación, desarrollado en HTML5, PHP y CSS. Permite cargar archivo adjunto y ser enviado a email.

formulario-contacto

Requerimientos

php 5

1.0
estrellaestrellaestrellaestrellaestrella(35)

Actualizado el 04 de Febrero del 2015 (Creado el 03 de Febrero del 2015)gráfica de visualizaciones de la versión: 1.0
19.074 visualizaciones desde el 03 de Febrero del 2015. Una media de 203 por semana
estrellaestrellaestrellaestrellaestrella
estrellaestrellaestrellaestrella
estrellaestrellaestrella
estrellaestrella
estrella

HMTL

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
    <head xmlns="http://www.w3.org/1999/xhtml">
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>Rellene el formulario</title>
        <link rel="stylesheet" href="assets/estilo.css" type="text/css">
    </head>
    <body>
        <form name='formulario' class="contact_form" id='formulario' method='post' action='assets/enviar_email.php' enctype="multipart/form-data">
            <div>
                <ul>
                <li>
                    <h2>Contácto</h2>
                    <span class="required_notification">* Datos requeridos</span>
                </li>
 
 
            <li>
                <label for="name">Nombre:</label>
                <input type='text' name='Nombre' id='Nombre' placeholder="Nombre" required>
                <span class="form_hint">Formato correcto: "Nombre (s)"</span>
            </li>
            <li>
                <label for="apellidos">Apellidos:</label>
                <input type='text' name='Apellidos' id='Apellidos' placeholder="Apellidos" required>
                <span class="form_hint">Formato correcto: "Apellidos"</span>
            </li>
            <li>
            <label for="telefono">Teléfono:</label>
            <input type='text' name='Telefono' id='Telefono' placeholder="Teléfono">
            <span class="form_hint">Formato correcto: "55-5555-5555 (10 digitos)"</span>
            </li>
            <li>
                <label for="email">E-mail:</label>
                <input type='text' name='E-mail' id='E-mail' placeholder="tu@correo.com" required>
                <span class="form_hint">Formato correcto: "ejemplo@hotmail.com"</span>
            </li>
            <li>
                    <label for="message">Mensaje:</label>
                    <textarea name="mensaje" cols="40" rows="6" placeholder="Ingresa un mensaje (opcional)"></textarea>
                    <span class="form_hint">Ingresar información adicional</span>
 
                </li>
            <li>
                <label for="adjuntar archivo">Adjuntar archivo:</label>
                <input type='file' name='archivo1' id='archivo1' placeholder="carga tu boucher" required>
            </li>
            <li align='center'>
                <button class="submit" type='submit' value='Enviar formulario'>Enviar Mensaje</button>
                <button class="submit" type='reset' value='Reiniiar formulario'>Borrar Datos</button>
 
            </li>
            </ul>
        </form>
    </body>
</html>

PHP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
<?php
 
 
    function form_mail($sPara, $sAsunto, $sTexto, $sDe)
    {
 
        $bHayFicheros = 0;
        $sCabeceraTexto = "";
        $sAdjuntos = "";
        $sCuerpo = $sTexto;
        $sSeparador = uniqid("_Separador-de-datos_");
 
        $sCabeceras = "MIME-version: 1.0\n";
 
        // Recogemos los campos del formulario 
        foreach ($_POST as $sNombre => $sValor)
            $sCuerpo = $sCuerpo."\n".$sNombre." = ".$sValor;
 
        // Recorremos los Ficheros 
        foreach ($_FILES as $vAdjunto)
        {
 
            if ($bHayFicheros == 0)
            {
 
                // Hay ficheros 
 
                $bHayFicheros = 1;
 
                // Cabeceras generales del mail 
                $sCabeceras .= "Content-type: multipart/mixed;";
                $sCabeceras .= "boundary=\"".$sSeparador."\"\n";
 
                // Cabeceras del texto 
                $sCabeceraTexto = "--".$sSeparador."\n";
                $sCabeceraTexto .= "Content-type: text/plain;charset=iso-8859-1\n";
                $sCabeceraTexto .= "Content-transfer-encoding: 7BIT\n\n";
 
                $sCuerpo = $sCabeceraTexto.$sCuerpo;
 
            }
 
            // Se añade el fichero 
            if ($vAdjunto["size"] > 0)
            {
                $sAdjuntos .= "\n\n--".$sSeparador."\n";
                $sAdjuntos .= "Content-type: ".$vAdjunto["type"].";name=\"".$vAdjunto["name"]."\"\n";
                $sAdjuntos .= "Content-Transfer-Encoding: BASE64\n";
                $sAdjuntos .= "Content-disposition: attachment;filename=\"".$vAdjunto["name"]."\"\n\n";
 
                $oFichero = fopen($vAdjunto["tmp_name"], 'rb');
                $sContenido = fread($oFichero, filesize($vAdjunto["tmp_name"]));
                $sAdjuntos .= chunk_split(base64_encode($sContenido));
                fclose($oFichero);
            }
 
        }
 
        // Si hay ficheros se añaden al cuerpo 
        if ($bHayFicheros)
            $sCuerpo .= $sAdjuntos."\n\n--".$sSeparador."--\n";
 
        // Se añade la cabecera de destinatario 
        if ($sDe)$sCabeceras .= "From:".$sDe."\n";
 
        // Por último se envia el mail 
        return(mail($sPara, $sAsunto, $sCuerpo, $sCabeceras));
    }
 
        //Ejemplo de como usar: 
        if (form_mail("mailrecipiente@tudominio.com",
                                    "El nombre del remitente",
                                    "Los datos introducidos en el formulario son:\n",
                                    "tumail@tudominio.com"))
        echo "Su formulario ha sido enviado con exito";
 
        // Ejemplo de como usar, poniendo como remitente el campo pasado de E-mail 
        /* 
        if (form_mail("usuario_destino@dominio.com", 
                                    "Activación de formulario", 
                                    "Los datos introducidos en el formulario son:\n", 
                                    $_POST["E-mail"])) 
        echo "Su formulario ha sido enviado con exito"; 
        */ 
 
        //Argimiro Cruz.*/
 
 
?>

CSS

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
/* === Remove input autofocus webkit === */
*:focus {
    outline: none;
}
 
/* === Form Typography === */
body {
    font: 13px/21px "Lucida Sans", "Lucida Grande", "Lucida Sans Unicode", sans-serif;
}
 
.contact_form h2, .contact_form label {
    font-family: Georgia, Times, "Times New Roman", serif;
}
 
.form_hint, .required_notification {
    font-size: 11px;
}
 
/* === List Styles === */
.contact_form ul {
    width: 750px;
    list-style-type: none;
    list-style-position: outside;
    margin: 0px;
    padding: 0px;
}
 
.contact_form li {
    padding: 12px;
    border-bottom: 1px solid #eee;
    position: relative;
}
 
    .contact_form li:first-child, .contact_form li:last-child {
        border-bottom: 1px solid #777;
    }
 
/* === Form Header === */
.contact_form h2 {
    margin: 0;
    display: inline;
}
 
.required_notification {
    color: #d45252;
    margin: 5px 0 0 0;
    display: inline;
    float: right;
}
 
/* === Form Elements === */
.contact_form label {
    width: 150px;
    margin-top: 3px;
    display: inline-block;
    float: left;
    padding: 3px;
}
 
.contact_form input {
    height: 20px;
    width: 220px;
    padding: 5px 8px;
}
 
.contact_form textarea {
    padding: 8px;
    width: 300px;
}
 
.contact_form button {
    margin-left: 156px;
}
 
/* form element visual styles */
.contact_form input, .contact_form textarea {
    border: 1px solid #aaa;
    box-shadow: 0px 0px 3px #ccc, 0 10px 15px #eee inset;
    border-radius: 2px;
    padding-right: 30px;
    -moz-transition: padding .25s;
    -webkit-transition: padding .25s;
    -o-transition: padding .25s;
    transition: padding .25s;
}
 
    .contact_form input:focus, .contact_form textarea:focus {
        background: #fff;
        border: 1px solid #555;
        box-shadow: 0 0 3px #aaa;
        padding-right: 70px;
    }
 
    /* === HTML5 validation styles === */
    .contact_form input:required, .contact_form textarea:required {
        background: #fff url(images/red_asterisk.png) no-repeat 98% center;
    }
 
        .contact_form input:required:valid, .contact_form textarea:required:valid {
            background: #fff url(images/valid.png) no-repeat 98% center;
            box-shadow: 0 0 5px #5cd053;
            border-color: #28921f;
        }
 
    .contact_form input:focus:invalid, .contact_form textarea:focus:invalid {
        background: #fff url(images/invalid.png) no-repeat 98% center;
        box-shadow: 0 0 5px #d45252;
        border-color: #b03535;
    }
 
/* === Form hints === */
.form_hint {
    background: #d45252;
    border-radius: 3px 3px 3px 3px;
    color: white;
    margin-left: 8px;
    padding: 1px 6px;
    z-index: 999; /* hints stay above all other elements */
    position: absolute; /* allows proper formatting if hint is two lines */
    display: none;
}
 
    .form_hint::before {
        content: "\25C0";
        color: #d45252;
        position: absolute;
        top: 1px;
        left: -6px;
    }
 
.contact_form input:focus + .form_hint {
    display: inline;
}
 
.contact_form input:required:valid + .form_hint {
    background: #28921f;
}
 
    .contact_form input:required:valid + .form_hint::before {
        color: #28921f;
    }
 
/* === Button Style === */
button.submit {
    background-color: #68b12f;
    background: -webkit-gradient(linear, left top, left bottom, from(#68b12f), to(#50911e));
    background: -webkit-linear-gradient(top, #68b12f, #50911e);
    background: -moz-linear-gradient(top, #68b12f, #50911e);
    background: -ms-linear-gradient(top, #68b12f, #50911e);
    background: -o-linear-gradient(top, #68b12f, #50911e);
    background: linear-gradient(top, #68b12f, #50911e);
    border: 1px solid #509111;
    border-bottom: 1px solid #5b992b;
    border-radius: 3px;
    -webkit-border-radius: 3px;
    -moz-border-radius: 3px;
    -ms-border-radius: 3px;
    -o-border-radius: 3px;
    box-shadow: inset 0 1px 0 0 #9fd574;
    -webkit-box-shadow: 0 1px 0 0 #9fd574 inset;
    -moz-box-shadow: 0 1px 0 0 #9fd574 inset;
    -ms-box-shadow: 0 1px 0 0 #9fd574 inset;
    -o-box-shadow: 0 1px 0 0 #9fd574 inset;
    color: white;
    font-weight: bold;
    padding: 6px 20px;
    text-align: center;
    text-shadow: 0 -1px 0 #396715;
}
 
    button.submit:hover {
        opacity: .85;
        cursor: pointer;
    }
 
    button.submit:active {
        border: 1px solid #20911e;
        box-shadow: 0 0 10px 5px #356b0b inset;
        -webkit-box-shadow: 0 0 10px 5px #356b0b inset;
        -moz-box-shadow: 0 0 10px 5px #356b0b inset;
        -ms-box-shadow: 0 0 10px 5px #356b0b inset;
        -o-box-shadow: 0 0 10px 5px #356b0b inset;
    }

Si alguno de los archivos de descarga no funciona, comentanos aquí el error.




Comentarios sobre la versión: 1.0 (35)

daniel
13 de Febrero del 2015
estrellaestrellaestrellaestrellaestrella
Que tal amigo buenas noches en verdad es un aporte muy bueno e interezante, en mi caso soy nuevo en desarrollo web por lo que mi pregunta es, si podrias explicar como hacer uso de este formulario, gracias en vdd
Responder
Luis
13 de Febrero del 2015
estrellaestrellaestrellaestrellaestrella
Hola amigo, gracias por compartir sus conocimientos, está excelente su codigo. Tengo dos consultas, como haria para que no fuera obligatorio enviar archivos adjuntos, y tambien una vez enviado el formulario que lo redirecciones a la misma página de contactos.

Muchas gracias.
Responder
Imágen de perfil
Argimiro
14 de Febrero del 2015
estrellaestrellaestrellaestrellaestrella
Buen día amigo, agradezco tu comentario, para no hacer forzado el envió de adjuntos, en la linea:

<input type='file' name='archivo1' id='archivo1' placeholder="carga tu boucher" required>


solo debes quitar el atributo required.

Saludos
Responder
Luis
14 de Enero del 2016
estrellaestrellaestrellaestrellaestrella
He implementado el aporte a un proyecto que estoy realizando pero, no me envía el archivo adjunto al email. no he cambiado nada del código excepto los datos de mi email.Espero tu respuesta y ayuda.

Gracias!
Responder
juan
17 de Febrero del 2015
estrellaestrellaestrellaestrellaestrella
Disculpa en el codigo php en que linea debo poner el correo al que se enviara el formulario?
Responder
Imágen de perfil
Argimiro
17 de Febrero del 2015
estrellaestrellaestrellaestrellaestrella
Al final del php tienes dos opciones, la segunda viene comentada para que no funcione, de acuerdo a lo que desees puedes usar cualquiera de esas dos opciones, en la primera ya asignas un correo de destino y otro de salida fijo, en el segundo toma el recurso del formulario y es con el que se enmascara. Saludos
Responder
felipe
15 de Octubre del 2016
estrellaestrellaestrellaestrellaestrella
Primero que nada gracias por el formulario.
Como agregar mas secciones de envio de archivos? es decir en ves de 1 por ejemplo 5 fotos
y si es posible programar el envio a dos emails??
Gracias
Responder
Imágen de perfil
Miguel Angel
20 de Febrero del 2015
estrellaestrellaestrellaestrellaestrella
Gracia amigo está perfecto tu formulario felicidades, excelente aporte, podrìas decirme como agregarle una imagen de fondo para hacerlo mas atractivo?.

Saludos.
Responder
soto
26 de Febrero del 2015
estrellaestrellaestrellaestrellaestrella
amigo para volver al html use el header('location: http://.....) en la lindea despues del echo""" , pero no me retorna , porque ?
Responder
Bryan
18 de Marzo del 2015
estrellaestrellaestrellaestrellaestrella
Hola sabes que esta genial tu aporte pero te queria pedir una ayuda, sabes que estoy tratando de crear un programa y esto es un item de eso, si no te molesta puedo ocuparlo, si es asi me podrias ayudar con el tema como hago que cuando se llene me llegue al correo porfa, es que estoy iniciando en esto, tengo nociones basicas, espero puedas ayudarme y gracias
Responder
mary
24 de Abril del 2015
estrellaestrellaestrellaestrellaestrella
muy interesante código soy nueva en esto; pero mi pregunta donde esta llamando las variables que están en el archivo html dentro el archivo .php gracias
Responder
willy chen
13 de Mayo del 2015
estrellaestrellaestrellaestrellaestrella
hola amigo muy buena tu creatividad y aporte, sabes tome todo lo que dices pero he puesto 3 veces mi correo en lo ultimo del php... y dice formulario se ha enviado con exito, pero nunca me llega nada al correo.. de verdad te agradezco si me ayudas por favor
Responder
willy chen
13 de Mayo del 2015
estrellaestrellaestrellaestrellaestrella
si me lo puedes hacer personalizado tal cual como lo tienes.. con mi correo william_978@hotmail.com y enviarmelo alli.

se le sabria agradecer.

Dios te Bendiga
Responder
willy chen
13 de Mayo del 2015
estrellaestrellaestrellaestrellaestrella
hermano tambien me sale esto:
cuando cambio el correo aunque sigue sin llegar a mi correo la informacion


function form_mail($sPara, $sAsunto, $sTexto, $sDe)
{
Responder
Andres
14 de Mayo del 2015
estrellaestrellaestrellaestrellaestrella
Gracias brother!, excelente codigo, funciona de maravilla!
Responder
Andres Orduz
15 de Mayo del 2015
estrellaestrellaestrellaestrellaestrella
Willy chen tienes que declarar las variables que llegan del formulario.

Ejemplo:
$sPara = $_POST['email'];
$sAsunto = $_POST['asunto'];
$sTexto = $_POST['sTexto'];
$sDe = $_POST['quienenvia'];

function form_mail($sPara, $sAsunto, $sTexto, $sDe)
{//aqui va lo que quieras hacer de mas!
mail($sPara, $sAsunto, $sCuerpo, $sCabeceras); }
Responder
maria
17 de Julio del 2015
estrellaestrellaestrellaestrellaestrella
copie el codigo llega al correo pero asi llega
nombre = sgf
profesion = hfdgh
celular = fghf
email = dfgh
adjunto = PLANILLA.pdf
subir =


no adjunta archivo solo coloca el nombre
Responder
Luis
20 de Julio del 2015
estrellaestrellaestrellaestrellaestrella
Buena publicación me gustaria que realices un formulario del mismo tipo solo que agregando restricciones de texto, asi como: la edad, fecha de nacimiento, cantidad de archivos que puede enviar un usuario y eso, gracias.
Responder
Juan Garcia
09 de Agosto del 2015
estrellaestrellaestrellaestrellaestrella
Hola muchas gracias funciona de maravilla y lo he personalizado con fechas de nacimiento en el boostrap necesitaba la carga de archivos esta muy bueno
Gracias
Responder
Josue Rodriguez
09 de Septiembre del 2015
estrellaestrellaestrellaestrellaestrella
Hola, Amigo me gustaría que me ayudaras sacándome de un gran apuro,
Mira yo quiero cambiarle la variable de
<input type='file' name='archivo1' id='archivo1' placeholder="carga tu boucher" required>

Me gustaria que sea asi:
<input type='file' name='archivo1[]' id='archivo1[]' placeholder="carga tu boucher" required>

Poniéndole al ID y Name "[]"
porque lo estoy haciendo combinado que guarde en DB Y Correo pero el DB ya lo tengo con ese input emtc no me envia el archivo adjunto.
De antemano muchas gracias de verdad me sacarías de un gran apuro.
Responder
Rakel
25 de Noviembre del 2015
estrellaestrellaestrellaestrellaestrella
Excelente el código y claramente explicado. Pero me da un fallo a la hora de subir archivos, sólo me deja subir archivos .jpg

Necesito que se puedan subir archivos de Word. Puede ayudarme, Argimiro?

Muchísimas gracias.
Responder
DARZ
14 de Enero del 2016
estrellaestrellaestrellaestrellaestrella
Si quisiera poner otro archivo adjunto, como lo hago... Muchas Gracias
Responder
Ali
30 de Marzo del 2016
estrellaestrellaestrellaestrellaestrella
¿Donde es que va el correo a donde llega el formulario?
Responder
Andrés Eduardo García Márquez
14 de Mayo del 2016
estrellaestrellaestrellaestrellaestrella
ya descubri el punto que falta al código gracias por todo andresgarcia0313@gmail.com
Responder
alejandro
24 de Mayo del 2016
estrellaestrellaestrellaestrellaestrella
He copiado el código tal cual y me llegan al correo todos los campos que deseo, menos el archivo adjunto.

¿Pueden decir por qué no recibo los archivos adjuntos?

Un saludo, gracias.
Responder
JOSÉ LUIS
09 de Junio del 2016
estrellaestrellaestrellaestrellaestrella
Gracias, lo he probado y todo funciona muy bien, lo unico es que si cambio "tumail@tudominio.com" por mi direccion email real, ya no recibo nada, si dejo "tumail@tudominio.com" funciona correctamente.

Otra cosa, como puedo cambiar para que no aparezca la informacion de telefono 55-55555 etc,
Responder
Everardo
30 de Junio del 2016
estrellaestrellaestrellaestrellaestrella
al realizar la carga al servidor u mandar el correo sale el error Not Found [CFN #0005]

alguien que me pueda apoyar
Responder
Laura
23 de Septiembre del 2016
estrellaestrellaestrellaestrellaestrella
Hola Everardo , de casualidad supiste por que te sale este error... yo no tengo este codigo pero yo hice un formulario y en el hosting donde esta hospedado mi cliente le sale ese error, y yo tengo un hosting diferente y no tengo ese problema.
Responder
Pedro
14 de Julio del 2016
estrellaestrellaestrellaestrellaestrella
El código me ha ido genial, lo he ampliado con otros campos y funciona a la mil maravillas.
Lo que me ocurre es que, aún estando los campos en "required", si no rellenas nada en ese campo se envía igualmente. Todo lo demás me ha funcionado perfecto.
Muchas gracias
Responder
David Gonzalez
19 de Julio del 2016
estrellaestrellaestrellaestrellaestrella
Todo funciona correctamente, el problema que me ocurre es que al abrir el correo el archivo adjunto no se puede visualizar (en el caso de imagenes) y los pdf no se abren, dice que es un archivo corrupto, muchas gracias.
Responder
lisbesbeth
25 de Julio del 2016
estrellaestrellaestrellaestrellaestrella
funciona, pero mi pregunta solo envia a un correo :

//Ejemplo de como usar:
if (form_mail("mailrecipiente@tudominio.com",
"El nombre del remitente",
"Los datos introducidos en el formulario son:\n",
"tumail@tudominio.com"))
echo "Su formulario ha sido enviado con exito";

si quiero enviar a diferentes correos como hago sin estar cambiando el dodigo que te muestro adelante
Responder
ssd
02 de Agosto del 2016
estrellaestrellaestrellaestrellaestrella
No ha dejado ningún comentario
Responder
LUIS
01 de Septiembre del 2016
estrellaestrellaestrellaestrellaestrella
Hola , me gustaría saber como puedo agregar dos ficheros , que dos archivos se manden , gracias por tu ayuda , saludos
Responder
daniel
14 de Septiembre del 2016
estrellaestrellaestrellaestrellaestrella
buenas amigo. excelente aporte. me gustaria que el formulario le llegara a 3 destinatarios y poder enviar mas archivos adjuntos. desde ya gracias
Responder
Dagon
16 de Septiembre del 2016
estrellaestrellaestrellaestrellaestrella
Hola estimados amigos, todo esta muy bien pero me gustaria colocar un formulario igual a este en blogger, alguien podria ayudarme, muchas gracias.
Responder

Comentar la versión: 1.0

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios

http://lwp-l.com/s3029