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.
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.
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.
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.
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:
Si tienes un problema verifica dos cosas:
En el peor de los casos (y la mayoría) el correo se irá a spam.
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.
Hoy te voy a presentar un creador de credenciales que acabo de programar y que…
Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…
En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…
En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…
Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…
En este artículo te voy a enseñar cómo usar un "top level await" esperando a…
Esta web usa cookies.