La presente es una breve guía para implementar un formulario para enviar email con archivos adjuntos, para ello utilizaremos la librería PHPMailer, de la cual ya hemos hablado en Introducción a PHPMailer.
Creando el Formulario
Lo primero es crear un formulario en el cual el usuario ingresará los datos del destinatario, asunto, mensaje y seleccionar el archivo que se desea adjuntar. Para ello creamos un formulario con los campos necesarios:
<form action="" method="post" enctype="multipart/form-data"> Destinatario <input type="text" name="destino"><br> Asunto <input type="text" name="asunto"><br> Adjunto <input type="file" name="archivo"><br> Mensaje <textarea name="mensaje"></textarea><br> <input type="submit" name="btsend" value="Enviar Email"> <input type="hidden" name="action" value="send" /> </form>
Notese que hemos utilizado la propiedad enctype con la cual permitimos el envío de archivos adjuntos en el formulario. Además hemos agregado un campo oculto llamado action para verificar que se ha enviado el formulario.
Enviando el Email
Es el momento de recibir los datos enviados en el formulario y enviarlos por email, para ello utilizaremos la clase PHPMailer para lo cual lo adjuntamos en la primera linea. Lo que sigue es verificar si se ha envíado el formulario para ello comprobamos la variable action del formulario. Luego recuperamos el nombre del archivo adjunto y el archivo temporal en las variables $varname y $vartype. Lo siguiente es crear una instancia de la clase PHPMailer donde le pasamos todas las variables necesarias.
require("class.phpmailer.php"); if ($_POST['action'] == "send") { $varname = $_FILES['archivo']['name']; $vartemp = $_FILES['archivo']['tmp_name']; $mail = new PHPMailer(); $mail->Host = "localhost"; $mail->From = "[email protected]"; $mail->FromName = "Blog Unijimpe"; $mail->Subject = $_POST['asunto']; $mail->AddAddress($_POST['destino']); if ($varname != "") { $mail->AddAttachment($vartemp, $varname); } $body = "Mensaje
"; $body.= $_POST['mensaje']."
"; $body.= "Enviado por http://blog.unijimpe.net"; $mail->Body = $body; $mail->IsHTML(true); $mail->Send(); }
En el código anterior hay que notar que hemos verificado si existe un archivo adjunto para luego añadirlo como adjunto utilizando la propiedad AddAttachment. Finalmente asignamos el texto del mensaje y procedemos a enviar el correo con $mail->Send().
No olvidar que estamos utilizando PHPMailer, asi que es necesario descargar los archivos fuente de esta clase. Para finalizar he creado un archivo de prueba en http://samples.unijimpe.net/mailattach.php y también les dejo los archivos fuente para su descarga.