PHPMailer con archivos adjuntos [Ejemplo completo]
PHPMailer con archivos adjuntos. En este artículo vamos a aprender a usar PHPMailer para enviar archivos adjuntos en un email o correo electrónico.
Si bien, se puede enviar un email usando la función mail() de PHP, pero no es una función tan segura y profesional, carece de funcionalidades primordiales como por ejemplo enviar contenido HTML o imágenes que con PHPMailer podemos lograr con simples líneas de código y totalmente personalizable.
PHPMailer con archivos adjuntos
A continuación, detallaremos un ejemplo para lograr nuestro objetivo.
En el ejemplo que vamos a mostrar vamos a crear un formulario en el cual solo vamos a proporcionar un dato, el email de destino al cual vamos a enviar el email con el archivo adjunto.
Un formulario sencillo con un solo campo y que se procesa por el método tradicional mediante el método POST.
<div class="card-body"> <form action="enviar.php" method="post" enctype="multipart/form-data"> <div class="row"> <div class="col-md-5"> <div class="mb-3"> <label>Codigo cliente</label> <input type="text" name="codigo" placeholder="Ingrese código" class="form-control" required /> </div> <div class="mb-3"> <label>Nombre</label> <input type="text" name="nombre" placeholder="Ingrese nombre" class="form-control" required> </div> <div class="mb-3"> <label>Email</label> <input type="email" name="email" class="form-control" placeholder="Ingrese Email" required /> </div> </div> <div class="col-md-7"> <div class="row"> <div class="col-md-12"> <div class="mb-3 files color"> <label> Seleccione: Imagen, PDF </label> <input type="file" class="form-control" name="resume" accept="image/*, .pdf" required> </div> </div> </div> </div> </div> <hr> <div class="mb-3" align="center"> <button name="submit" value="" class="btn btn-primary">Enviar informe</button> </div> </form> </div>
Script de la clase PHPMailer
Declaramos la clase y los códigos necesarios para que PHPMailer funcione correctamente.
El código que recibe los datos de este formulario será el siguiente:
<?php $message = ''; function clean_text($string) { $string = trim($string); $string = stripslashes($string); $string = htmlspecialchars($string); return $string; } $codigo = clean_text($_POST["codigo"]); $nombre = clean_text($_POST["nombre"]); $email = clean_text($_POST["email"]); if(isset($_POST["submit"])) { $path = 'upload/' . $_FILES["resume"]["name"]; move_uploaded_file($_FILES["resume"]["tmp_name"], $path); $message = ' <h3 align="center">Detalles del informe</h3> <table border="1" width="100%" cellpadding="5" cellspacing="5"> <tr> <td width="30%">Codigo</td> <td width="70%">'.$codigo.'</td> </tr> <tr> <td width="30%">Nombre</td> <td width="70%">'.$nombre.'</td> </tr> <tr> <td width="30%">Email</td> <td width="70%">'.$email.'</td> </tr> </table> '; require 'class/class.phpmailer.php'; $mail = new PHPMailer; $mail->IsSMTP(); //Sets Mailer to send message using SMTP $mail->Host = 'smtpout.secureserver.net'; $mail->Port = '80'; //Sets the default SMTP server port $mail->SMTPAuth = true; //Sets SMTP authentication. $mail->Username = 'xxxxxxx'; //Sets SMTP username $mail->Password = 'xxxxxxx'; //Sets SMTP password $mail->SMTPSecure = ''; //Sets connection prefix. Options are "", "ssl" or "tls" $mail->From = $email; //Sets the From email address for the message $mail->FromName = $nombre; //Sets the From name of the message $mail->AddAddress('mai@mimail.com', 'My Name'); //Adds a "To" address $mail->WordWrap = 50; $mail->IsHTML(true); //Sets message type to HTML $mail->AddAttachment($path); //Adds an attachment from a path on the filesystem $mail->Subject = 'Enviar informe'; //Sets the Subject of the message $mail->Body = $message; //An HTML or plain text message body if($mail->Send()) //Send an Email. Return true on success or false on error { $message = '<div class="alert alert-success">Informe enviado correctamente</div>'; unlink($path); } else { $message = '<div class="alert alert-danger">Hubo un error al procesar envio</div>'; } } ?>
Tras pulsar el botón de enviar del formulario se comprueba que el email cumpla con el patrón de emails y si es correcto incluimos la clase PHPMAILER, añadimos el email de destino y adjuntamos el archivo, en este caso un archivo PDF de prueba.
Conclusión
Como podemos apreciar el uso de la clase PHPMailer es muy sencilla y lo podemos integrar sin ningún problema. Además, tendremos un sistema de envío muy profesional y con mucha personalización.
Les dejare el script para que puedan probarlo e instalarlo en su servidor para corroborar la eficacia del script.