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.

Me fascina la programación en diversos lenguajes y mas aún si son sistemas web o páginas web.

Entradas relacionadas

Integrar Bootstrap 3 Badge Colors

Integrar Bootstrap 3 Badge Colors

En este artículo vamos a integrar colores de fondo en la clase BADGE de Bootstrap 3. Integrar Bootstrap 3 Badge Colors. En el framework Bootstrap 3 por…

5 formar de validar checkbox

5 formar de validar checkbox

5 formar de validar checkbox. Aquí mostrare varias formas de validar checkbox usando jQuery y JavaScript, también usaremos funciones a nivel de formulario. Aquí debéis fijaros que…

Cómo mostrar ocultar DIV usando CHECKBOX

Cómo mostrar ocultar DIV usando CHECKBOX

Cómo mostrar ocultar DIV usando CHECKBOX?. Lo que haremos será trabajar en un div al hacer clic con el mouse usando jQuery, use el método toggle(). Por…

Enviar formulario usando checkbox

Enviar formulario usando checkbox

Enviar formulario usando checkbox. En este articulo veremos una forma de enviar un formulario HTML usando una casilla o varias casillas de verificación (checkbox). Por lo tanto,…

Limpiar Select2 jQuery

Limpiar Select2 jQuery: Ejemplo completo

Limpiar Select2 jQuery. En este articulo aprenderemos a restablecer para mostrar el marcador de posición select2. JQuery Select2 restablece y luego muestra el marcador de posición. Por…

Evitar duplicados al importar MySQL y PHP

Evitar duplicados al importar MySQL y PHP

Evitar duplicados al importar MySQL y PHP. La mayoría de sistemas web o de escritorio trabajan con importación de registros hacia la base de datos para optimizar…

Deja una respuesta

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