fevereiro 25, 2021
8min de leitura
Carlos E.
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).
Conteúdo
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!
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.
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.
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.
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:
NOTA: o PuTTY NÃO vai exibir sua senha. Não fique confuso se a sua senha não aparecer na tela.
cd public_html
composer require phpmailer/phpmailer
Uma vez que o PHPMailer estiver pronto, você pode usá-lo para enviar emails PHP através do SMTP 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.
<?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.'; } ?>
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.
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.
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.
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.
Se você ver esse aviso quando está testando um script de PHP Mail. ele pode significar uma dessas duas coisas:
Lembrando que esse erro aparecerá como “Gmail Couldn’t Verify That YourDomain.com Sent This Message” em páginas em inglês.
Existem diversos motivos que podem levar um PHP mail a aparecer como spam. Aqui estão os mais comuns:
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.
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?
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!
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!
fevereiro 13 2018
Quando executo ele, aparece o código e não envia o e-mail. O que eu faço?
Respondeu em fevereiro 20 2018
Oi, Luan. Qual código aparece? Entre em contato com nosso suporte que vamos te ajudar :) Abraço.
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.
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 ;)
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?
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!
dezembro 04 2018
top
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:
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.
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! :)
julho 04 2019
Testei seu codigo e diz "A mensagem de e-mail foi enviada." mas nao chega nada! O que pode ser??
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ê!
julho 27 2019
Tem como anexar uma imagem que esta na url usando este script?
julho 27 2019
como anexar um arquivo?
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!
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.
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!
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. :)