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 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