Enviar archivos adjuntos en correo con PHP

Subodh Poudel 30 enero 2023
  1. Envíe archivos adjuntos en un correo electrónico con PHPMailer
  2. Envíe archivos adjuntos en un correo electrónico con SwiftMailer
Enviar archivos adjuntos en correo con PHP

Introduciremos diferentes métodos para enviar archivos adjuntos por correo electrónico en PHP.

Envíe archivos adjuntos en un correo electrónico con PHPMailer

Podemos utilizar la clase PHPMailer para enviar un correo electrónico, lo que nos permite enviar archivos adjuntos. Podemos crear un objeto de clase PHPMailer y usar sus métodos y propiedades para enviar correos electrónicos a los destinatarios deseados. Usaremos Gmail para enviar un correo electrónico. Entonces, usaremos el protocolo SMTP. La biblioteca tiene el método addAttachment() que nos permite agregar archivos adjuntos. En primer lugar, necesitamos descargar la biblioteca de GitHub.

Por ejemplo, cree una carpeta src y copie los tres archivos PHPMailer.php, SMTP.php y Exception.php en ella. Luego cree un archivo index.php y use la instrucción require para incluir estos tres archivos. Luego utilizar las clases respectivas de estos archivos. A continuación, cree un objeto $mail de la clase PHPMailer(). Configure el correo electrónico y la contraseña del remitente con las propiedades Username y Contraseña. Utilice las propiedades Subject y Body para establecer el asunto y el cuerpo del correo electrónico. Agregue el archivo adjunto usando la función addAttachment(). Proporcione la ruta relativa del archivo adjunto como parámetro del método. Escriba el correo electrónico del destinatario en el método AddAddress(). Finalmente, llame al método Send() para enviar el correo electrónico. A continuación, llame a smtpClose() para cerrar la conexión SMTP.

Necesitamos cambiar el correo electrónico del remitente para enviar un correo electrónico usando Gmail desde PHPMailer. Debemos activar las opciones de acceso a Aplicaciones menos seguras en Gmail para usar el PHPMailer. Luego, ejecutar el siguiente script enviará un correo electrónico y un archivo adjunto al destinatario.

Código de ejemplo:

<?php
require 'src/PHPMailer.php';
require 'src/SMTP.php';
require 'src/Exception.php';

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;

$mail = new PHPMailer();
$mail->isSMTP();
$mail->Host = "smtp.gmail.com";
$mail->SMTPAuth = "true";
$mail->SMTPSecure ="tls";
$mail->Port = "587";
$mail->Username = "sendersemail@gmail.com";
$mail->Password = "password";

$mail->SetFrom('sendersemail@gmail.com');
$mail->Subject = 'Message Subject';
$mail->Body = "This is a body text";
$mail->addAttachment('attachments/project.pdf');
$mail->AddAddress( 'receiversmail@gmail.com' );

$mail->Send();
$mail->smtpClose();
?>

Envíe archivos adjuntos en un correo electrónico con SwiftMailer

También podemos enviar un correo electrónico con archivos adjuntos utilizando la biblioteca de terceros SwiftMailer. La biblioteca ofrece un método attach() para agregar archivos adjuntos al enviar un correo electrónico. Podemos instalar la biblioteca usando el siguiente comando.

composer require "swiftmailer/swiftmailer:^6.0"

Necesitamos incluir el archivo autoloader.php en nuestro script para trabajar con SwiftMailer. El archivo se encuentra dentro de la carpeta vendor del archivo descargado. Enviaremos el correo electrónico con Gmail. Para usar Gmail, necesitamos usar el protocolo SMTP. Entonces, necesitamos crear un transporte con la clase Swift_SmtpTransport para configurar el host, el número de puerto y el protocolo. Podemos configurar el correo electrónico y la contraseña del remitente utilizando el transporte. La clase Swift_Mailer nos permite configurar el transporte, y la clase Swift_Mailer nos permite configurar mensajes, destinatarios y archivos adjuntos.

Por ejemplo, requiera el archivo autoload.php en el archivo de trabajo como vendor/autoload.php. Cree un objeto $transport de la clase Swift_SmtpTransport y establezca el host como smtp.gmail.com, el número de puerto como 587 y el protocolo de seguridad como tls. Luego use los métodos setUsername y setPassword para configurar el correo electrónico y la contraseña del remitente. A continuación, cree un objeto $mail de la clase Swift_Mailer y establezca el objeto $transport en él. Luego, cree otro objeto $content de la clase Swift_Message y escriba el asunto como parámetro. Utilice los métodos setFrom() y setTo() para especificar el correo electrónico del remitente y el del destinatario. Escriba el cuerpo del correo electrónico en el método setBody(). Luego, use el método attach() para especificar la ruta del adjunto usando el método fromPath() de la clase Swift_Attachment. Finalmente, use el objeto $mail que creamos para enviar el correo electrónico con el método send(). Proporcione el objeto $content como parámetro del método send().

Así es como podemos enviar un correo electrónico con archivos adjuntos utilizando la biblioteca SwiftMailer en PHP.

Código de ejemplo:

require_once 'vendor/autoload.php';

$transport = (new Swift_SmtpTransport('smtp.gmail.com', 587, 'tls'))
->setUsername('sendersemail@gmail.com')
->setPassword('password')

$mail = new Swift_Mailer($transport);
$content = (new Swift_Message('Subject'))
->setFrom(['sendersemail@gmail.com' => 'Senders Name'])
->setTo('recieversemail@gmail.com')
->setBody('This is a text')
->attach(Swift_Attachment::fromPath('attachments/project.pdf'));

$result = $mail->send($content);
Subodh Poudel avatar Subodh Poudel avatar

Subodh is a proactive software engineer, specialized in fintech industry and a writer who loves to express his software development learnings and set of skills through blogs and articles.

LinkedIn