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

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.

Está com problemas para enviar emails? O PHP mail() é ativado por padrão na Hostinger!

Hospedagem com Desconto

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 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. Confira os passos para como habilitá-lo aqui.
  • 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.

O Autor

Author

Carlos E. / @carlosfelipe

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.

Tutoriais relacionados

Author

willian Responder

setembro 24 2017

Olá, estou tentando enviar mais de 10 e-mail com essa função, porem ele só esta enviando 8 no maximo, o que será que esta acontecendo?

    Author

    arianegoncalves

    Respondeu em setembro 25 2017

    Olá, Willian. O formulário informado utiliza o envio de e-mails pelo PHP, esse envio dependendo da conta tem como recurso até 60 e-mails enviados em um minuto. Já no SMTP esse limite é 8, assim como o webmail. Por gentileza, verifique se está usando o envio pelo PHP mesmo e não pode formulários autenticados (que utilizam seu e-mail, senha e porta smtp) pois esses e-mails são limitados em 8. :)

      Author

      Marina

      Respondeu em novembro 12 2017

      Quando tento executar esse código vem um erro na linha da função mail,o que posso fazer para superar esse erro!

        Author

        arianegoncalves

        Respondeu em novembro 13 2017

        Oi, Marina. Fala pra gente qual o erro e em qual linha aparece? Ou então você pode entrar em contato com o nosso suporte pelo https://www.hostinger.com.br/contatos ;) Vamos resolver isso aí! Abraço!

Author

luan Eduardo Responder

fevereiro 13 2018

Quando executo ele, aparece o código e não envia o e-mail. O que eu faço?

    Author

    arianegoncalves

    Respondeu em fevereiro 20 2018

    Oi, Luan. Qual código aparece? Entre em contato com nosso suporte que vamos te ajudar :) Abraço.

Author

Adriano Responder

abril 06 2018

Olá, tudo bem. Fiz exatamente copiando todo script e alterando para meus emails e funcionou bem, porém só que o remetente aparece o principal de meu domínio (sendo meu usuario de cpanel @myserver...) e não o email que criei para este domínio atendimento@meudomínio,... O que poderia fazer para mudar isso? Desde já agradeço.

    Author

    arianegoncalves

    Respondeu em agosto 30 2018

    Oi, Adriano. Nesse exemplo do blog, o guia dispara e-mails onde o servidor não requer uma autenticação, é ótimo para formulários de contato por exemplo. Porém, para disparar e-mails usando o seu endereço você precisa realizar algumas autenticações por parte do servidor. O que recomendamos é utilizar o phpmailer, é uma biblioteca em php pronta para disparar e-mails, você pode baixar o projeto original por aqui: https://github.com/PHPMailer/PHPMailer Após subir o projeto para sua hospedagem pode criar um script de formulário disponibilizado pelo próprio phpmailer na página acima adaptando com as configurações que sua hospedagem fornece. PHPMailer/PHPMailer The classic email sending library for PHP Stars 11655 Language PHP Espero ter ajudado ;)

Author

THIAGO CORREA NEVES Responder

agosto 15 2018

Aqui funcionou, porém fiquei com uma dúvida. Eu queria colocar uma mensagem de resposta automática para quem envia o email. Como posso fazer isso?

    Author

    arianegoncalves

    Respondeu em agosto 20 2018

    Oi, Thiago Você precisa criar um e-mail para isso. * Coloque no formulário que vai enviar de contato@meudominio.com.br * Após isso cadastre uma resposta automática aqui: https://prnt.sc/kkyb14 com uma mensagem como "Obrigado por ter interesse em nosso serviço, em breve retornaremos o contato etc.." * Ao responderem o formulário para contato@meudominio.com.br a pessoa receberá essa mensagem acima. :) A única dificuldade nesse processo é que sempre que a pessoa enviar um e-mail para contato@meudominio.com.br receberá essa mensagem automática. Então aconselhamos a criar um e-mail que só receba, e não enviar nada por ele. Um nome comum utilizado para isso é no-reply/noreply@meudominio.com.br Espero ter ajudado!

Author

nathan Responder

dezembro 04 2018

top

Author

Orlando Felipe Martins da Costa Responder

junho 12 2019

Rafael, Eu usava o envio de e-mail no meu site, quando era "orlandofmc.16mb.com". Após migrar para "orlandofmc.xyz" as rotinas de envio de e-mails deixaram de funcionar. Ainda hoje é assim: usando o código abaixo (o mesmo que está nesta página), em "orlandofmc.16mb.com" funciona, mas não funciona em "orlandofmc.xyz". Nos dois casos, vem a mensagem de que enviou, mas, no último caso, de fato,não envia. Não recebo no yahoo. O código:

Author

Orlando Felipe Martins da Costa Responder

junho 12 2019

Postei uma mensagem aqui hoje, 12/06/19, pela manhã, e ela apareceu normal, com a mensagem dizendo que estava aguardando aprovação. À tarde, 17h00, ela não está mais aqui.

    Author

    Ariane G.

    Respondeu em junho 13 2019

    Oi, Orlando. Acredito que sua mensagem veio incompleta. Mas de qualquer forma, você pode falar com um dos nossos agentes do suporte direto pelo painel de controle da sua hospedagem que eles estão online e vão te responder em menos de 3 minutos! :)

Author

Fhilipe Alves Responder

julho 04 2019

Testei seu codigo e diz "A mensagem de e-mail foi enviada." mas nao chega nada! O que pode ser??

    Author

    Ariane G.

    Respondeu em julho 10 2019

    Oi Fhilipe Pode falar com um dos nossos agentes através do seu painel de controle que eles irão ajudar você!

Author

mario Responder

julho 27 2019

Tem como anexar uma imagem que esta na url usando este script?

Author

mario Responder

julho 27 2019

como anexar um arquivo?

Author

Paulo Junior Responder

agosto 14 2019

Criei um formulário de cadastro para o usuário, dai os dados vão ser enviado direto para meu email usando o php mail, tem algum limite de emails que posso esta recebendo ou enviando, atualmente estou usando 000webhost!

Author

André Luiz Responder

janeiro 27 2021

Boa tarde Onde eu consigo o arquivo autoload.php, que está em require 'vendor/autoload.php';? Não tenho o mesmo e estou tendo erro na página. Acredito ser a falta deste.

    Author

    Carlos E.

    Respondeu em janeiro 29 2021

    Olá, André Luiz! Você pode tentar rodar o comando comoposer install, que vai importar os pacotes e criar a pasta vendor!

Deixe uma resposta

Comentário*

Nome*

Email*

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.

Faça parte da Hostinger agora!