web

Correo electrónico con adjunto en PHP – Enviar archivo

En este post te mostraré cómo enviar un correo electrónico con adjunto en PHP, es decir, adjuntar un archivo a un correo electrónico que se enviará con PHP.

Para lograrlo vamos a usar la librería phpmailer; verás que es realmente sencillo y que no afecta en nada.

Instalación de phpmailer

Comenzamos instalando phpmailer en nuestro proyecto usando composer. Si no tienes un proyecto, por favor mira cómo comenzar con composer.

En caso de que ya uses composer o hayas seguido el tutorial que mencioné, ejecuta:

composer require phpmailer/phpmailer

Eso va a descargar la librería. Después, incluye el autoload en caso de que no sea incluido antes:

include "vendor/autoload.php";

Con eso estamos listos.

El servidor de correo de pruebas y el archivo

Para depurar de manera local, si usas Windows puedes usar la aplicación de smtp4dev para probar el envío de correos con PHP.

El archivo que enviaré adjunto con PHP será una factura PDF.

Enviar correo electrónico con adjunto en PHP

Es momento de preparar el correo. Voy a hacerlo simple, pero si quieres profundizar más en el tema, mira la documentación de phpmailer.

El código es tan simple como lo siguiente:

<?php
include_once "vendor/autoload.php";

use PHPMailer\PHPMailer\PHPMailer;

$phpMailer = new PHPMailer;
# Puede ser ruta relativa o absoluta
$nombreDelDocumento = "factura.pdf";


if (!file_exists($nombreDelDocumento)) {
    exit("El archivo $nombreDelDocumento no existe");
}


try {
    $phpMailer->setFrom("AQUÍ VA EL CORREO DEL REMITENTE", "AQUÍ VA EL REMITENTE"); # Correo y nombre del remitente
    $phpMailer->addAddress("AQUÍ VA EL CORREO DEL DESTINATARIO"); # El destinatario
    $phpMailer->Subject = "Archivo adjunto"; # Asunto
    $phpMailer->Body = "Hola, amigo. Estamos probando los archivos adjuntos."; # Cuerpo en texto plano
    // Aquí la magia:
    $phpMailer->addAttachment($nombreDelDocumento);
    if (!$phpMailer->send()) {
        echo "Error enviando correo: " . $phpMailer->ErrorInfo;
    }
    # Opcionalmente podrías eliminar el archivo después de enviarlo, si quieres
    // if (file_exists($nombreDelDocumento)) {
    // unlink($nombreDelDocumento);
    // }
    echo "Enviado correctamente";
} catch (Exception $e) {
    echo "Excepción: " . $e->getMessage();
}

Iniciamos incluyendo el autoload e indicando que vamos a usar el namespace de PHPMailer. Después definimos algunas variables, entre ellas el nombre del archivo que se adjunta.

En la línea 17 a la línea 20 configuramos cosas del correo como el remitente, destinatario, asunto, y cuerpo.

El archivo se adjunta en la línea 22, si quieres, puedes invocar al método addAttachment varias veces para adjuntar varios archivos.

Se envía el correo en la línea 23 y al mismo tiempo se comprueba si hay un error. Todo lo anteriormente mencionado está dentro de un try catch para manejar las excepciones.

Si llegamos a la línea 30 es que todo está correcto y el correo se ha enviado.

Probando código para enviar correo electrónico con adjunto en PHP

Así que al ejecutar el script ya sea desde la terminal o con apache obtengo una salida exitosa. Si voy al servidor de correo de pruebas obtengo lo siguiente:

Correo electrónico con adjunto en PHP

Problemas al enviar correos

Si tienes un problema verifica dos cosas:

  • Que tu servidor tenga un servidor de correos (la mayoría lo tienen y si no, es fácil instalarlo. Además, phpmailer tiene uno integrado)
  • Que tu dominio no sea marcado como spam y que tus mensajes tampoco lo sean. Esto es un poco complejo y depende de la reputación de tu web así como del contenido de los mensajes; si tu dominio no tiene buena reputación entonces no importa desde cuál lenguaje se envíe, el mensaje se irá a la bandeja de spam.

En el peor de los casos (y la mayoría) el correo se irá a spam.

Conclusión

Si quieres explorar el código completo o descargarlo, dejo el enlace del repositorio de GitHub.

También te invito a ver un ejemplo de formulario de contacto con PHP en donde se usa mail.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Entradas recientes

Servidor HTTP en Android con Flutter

El día de hoy te mostraré cómo crear un servidor HTTP (servidor web) en Android…

4 días hace

Imprimir automáticamente todos los PDF de una carpeta

En este post te voy a enseñar a designar una carpeta para imprimir todos los…

5 días hace

Guía para imprimir en plugin versión 1 desde Android

En este artículo te voy a enseñar la guía para imprimir en una impresora térmica…

1 semana hace

Añadir tasa de cambio en sistema de información

Hoy te voy a mostrar un ejemplo de programación para agregar un módulo de tasa…

2 semanas hace

Comprobar validez de licencia de plugin ESC POS

Los usuarios del plugin para impresoras térmicas pueden contratar licencias, y en ocasiones me han…

2 semanas hace

Imprimir euro € en impresora térmica

Hoy voy a enseñarte cómo imprimir el € en una impresora térmica. Vamos a ver…

4 semanas hace

Esta web usa cookies.