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.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Scroll al inicio