Correio eletrónico

mail() do PHP: o que significa o resultado e quando usar SMTP

Revisto a 5 min de leitura php smtp

Função mail() do PHP

O PHP permite entregar uma mensagem ao transporte de correio local através de mail(). Defina sempre um remetente válido e controlado pela aplicação:

$headers = ['From' => 'web@tudominio.com'];
$accepted = mail('email@destino.com', 'Título email', 'Mensaje', $headers);

Um resultado true apenas confirma que o sistema local aceitou a mensagem para a processar; não prova que o servidor destinatário a tenha aceitado nem que tenha chegado à caixa de entrada.

Problemas causados pelo uso de mail()

O ponto fraco de um envio difícil de diagnosticar é a falta de informação sobre o que acontece depois de o entregar ao transporte. Antes de substituir código, verifique se a mensagem foi aceite, rejeitada ou ficou pendente.

A função permite construir o cabeçalho do remetente sem autenticar por si mesma que a aplicação controla esse domínio. Nunca aceite um valor From fornecido livremente pelo visitante; use um endereço fixo do seu domínio e coloque o endereço do utilizador em Reply-To apenas depois de o validar.

Os fornecedores verificam mecanismos como SPF, DKIM e DMARC, além da reputação e do formato da mensagem. mail() não configura por si só esses mecanismos nem informa do resultado final da entrega.

Uma configuração incompleta pode provocar rejeições ou classificações como spam, mas o resultado deve ser verificado no acompanhamento da entrega e nos cabeçalhos de um envio real.

A adequação de mail() não depende de o destinatário ser próprio ou externo, mas da forma como o transporte local está configurado, da autenticação resultante e da capacidade de observar erros e devoluções. Para mensagens importantes, use um transporte que permita autenticar, registar o resultado e controlar o remetente.

Emails enviados com autenticação SMTP

Uma alternativa é o envio através de SMTP autenticado com uma conta real criada no cPanel. Use o hostname com certificado válido indicado em Conectar dispositivos, TLS obrigatório e a porta segura recomendada. O From deve ser um endereço controlado e alinhado com a conta ou o domínio autenticado. O SMTP melhora o controlo e a rastreabilidade, mas também não garante que o recetor aceite a mensagem.

Não mude o remetente para uma conta do Gmail como solução genérica. O Gmail pode ser usado através da sua configuração SMTP ou OAuth quando a aplicação o admite, mas um erro 401 corresponde a essa autorização e deve ser resolvido em separado; não diagnostica o transporte local de mail() nem a entrega ao destinatário.

Muitas aplicações incluem uma opção para configurar SMTP. No Joomla pode selecionar esse transporte e introduzir o servidor, a cifragem e as credenciais da conta. Verifique o resultado com um envio real da aplicação.

No WordPress pode utilizar um plugin SMTP compatível, como o Easy WP SMTP.

Para desenvolvimentos próprios, pode integrar uma biblioteca mantida como o PHPMailer

Preparar a mudança para SMTP

Guarde as credenciais na configuração privada da aplicação, fora do repositório e do diretório público. Use uma biblioteca mantida, validação do certificado e a porta e o modo TLS indicados pelo fornecedor. Não desative a verificação do certificado para esconder um erro de ligação.

Envie um teste representativo e registe a data, o destinatário e o identificador da mensagem sem guardar palavras-passe. Verifique o acompanhamento da entrega e o resultado no recetor. Se a sua aplicação repete tentativas, evite gerar duplicados quando o primeiro envio já foi aceite mas a resposta se perdeu.

Não introduza dados do formulário sem validação em destinatários ou cabeçalhos. Para responder ao visitante, valide o seu endereço e use-o como Reply-To, mantendo um From que a sua aplicação controle.

Também lhe pode ser útil

Algo não bate certo ou mudou? Diga-nos e revemos.