Como Enviar Emails Através do PHP e do PHPMailer: Guia Completo

Como Enviar Emails Através do PHP e do PHPMailer: Guia Completo

O email é uma parte integral de qualquer projeto ou negócio. Enquanto existem diversas plataformas de email – incluindo Hostinger, Zoho Mail e G Suite – você também pode enviar um email PHP. Neste tutorial, você vai aprender como enviar emails usando a função incorporação PHP mail() e o PHPMailer através do Protocolo de Transferência de Correio Simples (SMTP).

Como Usar a Função PHP mail()

Para usar a função PHP mail(), você precisa do programa Sendmail, que geralmente é configurado pelo administrador do sistema. É ele que permite o envio de emails.

Na hora de usar essa funcionalidade, garanta que o seu provedor de hospedagem lhe dá a opção de gerenciar o serviço Sendmail de modo manual.

Se você já usa a Hostinger, é possível habilitar ou desabilitar essa função ao acessar o hPanel. Clique em Emails -> Controle do Serviço de Email.

controle do serviço de email dentro do hpanel da hostinger

Por padrão, o serviço do Sendmail já fica habilitado. Ainda assim, é recomendável você checar novamente para ter certeza disso.

serviço sendmail ativado dentro do hpanel

Crie um Arquivo de Testes para o PHP Mail

Primeiramente, você precisa criar um arquivo para o PHP mail script e colocá-lo no seu diretório public_html para que ele possa ser acessado facilmente através do seu domínio.

  1. Para acessar o hPanel, clique no Gerenciador de Arquivos.
  2. Crie um novo arquivo ao clicar em Add New (Adicionar Novo).  Vamos nomear esse arquivo testmail.php e então clicar em Create (Criar).
    criação de novo arquivo no gerenciador de arquivos da hostinger
  3. Clique duas vezes no testmail.php, já que iremos editá-lo usando a função PHP mail(). Aqui está um exemplo dos componentes básicos da função que vamos usar neste tutorial. Elas serão explicadas com mais detalhes na próxima seção. Por enquanto, clique em Save & Close (Salvar e Fechar) quando tiver terminado suas edições.
    componentes básicos da função php mail() desenvolvida
  4. Agora você pode enviar um email PHP ao acessar SeuDominio/testmail.php a partir do seu navegador. Tenha em mente que você deve mudar SeuDominio para o domínio que você usou na criação do testmail.php
  5. O endereço para o qual você enviou a mensagem deverá recebê-la sem problemas.
    email recebido no gmail mostrando que o php mail funcionou

O Que Significa Cada Componente do PHP Mail

Como mencionamos antes, vamos apresentar os componentes de um script básico de PHP mail. Para este exemplo, nós providenciamos um email de sintaxe básica para ajudar você a compreender essa funcionalidade com maiores detalhes.

Contudo, se você precisa de mais informações sobre a função Sendmail e seus componentes, você pode conferir a documentação PHP oficial.

Aqui está a sintaxe do PHP que usamos na seção anterior:

<?php
    ini_set( 'display_errors', 1 );
    error_reporting( E_ALL );
    $from = "test@hostinger-tutorials.com";
    $to = "test@hostinger.com";
    $subject = "Checking PHP mail";
    $message = "PHP mail works just fine";
    $headers = "From:" . $from;
    mail($to,$subject,$message, $headers);
    echo "The email message was sent.";
?>

Vamos explicar cada passo do script abaixo:

ini_set( 'display_errors', 1 );
error_reporting( E_ALL );

Essas duas primeiras linhas permitem a criação de relatórios de erros – elas vão contar para você se a execução do script falhar.

$from = "test@hostinger-tutorials.com";

Essa linha deverá conter o endereço de email que está enviado a mensagem.

A maioria dos provedores não permite que você use um endereço aleatório aqui, já que isso é algo que poderia servir para ataques de spoofing.

Use um email que foi criado para o seu domínio ou marca para executar o PHP mail de maneira bem-sucedida.

$to = "test@gmail.com";

Aqui está onde você insere o endereço de email de quem vai receber a mensagem.

$subject = "Checking PHP mail";

Insira o assunto do email aqui.

$message = "PHP mail works just fine";

Aqui é onde você pode escrever o corpo da sua mensagem.

$headers = "From:" . $from;

Especifica informações cruciais, como o endereço de quem enviou, a local para aonde irá a reposta, etc.

mail ($to,$subject,$message,$headers);

Essa linha é usada para executar a função.

echo "The email message was sent.";

Essa mensagem vai aparecer caso o script tenha sido executado com sucesso.

Como Usar o PHPMailer para Enviar Emails

O PHPMailer é uma popular biblioteca de envio de email PHP. Ela suporta o envio de emails através da função mail() ou do Protocolo de Transferência de Correio Simples (SMTP).

Essa biblioteca simplifica o complicado processo de criar um email PHP ao proporcionar um conjunto de funções para criar e enviar um email.

A instalação do PHPMailer é bem simples, especialmente se você já possui o Composer instalado. Se você está usando a hospedagem de site da Hostinger, não é necessário se preocupar com isso, já que a nossa hospedagem já vem com ele pré-instalado em todos os planos.

De qualquer modo, se você precisar instalar o PHPMailer de maneira manual, é necessário se conectar com a sua conta de hospedagem através de um terminal SSH. Siga esses passos:

  1. Baixe e instale o cliente PuTTY SSH.
  2. Vá até o painel de controle do hPanel, encontre e clique em Acesso SSH na seção Avançado.
  3. Anote suas Informações de Acesso SSH. Você vai precisar do seu SSH IP, da porta, do nome de usuário e da senha SSH.
  4. Abra o PuTTY e então defina o seu SSH IP e sua porta de acordo.
    tela para inserção dos dados no putty
  5. Pressione Abrir e uma janela de comando vai aparecer. Digite seu nome de usuário SSH e sua senha. Assim que tiver feito isso, aperte enter
  6. NOTA: o PuTTY NÃO vai exibir sua senha. Não fique confuso se a sua senha não aparecer na tela.

  7. Execute o seguinte comando:
    cd public_html
  8. Aperte Enter, e então execute este comando:
    composer require phpmailer/phpmailer
  9. Aguarde um momento até que o processo de instalação seja finalizado.
processo de instalação do phpmailer usando putty

Como Usar o PHPMailer com o SMTP da Hostinger

Uma vez que o PHPMailer estiver pronto, você pode usá-lo para enviar emails PHP através do SMTP da Hostinger.

  1. Crie uma conta de email ao acessar o hPanel e então vá para Contas de Email -> Criar uma Nova Conta de Email. Preencha um novo endereço de email e defina uma senha antes de clicar em Create.
    criação de novo email no hpanel da hostinger
  2. Assim que tiver feito isso, preste atenção nos seus detalhes de SMTP, que estão localizados na mesma página:
    detalhes de email da hostinger

    NOTA: Você deve se lembrar do nome de usuário da sua conta de email, da senha da conta, do host SMTP, e a porta SMTP para enviar um email através do PHPMailer.

  3. Crie um arquivo testphpmailer.php na Public_html. Acesse o painel de controle do hPanel e clique em Gerenciador de Arquivos.
  4. Pressione Add New (Adicionar Novo). Dê o nome de testphpmailer.php para o seu arquivo e clique em Create (Criar).
  5. Clique duas vezes no novo arquivo testphpmailer.php e então copie e cole o seguinte:
    <?php
    use PHPMailer\PHPMailer\PHPMailer;
    require 'vendor/autoload.php';
    $mail = new PHPMailer;
    $mail->isSMTP();
    $mail->SMTPDebug = 2;
    $mail->Host = 'smtp.hostinger.com';
    $mail->Port = 587;
    $mail->SMTPAuth = true;
    $mail->Username = 'test@hostinger-tutorials.com';
    $mail->Password = 'SUA SENHA AQUI';
    $mail->setFrom('test@hostinger-tutorials.com', 'Your Name');
    $mail->addReplyTo('test@hostinger-tutorials.com', 'Your Name');
    $mail->addAddress('exemplo@email.com', 'Receiver Name');
    $mail->Subject = 'Testing PHPMailer';
    $mail->msgHTML(file_get_contents('message.html'), __DIR__);
    $mail->Body = 'This is a plain text message body';
    //$mail->addAttachment('test.txt');
    if (!$mail->send()) {
        echo 'Mailer Error: ' . $mail->ErrorInfo;
    } else {
        echo 'The email message was sent.';
    }
    ?>
  6. Modifique o código acima do jeito que preferir. Por exemplo, você precisa substituir SUA SENHA AQUI com a senha do seu email ou test@hostinger-tutorials.com com o seu nome de usuário, exemplo@gmail.com com o endereço de email do destinatário, etc. Assim que tiver feito isso, clique em Save & Close (Salvar e Fechar).
  7. Seu PHPMailer agora está pronto para ser usado. Execute o script ao inserir SeuDominio.com/testphpmailer.php no seu navegador.

O Que Significa Cada Componente do PHPMailer

Para compreender como o PHPMailer funciona, vamos investigar o exemplo de script acima, que usa SMTP para entrega de emails. Aqui está uma explicação de cada componente:

use PHPMailer\PHPMailer\PHPMailer;

Essa linha importa a classe do PHPMailer para o namespace global.

require '../vendor/autoload.php';

Então são incluídas as várias bibliotecas que o PHPMailer necessita.

$mail->

Todas as variáveis similares contêm informações vitais, como detalhes do servidor, cabeçalhos de mensagens, anexos e mais. Em suma, eles garantem que quem está enviando a mensagem está protegido com autenticação SMTP.

if (!$mail->send()) {

Define o que acontece quando os scripts são executados.

echo 'Mailer Error: ' . $mail->ErrorInfo;

Vai exibir uma mensagem de erro com uma explicação quando o envio do script falhar.

} else {

Especifica o que acontece se o script é executado.

echo 'The email message was sent!';

Se o email foi enviado com sucesso, esta mensagem vai aparecer.

DICA: a linha SMTPDebug = 2; só é útil quando você testa um script e quer ver como ele funciona. Você precisa mudá-la para SMTPDebug=0; se você já terminou de fazer os seus testes. Isso é feito para evitar que o usuário final veja o relatório de entrega do SMTP.

Se você prestou atenção, vai perceber que estamos fazendo algo diferente em comparação com o primeiro exemplo – estamos enviando uma mensagem HTML ao invés de um texto simples.

Portanto, a sua mensagem vai carregar o seu conteúdo a partir do arquivo message.html, que está localizado no mesmo diretório – public_html.

Este formato traz uma maior funcionalidade, se comparado com mensagens simples de texto, já que o HTML é altamente customizável. Você pode mudar a cor, o estilo, a imagem ou até incluir arquivos multimídia que geralmente são obsoletos num email de texto simples.

Formulário de Contato via PHPMailer

Você pode usar o PHPMailer para mais do que apenas enviar um simples email PHP. Uma maneira que você pode utilizá-lo é criando um formulário de contato através do qual o seu público-alvo pode entrar em contato com você.

Aqui está um exemplo do script:

<?php
use PHPMailer\PHPMailer\PHPMailer;
require 'vendor/autoload.php';
    $mail = new PHPMailer;
    $mail->isSMTP();
    $mail->Host = 'smtp.hostinger.com';
    $mail->Port = 587;
    $mail->SMTPAuth = true;
    $mail->Username = 'test@hostinger-tutorials.com';
    $mail->Password = 'EMAIL_ACCOUNT_PASSWORD';
    $mail->setFrom('test@hostinger-tutorials.com', 'Mr. Drago');
    $mail->addAddress('exemplo@gmail.com', 'Nome do Destinatário');
    if ($mail->addReplyTo($_POST['email'], $_POST['name'])) {
        $mail->Subject = 'PHPMailer contact form';
        $mail->isHTML(false);
        $mail->Body = <<<EOT
Email: {$_POST['email']}
Name: {$_POST['name']}
Message: {$_POST['message']}
EOT;
        if (!$mail->send()) {
            $msg = 'Sorry, something went wrong. Please try again later.';
        } else {
            $msg = 'Message sent! Thanks for contacting us.';
        }
    } else {
        $msg = 'Share it with us!';
    }
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Contact form</title>
</head>
<body>
<h1>Do You Have Anything in Mind?</h1>
<?php if (!empty($msg)) {
    echo "<h2>$msg</h2>";
} ?>
<form method="POST">
    <label for="name">Name: <input type="text" name="name" id="name"></label><br><br>
    <label for="email">Email: <input type="email" name="email" id="email"></label><br><br>   
    <label for="message">Message: <textarea name="message" id="message" rows="8" cols="20"></textarea></label><br><br>
    <input type="submit" value="Send">
</form>
</body>
</html>

Assim como os scripts anteriores, você precisa criar um novo arquivo na pasta public_html. Neste caso, nós demos o nome de formscript.php ao arquivo.

Edite a informação dentro do script de acordo com as suas necessidades. Depois disso, você só precisa rodar o script a partir do seu navegador.

Aqui está como o fica o resultado final:

resultado do formulario de phpmailer para enviar email php

Assim que o cliente enviar um email PHP, ele vai receber um aviso de confirmação, e o conteúdo será enviado para a caixa de entrada do email que você inseriu aqui:

$mail->addAddress('exemplo@gmail.com', 'Nome do Destinatário');

DICA: Caso o formulário de contato do PHPMailer não funcione, adicione a linha $mail->SMTPDebug = 2; para ver o que está causando esse problema. Não se esqueça de apagá-la ou de mudar o 2 para 0 quando tiver terminado.

O PHPMailer oferece mais exemplos que você pode experimentar no repositório oficial deles no GitHub. Além disso, se você está usando o WordPress, pode facilmente criar um formulário de contato para lhe ajudar com a ajuda de plugins como WP Forms, Formidable Forms ou Gravity Forms.

página inicial do site do plugin wpforms para enviar email php

Como Resolver Erros Comuns do PHP Mail e do PHPMailer

Você pode encontrar erros ocasionalmente quando usa o PHP Mail ou o PHPMailer. Aqui está uma lista com os erros mais comuns e os caminhos para corrigi-los.

Endereço de Envio Rejeitado: Não é de Propriedade do Usuário

Este erro significa que o servidor não conseguiu promover a autenticação usando as informações que você providenciou. Ele pode aparecer em inglês, como “Sender Address Rejected: Not Owned by the User”.

Para corrigi-lo, confira o endereço que você usou para enviar um email PHP e garanta que ele corresponde a uma caixa de email já existente.

Se ele está apontando para a caixa de entrada errada, altere-a de acordo com as informações corretas. Também cheque se você habilitou os registros SPF.

Gmail Não Conseguiu Verificar que SeuDominio.com Enviou Esta Mensagem

Se você ver esse aviso quando está testando um script de PHP Mail. ele pode significar uma dessas duas coisas:

  • Seu registro SPF não está habilidade.
  • Você enviou um email a partir de um endereço que não existe ou não pertence a você. Nesse caso, garanta que você vai usar informações de autenticação SMTP válidas.

Lembrando que esse erro aparecerá como “Gmail Couldn’t Verify That YourDomain.com Sent This Message” em páginas em inglês.

Email vai para a Pasta de Spam

Existem diversos motivos que podem levar um PHP mail a aparecer como spam. Aqui estão os mais comuns:

  • Assunto enganoso ou que lembra spam. Alguns exemplos disso seriam palavras como “teste” “testando“, “alô“, “urgente” ou algo do tipo. Garanta que você colocou uma intenção clara no assunto da sua mensagem.
  • Você está usando o endereço de envio incorreto, o que faz com que as medidas de segurança filtrem o seu email. Isso é feito para evitar spoofing e golpes via email.
  • Você está usando palavras de gatilho de spam. Essa categoria inclui frases como “ótima oferta“, “clique aqui“, “promoção especial“, “isto não é spam” e assim em diante. Tente modificar o conteúdo da sua mensagem para ver se esse é o caso.
  • Sua lista de mailing não possui um botão de cancelar inscrição. Quando muitas pessoas reportam o seu email como spam, vai ser difícil de evitar o filtro de spam. Ter um botão para cancelar a inscrição é uma ótima maneira de evitar isso fazer com que os seus leitores confiem mais em você.

Conclusão

Parabéns, agora você se familiarizou com o recurso de enviar email por PHP e aprendeu a usar o PHPMailer para enviar emails com autenticação SMTP. Apesar deste tutorial proporcionar exemplos básicos, a mesma sintaxe pode ser usada para desenvolver um formulário de contato ou outras extensões para o seu site.

Para uma informação mais aprofundada, não se esqueça de conferir a página do projeto PHPMailer. Se você tem dicas, truques ou ideias para compartilhar, estamos ansiosos para ouvi-las na seção de comentários abaixo.

Author
O autor

Carlos E.

Carlos Estrella é formado em jornalismo pela UFSC e tem as funções de redator, tradutor e SEO na Hostinger Brasil. Já trabalhou com jornalismo de games e tecnologia e hoje aplica essa experiência escrevendo posts e tutoriais no blog da Hostinger. Suas paixões incluem games, dar rolês com a namorada e amigos e ler artigos aleatórios da Wikipédia de madrugada.