Enviar anexos por e-mail com PHP

Subodh Poudel 29 novembro 2021
  1. Envie anexos em um e-mail com PHPMailer
  2. Envie anexos em um e-mail com SwiftMailer
Enviar anexos por e-mail com PHP

Apresentaremos diferentes métodos para enviar anexos em e-mail em PHP.

Envie anexos em um e-mail com PHPMailer

Podemos usar a classe PHPMailer para enviar um email, permitindo-nos o envio de anexos. Podemos criar um objeto de classe PHPMailer e usar seus métodos e propriedades para enviar emails aos destinatários desejados. Usaremos o Gmail para enviar um e-mail. Portanto, usaremos o protocolo SMTP. A biblioteca possui o método addAttachment() que nos permite adicionar anexos. Primeiramente, precisamos baixar a biblioteca do GitHub.

Por exemplo, crie uma pasta src e copie os três arquivos PHPMailer.php, SMTP.php e Exception.php para ela. Em seguida, crie um arquivo index.php e use a instrução require para incluir esses três arquivos. Em seguida, use as respectivas classes desses arquivos. A seguir, crie um objeto $mail da classe PHPMailer(). Defina o e-mail e a senha do remetente com as propriedades Username e Password. Use as propriedades Subject e Body para definir o assunto e o corpo do e-mail. Adicione o anexo usando a função addAttachment(). Forneça o caminho relativo do anexo como parâmetro do método. Escreva o e-mail do destinatário no método AddAddress(). Finalmente, chame o método Send() para enviar o e-mail. Em seguida, chame smtpClose() para fechar a conexão SMTP.

Precisamos alterar o e-mail do remetente para enviar e-mail usando o Gmail de PHPMailer. Devemos ativar as opções de acesso de aplicativos menos seguros no Gmail para usar o PHPMailer. Em seguida, executar o script a seguir enviará um e-mail e um anexo ao destinatário.

Código de exemplo:

<?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();
?>

Envie anexos em um e-mail com SwiftMailer

Podemos enviar um e-mail com anexos usando a biblioteca de terceiros SwiftMailer também. A biblioteca oferece um método attach() para adicionar anexos ao enviar um e-mail. Podemos instalar a biblioteca usando o seguinte comando.

composer require "swiftmailer/swiftmailer:^6.0"

Precisamos incluir o arquivo autoloader.php em nosso script para trabalhar com SwiftMailer. O arquivo está localizado dentro da pasta vendor do arquivo baixado. Estaremos enviando o e-mail pelo Gmail. Para usar o Gmail, precisamos usar o protocolo SMTP. Portanto, precisamos criar um transporte com a classe Swift_SmtpTransport para definir o host, o número da porta e o protocolo. Podemos definir o e-mail e a senha do remetente usando o transporte. A classe Swift_Mailer permite definir o transporte e a classe Swift_Mailer permite definir mensagens, destinatários e anexos.

Por exemplo, exija o arquivo autoload.php no arquivo de trabalho como vendor/autoload.php. Crie um objeto $transport da classe Swift_SmtpTransport e defina o host como smtp.gmail.com, o número da porta como 587 e o protocolo de segurança como tls. Em seguida, use os métodos setUsername e setPassword para definir o e-mail e a senha do remetente. Em seguida, crie um objeto $mail da classe Swift_Mailer e defina o objeto $transport para ele. Em seguida, crie outro objeto $content da classe Swift_Message e escreva o assunto como o parâmetro. Use os métodos setFrom() e setTo() para especificar o e-mail do remetente e o e-mail do destinatário. Escreva o corpo do email no método setBody(). Em seguida, use o método attach() para especificar o caminho do anexo usando o método fromPath() da classe Swift_Attachment. Finalmente, use o objeto $mail que criamos para enviar o e-mail com o método send(). Forneça o objeto $content como o parâmetro do método send().

É assim que podemos enviar um email com anexos usando a biblioteca SwiftMailer em PHP.

Código de exemplo:

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