PHPMailer - Validação de campos, e-mail e domínio para formulário de contato e envio
Publicado por Flavio dos Santos em 16/01/2017
[ Hits: 8.855 ]
<form name="contato" id="todoform" onSubmit="return validar(this)" method="post" action="validacontato.php" enctype="multipart/form-data" /> <br> <br> <table width="100%" border="0" align="center"> <tr> <td width="30px"> <div align="right"><span class="texto">Nome : </span></div> </td> <td ><input type="text" id="nome" size="55" name="nome" placeholder=" Nome" onfocus="this.style.backgroundColor='#FFFFCC';" onBlur = "vernome(this);" /> </td> </tr> <tr> <td width="30px"> <div align="right" class="texto">Seu E-mail : </div> </td> <td width="67%"><input type="text" class="email" id="email" size="55" name="email" placeholder=" Email valido" onfocus="this.style.backgroundColor='#FFFFCC';" onBlur="veremail(this);"/></td> </tr> <tr> <td > </td> <td> </td> </tr> <tr> <td width="30px" > <div align="right" class="texto">Assunto : </div> </td> <td > <input type="text" id="assunto" size="55" name="assunto" placeholder=" Assunto" onfocus="this.style.backgroundColor='#FFFFCC';" onBlur="verassunto(this);"/> </td> </tr> <tr> <td width="30px"><div align="right" class="texto">Mensagem: </div></td> <td ><textarea cols="60" id="mensagem" rows="5" name="mensagem" placeholder=" Mensagem" onfocus="this.style.backgroundColor='#FFFFCC';" onBlur="vermensagem(this);" onkeyup="mostrarResultado(this.value,140,'spcontando');contarCaracteres(this.value,140,'sprestante')"></textarea><br /> <span id="spcontando" style="font-family:Georgia;">Digite sua mensagem.</span> <span id="sprestante" style="font-family:Georgia;"></span> </td> </tr> <tr> <td width="30px"><div align="right" class="texto">Anexo: </div></td> <td ><input name="arquivo" id="arquivo" type="file" /></td> <!-- <td ><input name="anexo" id="anexo" type="file" /></td> --> </tr> <tr> <td> </td> <td > <input type="submit" name="enviarFormulario" value="Enviar" /></td> </tr> </table> </form>
<script language="javascript" type="text/javascript">
function vernome(){
var nome = contato.nome.value;
if (nome == "" || nome.length <1) {
alert("O campo nome deve ter acima de 3 caracteres.");
nome.focus();
return (false);
}
}
function veremail() {
var email = contato.email.value;
if (email == "" || email.indexOf('@')==-1 || email.indexOf('.')==-1){
alert("Campo email invalido");
email.focus();
return (false);
}
}
function verassunto() {
var assunto = contato.assunto.value;
if (assunto == "" || assunto.length < 1) {
alert("Preencher O campo assunto !!!");
assunto.focus();
return (false);
}
}
function vermensagem() {
var mensagem = contato.mensagem.value;
if (mensagem == "" || mensagem.length < 1) {
alert("Preencher O campo mensagem !!!");
mensagem.focus();
return (false);
}
}
// Contador de Caracteres na Textarea
// do site: http://blog.vilourenco.com.br/javascript-contado-e-limitando-caracteres-em-um-textarea/
function mostrarResultado(box,num_max,mensagemspan){
var contagem_carac = box.length;
if (contagem_carac != 0){
document.getElementById(mensagemspan).innerHTML = contagem_carac + " caracteres digitados.";
if (contagem_carac == 1){
document.getElementById(mensagemspan).innerHTML = contagem_carac + " caracter digitado.";
}
if (contagem_carac >= num_max){
document.getElementById(mensagemspan).innerHTML = "Limite de caracteres excedido!";
}
}else{
document.getElementById(mensagemspan).innerHTML = "Digite sua mensagem.";
}
}
function contarCaracteres(box,valor,mensagemspan){
var conta = valor - box.length;
document.getElementById(mensagemspan).innerHTML = "Você pode digitar " + conta + " caracteres.";
if(box.length >= valor){
document.getElementById(mensagemspan).innerHTML = "Opss.. você não pode mais digitar..";
document.getElementById("mensagem").value = document.getElementById("mensagem").value.substr(0,valor);
}
}
function validar(){
var nome = contato.nome.value;
var email = contato.email.value;
var assunto = contato.assunto.value;
var mensagem = document.getElementById("mensagem").value;
if(nome == "" || email == "" || assunto == "" || mensagem == "") {
alert ("Há algum campo vazio.");
nome.focus();
return (false);
}
}
</script>
<?php
// --------------------------------------- RECEBE os dados enviados pelo formulario
// evitar email injection
function clean_string($string) {
$bad = array(
"content-type",
"bcc:",
"to:",
"cc:",
"href"
);
return str_replace($bad, "", $string);
}
$nome = clean_string($_POST['nome']);
$email = clean_string($_POST['email']);
$nome = strip_tags(trim($_POST["nome"])); // tira espaços e instruções HTML ou PHP
$email = strip_tags(trim($_POST["email"]));
$assunto = strip_tags(trim($_POST["assunto"]));
$empresa = strip_tags(trim($_POST["empresa"]));
$mensagem = strip_tags(trim($_POST["mensagem"]));
$email_from = "contato@acharnobairro.com.br";
$refresh = '<meta http-equiv="refresh" content="1; url=teste.php" />';
$arquivo = $_FILES["arquivo"];
$tamanho = 512000; // 512 Kb para tamanho maximo de aceite de arquivo enviado pelo cliente
// EXTENSÕES DE SERVIDORES NO BRASIL
$ext = array('.adm.br'=>'.adm.br','.adv.br'=>'.adv.br','.arq.br'=>'.arq.br','.agr.br'=>'.agr.br','.am.br'=>'.am.br','.art.br'=>'.art.br','.ato.br'=>'.ato.br','.bio.br'=>'.bio.br','.biz.br'=>'.biz.br','.bmd.br'=>'.bmd.br','.blog.br'=>'.blog.br','.br'=>'.br','.cim.br'=>'.cim.br','.com'=>'.com','.com.br'=>'.com.br','.cng.br'=>'.cng.br','.cnt.br'=>'.cnt.br','.coop.br'=>'.coop.br','.cri.br'=>'.cri.br','.def.br'=>'.def.br','.ecn.br'=>'.ecn.br','.eco.br'=>'.eco.br','.edu.br'=>'.edu.br','.eng.br'=>'.eng.br','.emp.br'=>'.emp.br','.eti.br'=>'.eti.br','.esp.br'=>'.esp.br','.etc.br'=>'.etc.br','.far.br'=>'.far.br','.fnd.br'=>'.fnd.br','.fot.br'=>'.fot.br','.fst.br'=>'.fst.br','.fm.br'=>'.fm.br','.flog.br'=>'.flog.br','.ggf.br'=>'.ggf.br','.g12.br'=>'.g12.br','.gov'=>'.gov','.gov.br'=>'.gov.br','.imb.br'=>'.imb.br','.ind.br'=>'.ind.br','.inf.br'=>'.inf.br','.info.br'=>'.info.br','.jor.br'=>'.jor.br','.jus.br'=>'.jus.br','.lel.br'=>'.lel.br','.leg.br'=>'.leg.br','.mat.br'=>'.mat.br','.med.br'=>'.med.br','.mil.br'=>'.mil.br','.mp.br'=>'.mp.br','.mus.br'=>'.mus.br','.nom.br'=>'.nom.br','.not.br'=>'.not.br','.ntr.br'=>'.ntr.br','.odo.br'=>'.odo.br','.org'=>'.org','.org.br'=>'.org.br','.ppg.br'=>'.ppg.br','.pro.br'=>'.pro.br','.psc.br'=>'.psc.br','.psi.br'=>'.psi.br','.qsl.br'=>'.qsl.br','.radio.br'=>'.radio.br','.rec.br'=>'.rec.br','.slg.br'=>'.slg.br','.taxi.br'=>'.taxi.br','.teo.br'=>'.teo.br','.tmp.br'=>'.tmp.br','.trd.br'=>'.trd.br','.tur.br'=>'.tur.br','.tv'=>'.tv','.tv.br'=>'.tv.br','.wiki.br'=>'.wiki.br','.vet.br'=>'.vet.br','.vlog.br'=>'.vlog.br','.zlg.br'=>'.zlg.br');
// estas extensões foram tiradas da lista acima para facilitar o bloqueio de muitos SPAM pois, se não estiverem nela o filtro acusa: '.net'=>'.net','.net.br'=>'.net.br','.srv.br'=>'.srv.br',
// -----------------------------------------------------------------------------------------------------------------------------------
// Lista de emails não desejados
// cada linha pode conter muitos emails mas, para facilitar a manutenção, colocar uma quantidade que não dificulte.
// a cada linha um numero de diferenciação deve ser colocado e na ultima linha colocar todas as acrescentadas
$emailnao0 = array('parateste@naopode.com','outroemail@separadoporvirgula.srv.br');
$emailnao1 = array('linha1@provedor.srv.br','maisum@provedor.com');
$emailnao2 = array('linha2@xxxx.net.br','outro@xxx.net.br');
$emailnao3 = array('linha3@spamer.site','snd@spamer.site');
$emailnao4 = array('linha4@spamer.com.br','spamer@weboferta.srv.br');
$emailnao = array_merge($emailnao0, $emailnao1,$emailnao2,$emailnao3,$emailnao4);
// -----------------------------------------------------------------------------------------------------------------------------------
// Lista de dominios não desejados
// Não colocar o WWW, só o restante do dominio
$dominionao0 = array('naopode.com','a.bras1.net.br','c.bras1.net.br','g.net10.net.br','i.bras1.net.br','k.mdz10.net.br','x.mdz10.net.br','z.mdz10.net.br','h.negociobom.site');
$dominionao1 = array('r.negociobom.site','t.negociobom.site','topbases.com.br');
$dominionao2 = array('weboferta.srv.br','webofertas.net.br');
$dominionao3 = array('idcx.com.br');
$dominios = array_merge($dominionao0, $dominionao1,$dominionao2,$dominionao3);
// ----------------------------------------------------------------------------------------------------------------
// analisa os dados novamente caso o Javascript esteja desativado, será validado aqui.
if (empty($_POST["nome"])) {
echo "<script>alert('Nome Obrigatório')</script>";
//echo "<meta HTTP-EQUIV='refresh' CONTENT='0;URL=validaform.php'>";
echo "<script>history.go(-1);</script>";
exit;
}
if ($email=="") {
echo "<script>alert('Email Obrigatório')</script>";
echo "<script>history.go(-1);</script>";
exit;
}
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
echo "<script>alert('Email: só letras, sem acentos, sem espaços.')</script>";
echo "<script>history.go(-1);</script>";
exit;
}
if(strlen($email)>40){
echo "<script> alert ('Email até 40 caracteres, volte')</script>";
echo "<script>history.go(-1);</script>";
exit;
}
if (!preg_match("/^[0-9a-z\_\.\-]+\@[0-9a-z\_\.\-]*[0-9a-z\_\-\.]+[a-z]{2,3}$/i",$email)){
echo "<script>alert('Email: Acentos ou simbolos não permitidos.')</script>";
echo "<script>history.go(-1);</script>";
exit;
}
// analisa email, procura na lista dos Não Desejados
if( $key = array_search("$email", $emailnao) ){
echo "<script>alert('EMAIL NÃO PERMITIDO')</script>";
echo "<script>history.go(-1);</script>";
exit;
}
// analisa dominio, procura na lista de Dominios Não Desejados
$dominio = substr(strrchr($email, "@"), 1); //Usando STRRCHR, mostra tudo depois do @
foreach ($dominios as $key => $value) {
if ($value == $dominio) {echo "<script>alert('DOMINIO NÃO PERMITIDO')</script>";
echo "<script>history.go(-1);</script>";
exit;
}
}
// ------------------------------------------------ encontrar extensão do email
$prov = substr($dominio,-9,9); // conta os caracteres a partir da primeira posição(pode ser negativa), tantos caracteres indicados.
$servidor = stristr($dominio, '.'); // Retorna tudo da string apartir da primeira ocorrência do que procura até o final.
if (!isset($ext[$servidor])) { echo "<script>alert('Extensão inválida')</script>";
echo "<script>history.go(-1);</script>"; }
if ($assunto=="") {
echo "<script>alert('Assunto obrigatorio')</script>";
echo "<script>history.go(-1);</script>";
exit;
}
if ($mensagem == "") {
echo "<script>alert('Mensagem obrigatorio')</script>";
echo "<script>history.go(-1);</script>";
exit;
}
if ($arquivo['size'] > $tamanho) {
echo "<script>alert('O tamanho máximo é 500 Kb')</script>";
echo "<script>history.go(-1);</script>";
exit;
}
// -----------------------------------------------------------------------------------------------------------------------------------
// instruções da UOL: http://www.uolhost.uol.com.br/faq/hospedagem/como-enviar-mensagens-com-php-por-autenticacao-smtp.html#rmcl
/* apenas dispara o envio do formulário caso exista $_POST['enviarFormulario']*/
if (isset($_POST['enviarFormulario'])){
/*** INÍCIO - DADOS A SEREM ALTERADOS DE ACORDO COM SUAS CONFIGURAÇÕES DE E-MAIL, fornecido pelo hospedeiro***/
$enviaFormularioParaNome = 'destinatario';
$enviaFormularioParaEmail = 'contato@acharnobairro.com.br';
$caixaPostalServidorNome = 'destinatario';
$caixaPostalServidorEmail = 'contato@acharnobairro.com.br';
$caixaPostalServidorSenha = 'senha';
/*** FIM - DADOS A SEREM ALTERADOS DE ACORDO COM SUAS CONFIGURAÇÕES DE E-MAIL ***/
/* abaixo as veriaveis principais, que devem conter em seu formulario*/
$remetenteNome = $_POST['nome'];
$remetenteEmail = $_POST['email'];
$assunto = $_POST['assunto'];
$mensagem = $_POST['mensagem'];
$arquivo = $_FILES["arquivo"];
// estas 3 linhas abaixo são opcionais
$remetente->ip = $_SERVER['REMOTE_ADDR'];
$remetente->browser = $_SERVER['HTTP_USER_AGENT'];
$remetente->datatime = date('d/m/Y - H:i');
// body
$mensagemConcatenada = 'Email via website'.'<br/>';
$mensagemConcatenada .= '-------------------------------<br/>';
$mensagemConcatenada .= 'Nome: '.$nome.'<br/>';
$mensagemConcatenada .= 'E-mail: '.$email.'<br/>';
$mensagemConcatenada .= 'Assunto: '.$assunto.'<br/>';
$mensagemConcatenada .= '-------------------------------<br/>';
$mensagemConcatenada .= "IP: " . $remetente->ip . "<br />\n"; // opcional
$mensagemConcatenada .= "Data/Hora: " . $remetente->datatime . "<br />\n"; // opcional
$mensagemConcatenada .= "Navegador: " . $remetente->browser . "<br />\n"; // opcional
$mensagemConcatenada .= '-------------------------------<br/>';
$mensagemConcatenada .= 'Arquivo anexado: "'.$arquivo['name'].'"<br/>';
$mensagemConcatenada .= '-------------------------------<br/><br/>';
$mensagemConcatenada .= 'Mensagem: "'.$mensagem.'"<br/>';
/*********************************** A PARTIR DAQUI NAO ALTERAR ************************************/
// require_once('PHPMailer-master/PHPMailerAutoload.php'); (original da UOL, não funciona, dá erro, diz que não encontra o diretorio.)
require_once 'PHPMailer-master/PHPMailerAutoload.php'; // assim funciona. dica de http://pt.stackoverflow.com/questions/15286/o-que-usar-require-include-require-once-include-once
//require_once(dirname(index.php) ."/PHPMailer-master/PHPMailerAutoload.php"); // para uso em localhost
$mail = new PHPMailer();
// headers
$mail->IsSMTP();
$mail->SMTPAuth = true;
$mail->Charset = 'utf8_decode()';
$mail->Host = 'smtp.'.substr(strstr($caixaPostalServidorEmail, '@'), 1);
$mail->Port = '587';
$mail->Username = $caixaPostalServidorEmail;
$mail->Password = $caixaPostalServidorSenha;
$mail->From = $caixaPostalServidorEmail;
$mail->FromName = utf8_decode($caixaPostalServidorNome);
$mail->IsHTML(true);
$mail->Subject = utf8_decode($assunto);
$mail->Body = utf8_decode($mensagemConcatenada);
$mail->AddAddress($enviaFormularioParaEmail,utf8_decode($enviaFormularioParaNome));
// anexar arquivo dica de http://www.linhadecomando.com/php/php-usando-phpmailer-para-envio-de-email-com-anexo
// $mail->AddAddress($enviaFormularioParaEmail,utf8_decode($enviaFormularioParaNome)); // da UOL
$mail->AddAttachment($arquivo['tmp_name'], $arquivo['name'] );
/*
if(!$mail->Send()){
$mensagemRetorno = '$nome, Erro ao enviar Email: '. print($mail->ErrorInfo);
echo $mensagemRetorno;
// colocar script de aviso e pausa para leitura, ao clicar no script, dará refresh
//echo "<meta http-equiv='refresh' content='2;URL=contato.php'>";
}else{
$mensagemRetorno = '$nome, Email enviado com sucesso!';
echo $mensagemRetorno;
}
*/
if($mail->Send()){
//$mensagemRetorno = '$nome, Erro ao enviar Email: '. print($mail->ErrorInfo);
// busca uma página criada com agradecimentos ou informações de breve contato
include("emailcerto.php");}
}
?>
Laptop sem wi-fi no roteador SAGEMCOM da Vivo Fibra [Resolvido]
Busque suas dúvidas no VOL e ganhe tempo
Onde achar pacotes e distribuições antigas
Removendo softwares instalados no Slackware
Nenhum comentário foi encontrado.
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Atualizando o Fedora 42 para 43
Como saber se o seu e-mail já teve a senha vazada?
Como descobrir se a sua senha já foi vazada na internet?
\Boot sem espaço em disco (Fedora KDE Plasma 42) (3)
Programa fora de escala na tela do pc (38)
Mint Xfce não mantém a conexão no wi-fi (2)









