Como enviar e-mails com o PHPMailer
O PHPMailer é uma biblioteca PHP que permite o envio de e-mails através do PHP. Este tipo de envio de e-mails é utilizado principalmente para formulários de contacto em páginas web, embora também seja possível enviar e-mails privados.
O que é o PHPMailer?
O PHPMailer é uma extensão de e-mail desenvolvida pela comunidade para o PHP. Ao contrário da função Mail, que está integrada no PHP desde o início, a probabilidade de os e-mails enviados com o PHPMailer acabarem na pasta de spam é muito menor, uma vez que os e-mails gerados com a biblioteca PHP são enviados utilizando SMTP (um protocolo de transferência simples de correio utilizado para transferir e-mails através da Internet). Além disso, o PHPMailer suporta, ao contrário da função Mail integrada, e-mails em HTML e anexos.
Para que serve o PHPMailer?
A utilização do PHPMailer é um pouco mais complicada do que a utilização de fornecedores de e-mail ou programas de e-mail. Uma pergunta frequente é, portanto, em que contextos é recomendável utilizar o PHPMailer. A utilização do framework PHP facilita a criação de respostas automatizadas, como as que são geradas na gestão de uma loja online. O PHPMailer também é muito útil para formulários de contacto.
Requisitos para a utilização do PHPMailer
Para poder trabalhar com o PHPMailer, primeiro precisas de um servidor SMTP. Podes optar por utilizar o servidor de e-mail de um fornecedor ou criar o teu próprio. Além disso, para a instalação da extensão PHP, recomenda-se a utilização de um gestor de pacotes para PHP, como o Composer.
Outro requisito para utilizar o PHPMailer é dominar os conceitos básicos do PHP. Se ainda tiveres alguma dificuldade nesta matéria, o nosso tutorial de PHP para principiantes poderá ser-te útil.
Instalação do PHPMailer: instruções passo a passo
Passo 1. Descarregue a versão mais recente do PHPMailer
Descarregue a versão mais recente do PHPMailer. O download pode ser feito através do gestor de pacotes ou manualmente a partir do GitHub.
Opção 1. Transferência através do Composer
Se tiver instalado o gestor de pacotes Composer, utilize o comando:
composer require phpmailer/phpmailerbashImportante. Se instalaste o PHPMailer com o Composer, deves incluir «composer» no teu código PHP para poderes enviar e-mails.
Para isso, introduza este código:
require_once "vendor/autoload.php";phpO termo**«requiere_once»**garante que o Composer seja integrado apenas uma vez. Qualquer outra opção poderia causar um comportamento imprevisível ou erros no programa. A instalação com o Composer está concluída.
Opção 2: Transferir do GitHub
Os ficheiros-fonte do PHPMailer também podem ser descarregados manualmente clicando no botão «Code» no repositório GitHub correspondente e descarregando o ficheiro ZIP. Se o Git estiver instalado no seu sistema, também pode «clonar» o repositório utilizando um comando de linha de comandos.
Passo 2. Descompactar os ficheiros
Se descarregou manualmente o código-fonte do PHPMailer, terá de abrir o ficheiro ZIP. Para tal, selecione o local onde pretende instalar o PHPMailer. Mais uma vez, deve primeiro incluir o PHPMailer no seu script. Depois de descompactar os ficheiros do PHPMailer num diretório chamado PHPMailer, utilize as seguintes linhas de código:
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
/*Clase para tratar con excepciones y errores*/
require 'C:/PHPMailer/src/Exception.php';
/*Clase PHPMailer*/
require 'C:/PHPMailer/src/PHPMailer.php';
/*Clase SMTP necesaria para la conexión con un servidor SMTP*/
require 'C:/PHPMailer/src/SMTP.php';
/*Al crear un objeto PHPMailer, pasa el parámetro "true" para activar las excepciones (mensajes en caso de error)*/
$email = new PHPMailer(true);phpEnvio de e-mails com o PHPMailer: instruções passo a passo
Passo 1. Incluir espaços de nomes
Para poder aceder ao PHPMailer, certifique-se primeiro de que os namespaces estão corretamente incluídos. Para tal, utilizam-se as instruções use, pelo que o seu código deve conter as seguintes linhas:
<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;phpAgora poderá aceder às aulas individuais utilizando o nome que aparece após a última barra.
Passo 2. Detectar erros
Embora o PHPMailer seja uma opção muito fiável para enviar e-mails, podem ocorrer erros de vez em quando. Para evitar enviar dados confidenciais do seu servidor de e-mail aos utilizadores na forma de uma mensagem de erro, é recomendável envolver o envio de e-mails na instrução Try-Catch:
try {
// Intentar crear una nueva instancia de la clase PHPMailer con excepciones habilitadas
$mail = new PHPMailer (true);
// (…)
} catch (Exception $e) {
echo "Mailer Error: ".$e->getMessage());
}phpPasso 3. Autenticação com SMTP
Para utilizar o PHPMailer, tem de se autenticar através do SMTP. Para tal, introduza o endereço do seu servidor de e-mail, o protocolo correspondente (seja TLS/SSL ou SMTP), a porta, o seu nome de utilizador e a sua palavra-passe. O protocolo e a porta utilizados dependem do seu fornecedor de e-mail. Pode encontrar os dados do servidor em questão nos sites dos fornecedores de e-mail.
$mail->isSMTP();
$mail->SMTPAuth = true;
// Datos personales
$mail->Host = "smtp.domain.es";
$mail->Port = 587;
$mail->Username = "nombre.apellidoo@domain.es";
$mail->Password = "ejemplocontraseña1234";
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;phpEm vez de utilizar o método de encriptação ENCRYPTION_STARTTLS, pode optar-se pelo ENCRYPTION_SMTPS. Com este último, a ligação ao servidor só é estabelecida se o TLS estiver ativado. Além disso, a comunicação com o servidor só é possível se este suportar as medidas de encriptação necessárias. Por outro lado, com o StartTLS, a ligação ao servidor de correio é estabelecida primeiro sem encriptação. A encriptação é realizada posteriormente e, se a encriptação TLS não for possível, a troca de dados restante é realizada sem encriptação.
Embora o SMTPS ofereça um nível de segurança mais elevado, o StartTLS proporciona uma melhor compatibilidade. Por esse motivo, o StartTLS é utilizado com maior frequência.
Passo 4. Introduzir o destinatário do e-mail
Agora pode introduzir o destinatário do e-mail.
// Remitente
$mail->setFrom('info@example.com', 'name');
// Destinatario, opcionalmente también se puede especificar el nombre
$mail->addAddress('info@example.com', 'name');
// Copia
$mail->addCC('info@example.com');
// Copia oculta
$mail->addBCC('info@example.com', 'name');phpPasso 5. Adicionar o conteúdo do e-mail
É claro que não pode faltar o mais importante: o conteúdo do e-mail. Esse conteúdo consiste normalmente num assunto e num texto, que é disponibilizado tanto na versão HTML como na versão não HTML. Importante: os programas mais antigos nem sempre suportam o padrão HTML5, pelo que pode ser aconselhável criar o seu e-mail utilizando apenas HTML.
Com o PHPMailer, também podes enviar anexos sem qualquer problema: sejam imagens , ficheiros de áudio, documentos, vídeos ou GIFs. A função addAttachment ajuda-te a fazê-lo. Além disso, podes renomear os teus anexos com um segundo parâmetro opcional.
$mail->isHTML(true);
// Asunto
$mail->Subject = 'Asunto de tu correo electrónico';
// Contenido HTML
$mail->Body = 'El contenido de tu correo en HTML. Los elementos en <b>negrita</b> también están permitidos,';
$mail->AltBody = 'El texto como elemento de texto simple';
// Agregar archivo adjunto
$mail->addAttachment("/home/user/Escritorio/imagendeejemplo.png", " imagendeejemplo.png");phpPasso 6. Utilizar a codificação de caracteres correta
Nos países de língua espanhola, é aconselhável ativar o UTF-8 no PHPMailer para evitar erros de visualização, especialmente quando se utilizam vários anexos. Para tal, adicione as seguintes linhas de código ao seu script PHP:
$mail->CharSet = 'UTF-8';
$mail->Encoding = 'base64';phpPasso 7. Enviar o e-mail
No último passo, basta enviar o e-mail. Para isso, utiliza o comando:
$mail->send();phpCertifique-se de que coloca todo o código apresentado até ao pedido de envio no bloco Try do seu script, para que qualquer erro eventual seja capturado conforme descrito.
Um exemplo de código para enviar um e-mail
Aqui está, mais uma vez, todo o código de que precisas para enviar um e-mail (com imagem anexada) utilizando o PHPMailer:
<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;
require_once "vendor/autoload.php";
// Activar o desactivar excepciones mediante variable
$debug = true;
try {
// Crear instancia de la clase PHPMailer
$mail = new PHPMailer($debug);
if ($debug) {
// Genera un registro detallado
$mail->SMTPDebug = SMTP::DEBUG_SERVER;
}
// Autentificación con SMTP
$mail->isSMTP();
$mail->SMTPAuth = true;
// Login
$mail->Host = "smtp.domain.es";
$mail->Port = 587;
$mail->Username = "nombre.apellido@domain.es";
$mail->Password = "ejemplocontraseña1234";
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
$mail->setFrom('info@example.com', 'name');
$mail->addAddress('info@example.com', 'name');
$mail->addAttachment("/home/user/Escritorio/imagendeejemplo.png", "imagendeejemplo.png");
$mail->CharSet = 'UTF-8';
$mail->Encoding = 'base64';
$mail->isHTML(true);
$mail->Subject = 'Asunto de tu correo';
$mail->Body = 'El contenido de tu correo en HTML. Los elementos en <b>negrita</b> también están permitidos.';
$mail->AltBody = 'Texto como elemento de texto simple';
$mail->send();
} catch (Exception $e) {
echo "Message could not be sent. Mailer Error: ".$e->getMessage();
}php