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:
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.
El correo que llega por correo se visualiza de la siguiente manera (Outlook web).
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
Amigo muchas gracias me ha salvado el año justamente necesitaba esto para enviar archivos por correo en mi projecto de grado.
GRACIAS!!! funciona perfectamente!!
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?
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.
No me funciona
Que error te genera?
revisa también los datos del correo de salida
no me funciona SMTP Error: Could not authenticate.
Revisa los datos del servidor de correo, posiblemente este bloqueando las salidas.
podrias montar nueva mente el archivo
Gracias por notificarme, ya está corregido.
require(“archivosmail/class.phpmailer.php”); a que se refiere esta linea?
Es la clase en PHP que se encarga de la gestion de los correos que estamos enviando en el ejemplo del post. Es una clase propia de PHP por lo que solo se hace el llamado a el.