O PHPMailer é uma bi­bli­o­teca PHP que permite o envio de e-mails através do PHP. Este tipo de envio de e-mails é utilizado prin­ci­pal­mente para for­mu­lá­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 de­sen­vol­vida pela co­mu­ni­dade para o PHP. Ao contrário da função Mail, que está integrada no PHP desde o início, a pro­ba­bi­li­dade de os e-mails enviados com o PHPMailer acabarem na pasta de spam é muito menor, uma vez que os e-mails gerados com a bi­bli­o­teca PHP são enviados uti­li­zando SMTP (um protocolo de trans­fe­rên­cia simples de correio utilizado para trans­fe­rir 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 uti­li­za­ção do PHPMailer é um pouco mais com­pli­cada do que a uti­li­za­ção de for­ne­ce­do­res de e-mail ou programas de e-mail. Uma pergunta frequente é, portanto, em que contextos é re­co­men­dá­vel utilizar o PHPMailer. A uti­li­za­ção do framework PHP facilita a criação de respostas au­to­ma­ti­za­das, como as que são geradas na gestão de uma loja online. O PHPMailer também é muito útil para for­mu­lá­rios de contacto.

Re­qui­si­tos para a uti­li­za­çã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 for­ne­ce­dor ou criar o teu próprio. Além disso, para a ins­ta­la­ção da extensão PHP, recomenda-se a uti­li­za­ção de um gestor de pacotes para PHP, como o Composer.

Dica

Outro requisito para utilizar o PHPMailer é dominar os conceitos básicos do PHP. Se ainda tiveres alguma di­fi­cul­dade nesta matéria, o nosso tutorial de PHP para prin­ci­pi­an­tes poderá ser-te útil.

Ins­ta­la­ção do PHPMailer: ins­tru­ções passo a passo

Passo 1. Des­car­re­gue a versão mais recente do PHPMailer

Des­car­re­gue a versão mais recente do PHPMailer. O download pode ser feito através do gestor de pacotes ou ma­nu­al­mente a partir do GitHub.

Opção 1. Trans­fe­rên­cia através do Composer

Se tiver instalado o gestor de pacotes Composer, utilize o comando:

composer require phpmailer/phpmailer
bash

Im­por­tante. Se ins­ta­laste 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";
php

O termo**«requiere_once»**garante que o Composer seja integrado apenas uma vez. Qualquer outra opção poderia causar um com­por­ta­mento im­pre­vi­sí­vel ou erros no programa. A ins­ta­la­ção com o Composer está concluída.

Opção 2: Trans­fe­rir do GitHub

Os ficheiros-fonte do PHPMailer também podem ser des­car­re­ga­dos ma­nu­al­mente clicando no botão «Code» no re­po­si­tó­rio GitHub cor­res­pon­dente e des­car­re­gando o ficheiro ZIP. Se o Git estiver instalado no seu sistema, também pode «clonar» o re­po­si­tó­rio uti­li­zando um comando de linha de comandos.

Passo 2. Des­com­pac­tar os ficheiros

Se des­car­re­gou ma­nu­al­mente 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 des­com­pac­tar 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);
php

Envio de e-mails com o PHPMailer: ins­tru­ções passo a passo

Passo 1. Incluir espaços de nomes

Para poder aceder ao PHPMailer, cer­ti­fi­que-se primeiro de que os na­mes­pa­ces estão cor­re­ta­mente incluídos. Para tal, utilizam-se as ins­tru­çõ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;
php

Agora poderá aceder às aulas in­di­vi­du­ais uti­li­zando 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 con­fi­den­ci­ais do seu servidor de e-mail aos uti­li­za­do­res na forma de uma mensagem de erro, é re­co­men­dá­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());
}
php

Passo 3. Au­ten­ti­ca­ção com SMTP

Para utilizar o PHPMailer, tem de se au­ten­ti­car através do SMTP. Para tal, introduza o endereço do seu servidor de e-mail, o protocolo cor­res­pon­dente (seja TLS/SSL ou SMTP), a porta, o seu nome de uti­li­za­dor e a sua palavra-passe. O protocolo e a porta uti­li­za­dos dependem do seu for­ne­ce­dor de e-mail. Pode encontrar os dados do servidor em questão nos sites dos for­ne­ce­do­res 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;
php

Em vez de utilizar o método de en­crip­ta­ção ENCRYPTION_STARTTLS, pode optar-se pelo ENCRYPTION_SMTPS. Com este último, a ligação ao servidor só é es­ta­be­le­cida se o TLS estiver ativado. Além disso, a co­mu­ni­ca­ção com o servidor só é possível se este suportar as medidas de en­crip­ta­ção ne­ces­sá­rias. Por outro lado, com o StartTLS, a ligação ao servidor de correio é es­ta­be­le­cida primeiro sem en­crip­ta­ção. A en­crip­ta­ção é realizada pos­te­ri­or­mente e, se a en­crip­ta­ção TLS não for possível, a troca de dados restante é realizada sem en­crip­ta­ção.

Embora o SMTPS ofereça um nível de segurança mais elevado, o StartTLS pro­por­ci­ona uma melhor com­pa­ti­bi­li­dade. Por esse motivo, o StartTLS é utilizado com maior frequên­cia.

Passo 4. In­tro­du­zir o des­ti­na­tá­rio do e-mail

Agora pode in­tro­du­zir o des­ti­na­tá­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');
php

Passo 5. Adicionar o conteúdo do e-mail

É claro que não pode faltar o mais im­por­tante: o conteúdo do e-mail. Esse conteúdo consiste nor­mal­mente num assunto e num texto, que é dis­po­ni­bi­li­zado tanto na versão HTML como na versão não HTML. Im­por­tante: os programas mais antigos nem sempre suportam o padrão HTML5, pelo que pode ser acon­se­lhá­vel criar o seu e-mail uti­li­zando apenas HTML.

Com o PHPMailer, também podes enviar anexos sem qualquer problema: sejam imagens , ficheiros de áudio, do­cu­men­tos, vídeos ou GIFs. A função ad­dAt­ta­ch­ment 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");
php

Passo 6. Utilizar a co­di­fi­ca­ção de ca­rac­te­res correta

Nos países de língua espanhola, é acon­se­lhá­vel ativar o UTF-8 no PHPMailer para evitar erros de vi­su­a­li­za­ção, es­pe­ci­al­mente 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';
php

Passo 7. Enviar o e-mail

No último passo, basta enviar o e-mail. Para isso, utiliza o comando:

$mail->send();
php

Cer­ti­fi­que-se de que coloca todo o código apre­sen­tado 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) uti­li­zando 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
Ir para o menu principal