O email é uma das ferramentas mais importantes para qualquer negócio. Através deles negócios são consolidados todos os dias. E, também através deles, pessoas são lembradas de suas obrigações como pagamentos a efetuar, compras para concretizar, e ainda são avisadas do estado de suas compras, por exemplo.
E nesse post, vou deixar pronta uma função chamada sendHtmlEmail
para você automatizar o envio de emails com phpmailer seja no seu site ou sistema em PHP.
De brinde, vamos fazer nesse exemplo um simples formulário de contato, que você pode até adaptar para o seu site. Ele usará JQuery para enviar os dados, o que significa que não precisará recarregar a página para enviar os dados. Ao invés disso, aparecerá um gif animado mostrando que está em processamento.
O que vou mostrar a seguir serve pra você entender o que está acontecendo, mas não é o código completo. No final desse post coloquei um link para baixar o código completo para testar.
Primeiro, vamos ao layout. Bom, essa parte é simples e vou usar BOOTSTRAP pra você se familiarizar (caso não conheça). A primeira parte fica assim:
<h1 id="contato">Teste do Formulário de Contato</h1>
<p>Um exemplo de uso do phpmailer</p>
<div id="formResult"></div>
<div id="formDiv">
<form id="messageForm" method="POST" action="post_contato.php">
<div class="form-group">
<label>Nome</label>
<input type="text" name="nome" class="form-control" placeholder="Seu Nome" required>
</div>
<div class="form-group">
<label>Email</label>
<input type="email" name="email" class="form-control" placeholder="name@example.com" required>
</div>
<div class="form-group">
<label>Mensagem</label>
<textarea name="mensagem" class="form-control" id="txtMensagem" rows="5"></textarea>
</div>
<button type="submit" class="btn btn-primary">Enviar</button>
</form>
</div>
E o resultado será este:

Em seguida, temos que enviar os dados do formulário para o servidor via JQuery (ajax). Então acrescentamos uma porção de javascript:
<script>
// Attach a submit handler to the form
$("#messageForm").submit(function(event) {
$(document).scrollTop($("#contato").offset().top);
$("#formDiv").slideUp();
$("#formResult").empty().append("<div style='text-align:center'><img src='images/ajax-loader.gif'></div>");
// Stop form from submitting normally
event.preventDefault();
// Get some values from elements on the page:
var $form = $(this),
nome = $form.find("input[name='nome']").val(),
email = $form.find("input[name='email']").val(),
mensagem = $("#txtMensagem").val(),
url = $form.attr("action");
// Send the data using post
var posting = $.post(url, {
nome: nome,
email: email,
mensagem: mensagem,
},
function(data) {
$("#formResult").empty().append(data);
});
});
</script>
Resumindo, a ideia desse trecho é:
- Quando o usuário clicar em enviar
$("#messageForm").submit
- Rolar a tela para a posição do formulário de contato, pois ele sumirá dando lugar ao gif animado.
- Evitar que o browser faça o envio padrão do formulário, o que iria recarregar toda a página.
- Pegar os dados do formulário e enviar usando
$.post
para o scriptpost_contato.php
- Colocar o resultado no lugar do gif animado.
Agora vamos ao post_contato.php
. Esse arquivo fica no servidor e tem a função de receber os dados e disparar o email.
Aqui eu vou resumir este arquivo para explicar, mas você pode baixá-lo completo no final desse post. Na linha 40 a mágica é feita.
<?php
require_once 'mailfunction.php';
$webSiteEmail = "fale@iotbras.com";
$result = 0;
if (isset($_POST["nome"])) {
//Dados do formulário
$nome = $_POST["nome"];
$email = $_POST["email"];
$message = $_POST["mensagem"];
$messageHTML = str_replace("\n", "<br/>", $_POST["mensagem"]);
//A versão HTML do email
/****************************************************** */
$msgHtml = <<<HTML
<div style="font-family: 'Bookman Old Style'">
...resumido...
</div>
HTML; //Este fechamento de heredoc não deve ser identado
//Mantenha sempre na coluna 0, mesmo se for colocado dentro de uma função.
//A versão texto da mensagem
/****************************************************** */
$msgPlain = <<<TXT
SEU SITE
-------------
...resumido...
www.seusite.com.br
TXT;
/****************************************************** */
//Enviar para o cliente e também para mim
//coloque aqui o email que quiser receber o contato
//Neste caso, estou usando $webSiteEmail, pois checo ele diariamente
//se for algo do tipo noreply, mude o $webSiteEmail para algumemailseu@seusite.com.br
$to_ar = array($webSiteEmail, $email);
$subject = "Contato no Site";
$from_name = $_POST["email"];
if (sendHtmlEmail($to_ar, $subject, $msgHtml, $msgPlain,
["ArquivoAnexo.txt"], $sendHtmlEmail_config)) {
$result = 1;
}
}
?>
<div class="alert <?php echo ($result == 1) ? "alert-success" : "alert-danger"; ?>">
...resumido html que mostra o resultado para o usuário...
</div>
Finalmente, a função sendHtmlEmail eu deixei num arquivo separado para você poder reaproveitar. Segue:
<?php
function sharedf_autoload($className)
{
$filename = 'phpmailer/class.' . strtolower($className) . '.php';
if (is_readable($filename)) {
require $filename;
} else {
// Error Generation Code Here
echo "Class not founded: " . $className;
die();
}
}
spl_autoload_register("sharedf_autoload");
//Essas configurações normalmente ficam num arquivo de configuração
//preencha com os dados do seu provedor de email.
//Opção com SSL
$sendHtmlEmail_config = [
"mail_from" => "fale@seuSiteAqui.com",
"mail_host" => "mail.seuSiteAqui.com",
"mail_user" => "fale@seuSiteAqui.com",
"mail_pass" => "senhaAqui",
"mail_port" => 465
];
function sendHtmlEmail(
$to_ar, //Um array de emails para enviar com copias
$subject, //Assunto da mensagem
$msgHtml, //Conteúdo em HTML
$msgPlain, //Conteúdo em texto normal
$attach = [], //Anexos
$configs //Configurações do servidor de emails
) {
$mail = new PHPMailer;
//$mail->Timeout = 10;
$mail->CharSet = 'UTF-8';
//$mail->SMTPDebug = 3; //Ativar saida de erros (escreve erros na saida)
$mail->isSMTP();
$mail->Host = $configs["mail_host"];
$mail->SMTPAuth = true;
$mail->Username = $configs["mail_user"];
$mail->Password = $configs["mail_pass"];
$mail->SMTPSecure = 'ssl';
//$mail->SMTPSecure = 'tls';
$mail->Port = $configs["mail_port"];
$mail->setFrom($configs["mail_from"], $configs["mail_from"]);
foreach ($to_ar as $v) {
$mail->addAddress($v);
}
$mail->isHTML(true);
$mail->Subject = $subject;
$mail->Body = $msgHtml;
$mail->AltBody = $msgPlain;
if (count($attach) > 0) {
foreach ($attach as $v) {
$mail->AddAttachment($v);
}
}
if (!$mail->send()) {
//Acao extra caso ocorra um erro, salve no seu arquivo de log.
//Descomente a seguir se estiver tendo problemas, ou salve para o log
//echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
//echo 'Message has been sent';
return true;
}
return false;
}
Agora é só incorporar no seu site.
Estes são os arquivos para download. Lembre de configurar o seu email no arquivo mailfunction.php
.
Pra você aprender
Agora, para conseguir desenvolver soluções aos mais diversos problemas, você precisa aprender a partir de um conteúdo mais completo e organizado.
Aqui tem um curso que vai acelerar a sua carreira no desenvolvimento WEB:
Curso Desenvolvimento WEB e Aplicativo Flutter
Aprenda desenvolvimento WEB e Aplicativo de forma integrada. Afinal, os aplicativos mais lucrativos sempre contam com uma plataforma WEB de suporte!!