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 .