Email con archivo adjunto PHP

Enviar correos electrónicos (email) con archivo adjunto mediante PHP es regularmente utilizado en los formularios web de las empresas.

Una opción que suena simple de realizar, pero en ocasiones se complica debido a la cantidad de información existente, que en muchas ocasiones ya no se encuentran funcionando.

En seguida veremos como realizar esta tarea sin tantas complicaciones, al final podrás descargar un ejemplo.

Archivo HTML

Creamos un archivo HTML desde cualquier editor de texto, agrega el contenido necesario del un sitio web, en el body el siguiente código.

<form id="form1" class="well col-lg-12" action="enviar.php" method="post" name="form1" enctype="multipart/form-data">
     <label>Nombre*</label>
     <input id="Nombre" type="text" name="Nombre" />

     <label>Email*</label>
     <input id="Email" type="email" name="Email" />

     <label>Mensaje*</label> 
     <textarea id="Mensaje" name="Mensaje" rows="4"></textarea>
     
     <label>archivo</label>
     <input type="file" name="adjunto" id="archivo-adjunto">

     <button type="submit">Enviar</button>
</form>

Como pueden ver el código anterior es para mostrar un formulario básico de contacto, ten en cuenta las siguientes partes importantes:

  • En el action del form se coloca el nombre del archivo php en donde se enviará la información del formulario.
  • Agregar un botón tipo submit que se encargara de realizar el post al archivo php.

El resultado del html anterior es como la que se muestra a continuación:

Formulario html

Podría interesarte Como enviar un correo con C#  

Archivo PHP

Creamos un archivo php en la misma carpeta del archivo html anterior, con el nombre del “enviar” o de acuerdo al nombre que colocaste en el action del form.

Seguiremos los pasos siguientes para construir el contenido, teniendo en cuenta que ya tenemos las etiquetas de apertura y cierre propias de php.

<?php
//Contenido
?>

Dentro de estas etiquetas agregaremos el contenido con el siguiente orden. Capturamos los datos del formulario html en las variables.

$Nombre = $_POST['Nombre'];
$Email = $_POST['Email'];
$Mensaje = $_POST['Mensaje'];
$archivo = $_FILES['adjunto'];

Hacemos el llamado del un archivo para armar y enviar el correo (este archivo lo podrás descargar al final).

require("archivosmail/class.phpmailer.php");
$mail = new PHPMailer();

Establecemos los datos del correo como contacto, además de la dirección que va a recibir los correos.

$mail->From     = $Email;
$mail->FromName = $Nombre;
$mail->AddAddress("[email protected]");

Ahora enviamos el cuerpo del correo con el siguiente código.

$mail->WordWrap = 50; 
$mail->IsHTML(true);     
$mail->Subject  =  "Contacto";
$mail->Body     =  "Nombre: $Nombre \n<br />".    
"Email: $Email \n<br />".    
"Mensaje: $Mensaje \n<br />";
$mail->AddAttachment($archivo['tmp_name'], $archivo['name']);

Para hacer posible el envío de correos debemos de configurar los datos SMTP de la cuenta de correo de salida.

$mail->IsSMTP(); 
$mail->Host = "ssl://smtp.gmail.com:465"; //Servidor de Salida.
$mail->SMTPAuth = true; 
$mail->Username = "[email protected]"; //Correo Electrónico
$mail->Password = "************"; //Contraseña

Por último, enviamos el corroe y al mismo tiempo validamos, si la salida fue exitosa o hubo algún error, en cualquiera de los casos se notifica al usuario mediante una alerta de JavaScript.

if ($mail->Send())
     echo "<script>alert('Formulario enviado exitosamente.');</script>";
else
     echo "<script>alert('Error al enviar el formulario');</script>";

Enviar email con adjunto

Ejecutamos el proyecto en un servidor web debido a los archivos php y las funciones JavaScript que se utilizan.

Llena todos los campos y selecciona un archivo, después de unos segundos se envía el correo y nos aparecerá el mensaje siguiente.

Email con archivo adjunto PHP

El correo que llega por correo se visualiza de la siguiente manera (Outlook web).

Enviar mail archivo adjunto en php

Listo, de esta manera se pueden enviar correos con archivos adjuntos utilizando php. Por último, puedes descargar el ejemplo en el enlace siguiente.

Descargar ejemplo  

12 Comments

  1. Amigo muchas gracias me ha salvado el año justamente necesitaba esto para enviar archivos por correo en mi projecto de grado.

  2. Hola soy novato con esto de php con esta parte
    $mail->IsSMTP();
    $mail->Host = “ssl://smtp.gmail.com:465”; //Servidor de Salida.
    $mail->SMTPAuth = true;
    $mail->Username = “[email protected]”; //Correo Electrónico
    $mail->Password = “************”; //Contraseña

    que correo debo configurar y gmail no tiene protocolos de seguridad para realizar la validación desde este archivo php?

    1. Puedes configurar cualquier correo, solo que debes de tener los datos del servidor de correos.
      Una cuenta de correo gmail si tiene una medida de seguridad para evitar las salidas de correos desde fuentes desconocidas, sin embargo si quieres utilizar un gmail, debes de quitar esta configuración de seguridad desde el panel de google.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *