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

Creador de credenciales web – Aplicación gratuita

Hoy te voy a presentar un creador de credenciales que acabo de programar y que…

1 semana hace

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

2 semanas hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

2 semanas hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

2 semanas hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

2 semanas hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

2 semanas hace

Esta web usa cookies.