PHPMailer con archivos adjuntos [Ejemplo completo]

PHPMailer con archivos adjuntos

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.

Índice

    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('[email protected]', '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 una respuesta

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

    Subir