Porquê usar PHPMailer em vez da função mail()?
A função mail() do PHP é conhecida por ter uma baixa taxa de entrega uma vez que os emails enviados através desta função não são autenticados. Isto faz com que muitos servidores de email (como o Gmail, Outlook, etc.) rejeitem ou enviem estas mensagens diretamente para a pasta de SPAM.
A solução é enviar emails de forma autenticada, usando SMTP, tal como faz o seu programa de e-mail (Outlook, telemóvel, etc.). A biblioteca PHPMailer é a forma mais popular e segura de o fazer em PHP.
Este guia irá ensiná-lo a configurar o envio de email de forma segura, descarregando a biblioteca PHPMailer diretamente.
Passo 1: Descarregar a Biblioteca PHPMailer
Primeiro, precisa obter os ficheiros da biblioteca.
- Aceda ao repositório oficial do PHPMailer no GitHub clicando aqui: PHPMailer no GitHub.
- Clique no botão verde < > Code.
- No menu que aparece, clique em Download ZIP.
Irá descarregar um ficheiro chamado PHPMailer-master.zip. Descompacte este ficheiro no seu computador para obter uma pasta chamada PHPMailer-master.
Passo 2: Carregar os Ficheiros para o Alojamento
De seguida, será necessário colocar esta pasta no seu servidor.
- Aceda ao seu alojamento usando o File Manager do painel de controlo ou um cliente de FTP (como o FileZilla).
Navegue até à pasta principal do seu site. Por norma, e caso o website seja o domínio principal da conta, esta pasta será a public_html.
Passo 3: Criar o Script de Envio (enviar-email.php)
Ainda na pasta public_html, deve criar um novo ficheiro com o nome enviar-email.php e copiar o código abaixo para este ficheiro.
⚠️ Importante: Terá de alterar os dados de exemplo (marcados com <<< ALTERE AQUI) pelas suas próprias informações.
<?php
/**
* Script de Envio de E-mail Autenticado com PHPMailer
*/
// Usa as classes da biblioteca PHPMailer
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;
// Carrega os ficheiros da biblioteca que carregou para o seu alojamento
require 'PHPMailer-master/src/Exception.php';
require 'PHPMailer-master/src/PHPMailer.php';
require 'PHPMailer-master/src/SMTP.php';
// Cria uma nova instância do PHPMailer
$mail = new PHPMailer(true);
try {
// ----------------- CONFIGURAÇÕES DO SERVIDOR SMTP (ALTERE ESTES DADOS) -----------------
// $mail->SMTPDebug = SMTP::DEBUG_SERVER; // Descomente esta linha para ver erros detalhados
$mail->isSMTP();
$mail->Host = 'mail.seudominio.com'; // <<< ALTERE AQUI: Endereço do servidor SMTP
$mail->SMTPAuth = true; // Ativa a autenticação SMTP
$mail->Username = 'seu_email@seudominio.com'; // <<< ALTERE AQUI: O seu endereço de e-mail completo
$mail->Password = 'sua_senha_do_email'; // <<< ALTERE AQUI: A password do seu e-mail
$mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS; // Ativa a encriptação SSL (recomendado)
$mail->Port = 465; // <<< ALTERE AQUI: Porta TCP para SSL (ou 587 para TLS)
$mail->CharSet = 'UTF-8';
// ----------------- REMETENTE E DESTINATÁRIOS -----------------
// O e-mail em setFrom DEVE ser o mesmo do Username para garantir a autenticação
$mail->setFrom('seu_email@seudominio.com', 'Nome Visível do Remetente'); // <<< ALTERE AQUI
$mail->addAddress('email_do_destinatario@exemplo.com', 'Nome do Destinatário'); // <<< ALTERE AQUI
// ----------------- CONTEÚDO DO E-MAIL -----------------
$mail->isHTML(true);
$mail->Subject = 'Assunto do E-mail de Teste';
$mail->Body = 'Este é um e-mail de teste enviado com <b>PHPMailer</b> a partir do seu site!';
$mail->AltBody = 'Este é um e-mail de teste enviado com PHPMailer a partir do seu site!';
// Enviar o e-mail
$mail->send();
echo '<h1>Sucesso!</h1><p>A mensagem de teste foi enviada com sucesso.</p>';
} catch (Exception $e) {
echo "<h1>Erro!</h1><p>A mensagem não pôde ser enviada. Erro do Mailer: {$mail->ErrorInfo}</p>";
}
?>
Passo 4: Testar o Script
Para testar, basta aceder ao ficheiro diretamente no browser:
http://oseudominio.com/enviar-email.php
Se tudo estiver configurado corretamente, deverá ver a mensagem “Sucesso! A mensagem de teste foi enviada com sucesso.” e receber o e-mail na caixa de entrada que definiu.
Resolução de Problemas Comuns
- Erro: “Could not authenticate.”
- Solução: As suas credenciais (Username ou Password) estão incorretas. Verifique se os dados correspondem exatamente aos da sua conta de e-mail.
- Erro: “Could not connect to SMTP host.”
- Solução: O Host ou a Port estão errados. Confirme os dados SMTP no seu painel de controlo. As configurações mais comuns são Porta 465 com segurança SMTPSecure ou Porta 587 com ENCRYPTION_STARTTLS.
- Precisa de mais detalhes sobre um erro?
- Solução: No script, remova o // do início da linha $mail->SMTPDebug = SMTP::DEBUG_SERVER;. Isto fará com que o script mostre toda a comunicação com o servidor, ajudando a diagnosticar o problema.
Próximos Passos
Agora que o seu script de envio funciona, pode integrá-lo num formulário de contacto.
➡️ Consulte o nosso guia: [Como Criar um Formulário de Contacto com PHPMailer] em https://kb.dominios.pt/article/como-criar-um-formulario-de-contacto-com-phpmailer .