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.
Por padrão, o serviço do Sendmail já fica habilitado. Ainda assim, é recomendável você checar novamente para ter certeza disso.
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.
- Para acessar o hPanel, clique no Gerenciador de Arquivos.
- Crie um novo arquivo ao clicar em Add New (Adicionar Novo). Vamos nomear esse arquivo testmail.php e então clicar em Create (Criar).
- 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.
- 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
- O endereço para o qual você enviou a mensagem deverá recebê-la sem problemas.
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:
- Baixe e instale o cliente PuTTY SSH.
- Vá até o painel de controle do hPanel, encontre e clique em Acesso SSH na seção Avançado.
- 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.
- Abra o PuTTY e então defina o seu SSH IP e sua porta de acordo.
- 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
NOTA: o PuTTY NÃO vai exibir sua senha. Não fique confuso se a sua senha não aparecer na tela.
- Execute o seguinte comando:
cd public_html
- Aperte Enter, e então execute este comando:
composer require phpmailer/phpmailer
- Aguarde um momento até que o processo de instalação seja finalizado.
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.
- 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.
- Assim que tiver feito isso, preste atenção nos seus detalhes de SMTP, que estão localizados na mesma página:
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.
- Crie um arquivo testphpmailer.php na Public_html. Acesse o painel de controle do hPanel e clique em Gerenciador de Arquivos.
- Pressione Add New (Adicionar Novo). Dê o nome de testphpmailer.php para o seu arquivo e clique em Create (Criar).
- 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.'; } ?>
- 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).
- 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:
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.
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.
Comentários
September 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?
September 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. :)
November 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!
November 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!
February 13 2018
Quando executo ele, aparece o código e não envia o e-mail. O que eu faço?
February 20 2018
Oi, Luan. Qual código aparece? Entre em contato com nosso suporte que vamos te ajudar :) Abraço.
April 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.
August 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 ;)August 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?
August 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!
December 04 2018
top
June 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:
June 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.
June 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! :)
July 04 2019
Testei seu codigo e diz "A mensagem de e-mail foi enviada." mas nao chega nada! O que pode ser??
July 10 2019
Oi Fhilipe Pode falar com um dos nossos agentes através do seu painel de controle que eles irão ajudar você!
July 27 2019
Tem como anexar uma imagem que esta na url usando este script?
July 27 2019
como anexar um arquivo?
August 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!
January 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.
January 29 2021
Olá, André Luiz! Você pode tentar rodar o comando
comoposer install
, que vai importar os pacotes e criar a pasta vendor!March 28 2021
Olá, quais são as credenciais que devo colocar nessa parte do código? $mail->Username = 'test@hostinger-tutorials.com'; $mail->Password = 'EMAIL_ACCOUNT_PASSWORD';
April 09 2021
Olá, Filipe. Neste caso, você deve colocar o seu endereço de email e a senha deste email!
June 05 2021
Eu tento executar o código de exemplo do phpmailer e ocorre erro 524. Composer está instalado. Log de erro do php está habilitado (e não aparece nada).
June 25 2021
Olá, André! O erro 524 geralmente indica que a conexão com o servidor foi encerrada porque o tempo se esgotou. Recomendamos que você cheque novamente se tanto o servidor de envio quanto o de recebimento estão ativos e operando. Caso contrário, entre em contato com nosso time de suporte ?
August 11 2021
Prezados, boa tarde! Meu problema é que fiz todas as configurações, esta funcionando, mas quando chega a mensagem de confirmação chega desta forma "Error: Email enviado com sucesso". Não entendo por que a mensagem de erro na frente. Já fiz de tudo, mas não conheço quase nada da linguagem PHP. Os e-mails são enviados normalmente. Se alguém poder me ajudar fico super grato.
August 19 2021
Olá, Fledson! Então, o email chega no destinatário? Se tiver chegando, está tudo certo, é apenas uma peculiaridade do PHPMailer mesmo. Caso não esteja chegando, sugiro que você vá para o site Mail-Tester e então copie o endereço de email que aparece. Então envie uma mensagem para esse endereço e o site vai mostrar os possíveis erros.
October 13 2021
Olá, eu tenho uma dúvida...depois que o e-mail é enviado como posso fazer para recuperar alguma informação da minha caixa de correio através do php
October 15 2021
Olá, Mário! Você pode usar o comando
imap_fetch_overview
para recuperar informações de um email php!December 27 2021
Obtenho este erro: Warning: mail(): Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in
January 07 2022
Olá Vitor, tudo bem? Então, isso pode ser algum problema na informação de servidor SMTP utilizado. Tenta inserir o servidor smtp.hostinger.com pela porta 465 SSL e vê se resolve!?
February 18 2022
Muito obrigado pela explicação!
November 12 2022
tem como usar dois $headers ? Gostaria de usar o text/html e o from, tô tentando e tá ficando só um. (No primeiro código)
December 03 2022
Olá, isso é possível sim! Contudo, só é recomendado usar um de cada para cada "seção" (ex.: body, section, etc.) ?
November 17 2022
Todos os emails que envio vão para a caixa de Spam. E só tem escrita, sem edição.
December 03 2022
Olá, Felipe! Se você tem uma conta de email profissional com a gente, dá uma conversada com nosso time de suporte ao cliente ?
May 22 2024
Esse artigo está ultrapassado. A minha interface é completamente diferente da que é mostrada nos prints e simplesmente não consigo acessar as informações necessárias.
May 24 2024
Oi, Miguel, tudo bem? Obrigado pelo apontamento, vamos adicionar o artigo à nossa lista de auditorias para atualizá-lo assim que possível!