Enviar un email con múltiples adjuntos mediante PHP

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-.][email protected]([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>";
}	
?>

 

COMPARTE ESTE ARTÍCULO

ENVIAR A UN AMIGO
COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN GOOGLE +
¡SÉ EL PRIMERO EN COMENTAR!
Conéctate o Regístrate para dejar tu comentario.