En este tutorial veremos cómo enviar un email con múltiples adjuntos con la librerÃa PHPMailer. Los archivos adjuntos serán escogidos y adjuntados al correo electrónico mediante un formulario HTML. También utilizaré jQuery AAJX para llamar al script que enviará al correo con los adjuntos.
En este ejemplo he creado un formulario HTML que contiene campos inputs para el nombre del emisor, el correo electrónico del receptor, el asunto, el cuerpo y los ficheros a adjuntar. En este formulario, el campo file estará preparada para que acepte varios archivos adjuntos gracias al atributo “multiple” del input. Recorreremos los archivos seleccionados por el usuario gracias al array global $_FILES para adjuntarlos al correo utilizando un objeto de PHPMailer.
Seleccionando múltiples adjuntos mediante formulario HTML
El siguiente formulario HTML contiene los campos necesario para datos como el nombre del emisor, el correo del receptor, el asunto y, como no, el cuerpo del correo. También contiene un campo input para escoger más de un archivo gracias a la propiedad “multiple”.
<form id="frmEnquiry" action="" method="post" enctype='multipart/form-data'> <div id="mail-status"></div> <div> <input type="text" name="userName" id="userName" class="demoInputBox" placeholder="Name"> </div> <div> <input type="text" name="userEmail" id="userEmail" class="demoInputBox" placeholder="Email"> </div> <div> <input type="text" name="subject" id="subject" class="demoInputBox" placeholder="Subject"> </div> <div> <textarea name="content" id="content" class="demoInputBox" cols="60" rows="6" placeholder="Content"></textarea> </div> <div> <label>Attachment</label><br /> <input type="file" name="attachment[]" class="demoInputBox" multiple="multiple"> </div> <div> <input type="submit" value="Send" class="btnAction" /> </div> </form>
Enviando la información del formulario vÃa jQuery AJAX
Al enviar el formulario, validaremos el valor de los campos inputs introducidos por el usuario mediante jQuery. Si todos los campos pasan la validación y la función devuelve true, se realizará la solicitud AJAX para ejecutar el script que enviará el correo. Después de ejecutar el script que envÃa el correo, el bloque de respuesta AJAX actualizará la interfaz del usuario para confirmar al usuario que el correo ha sido enviado satisfactoriamente.
<script src="jquery-3.2.1.min.js" type="text/javascript"></script> <script type="text/javascript"> $(document).ready(function (e){ $("#frmEnquiry").on('submit',(function(e){ e.preventDefault(); $('#loader-icon').show(); var valid; valid = validateContact(); if(valid) { $.ajax({ url: "mail-send.php", type: "POST", data: new FormData(this), contentType: false, cache: false, processData:false, success: function(data){ $("#mail-status").html(data); $('#loader-icon').hide(); }, error: function(){} }); } })); function validateContact() { var valid = true; $(".demoInputBox").css('background-color',''); $(".info").html(''); $("#userName").removeClass("invalid"); $("#userEmail").removeClass("invalid"); $("#subject").removeClass("invalid"); $("#content").removeClass("invalid"); if(!$("#userName").val()) { $("#userName").addClass("invalid"); $("#userName").attr("title","Required"); valid = false; } if(!$("#userEmail").val()) { $("#userEmail").addClass("invalid"); $("#userEmail").attr("title","Required"); valid = false; } if(!$("#userEmail").val().match(/^([w-.]+@([w-]+.)+[w-]{2,4})?$/)) { $("#userEmail").addClass("invalid"); $("#userEmail").attr("title","Invalid Email"); valid = false; } if(!$("#subject").val()) { $("#subject").addClass("invalid"); $("#subject").attr("title","Required"); valid = false; } if(!$("#content").val()) { $("#content").addClass("invalid"); $("#content").attr("title","Required"); valid = false; } return valid; } }); </script>
Â
Código PHP para adjuntar múltiples ficheros al correo
En este código PHP, creamos el objeto de PHPMailer que utilizaremos para enviar el correo. Pero antes, debemos definir las credenciales del correo emisor para que el envÃo se realice satisfactoriamente.
Tendremos acceso a los archivos seleccionados por el usuario mediante el formulario HTML gracias al array $_FILES. Recorreremos este array y en cada uno de los elementos llamaremos a la función addAttachment() para adjuntarlos al correo.
<?php require('phpmailer/class.phpmailer.php'); $mail = new PHPMailer(); $mail->IsSMTP(); $mail->SMTPDebug = 0; $mail->SMTPAuth = TRUE; $mail->SMTPSecure = "ssl"; $mail->Port = 465; $mail->Username = "YOUR USER_NAME"; $mail->Password = "YOUR PASSWORD"; $mail->Host = "YOUR HOST"; $mail->Mailer = "smtp"; $mail->SetFrom($_POST["userEmail"], $_POST["userName"]); $mail->AddReplyTo($_POST["userEmail"], $_POST["userName"]); $mail->AddAddress("RECIPIENT_EMAIL"); $mail->Subject = $_POST["subject"]; $mail->WordWrap = 80; $mail->MsgHTML($_POST["content"]); foreach ($_FILES["attachment"]["name"] as $k => $v) { $mail->AddAttachment( $_FILES["attachment"]["tmp_name"][$k], $_FILES["attachment"]["name"][$k] ); } $mail->IsHTML(true); if(!$mail->Send()) { echo "<p class='error'>Problem in Sending Mail.</p>"; } else { echo "<p class='success'>Mail Sent Successfully.</p>"; } ?>
Â