Pular para o conteúdo

PHPMailer - Validação de campos, e-mail e domínio para formulário de contato e envio

Dica publicada em Linux / Introdução
Flavio dos Santos acharnobairro
Hits: 9.140 Categoria: Linux Subcategoria: Introdução
  • Indicar
  • Impressora
  • Denunciar

PHPMailer - Validação de campos, e-mail e domínio para formulário de contato e envio

Aprendo muito com as dicas e ensinamentos que muitos colocam na internet. Me esforço em aprender programação, procurando por aquilo que posso adaptar e implantar em meu site.

Achei muitos formulários de contato mas, sem as validações que eu desejei, então, estudando cada dica que muitos oferecem, fiz meu Formulário de Contato que pode anexar arquivo e envia-lo via PhpMailer com autenticação.

Um formulário de entrada de Contato




Comentário: é muito ruim um usuário preencher todos os campos para depois se fazer as validações, retornando-o para as correções, por isso coloquei onBlur em cada campo para avisar de seu preenchimento correto.

Validações dos Campos (lado do usuário)



Validações dos Campos (lado do servidor)

Arquivo: "validacontato.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 "";
//echo "";
echo "";
exit;
}

if ($email=="") {
echo "";
echo "";
exit;
}

if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
echo "";
echo "";
exit;
}

if(strlen($email)>40){
echo "";
echo "";
exit;
}

if (!preg_match("/^[0-9a-z\_\.\-]+\@[0-9a-z\_\.\-]*[0-9a-z\_\-\.]+[a-z]{2,3}$/i",$email)){
echo "";
echo "";
exit;
}

// analisa email, procura na lista dos Não Desejados
if( $key = array_search("$email", $emailnao) ){
echo "";
echo "";
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 "";
echo "";
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 "";
echo ""; }

if ($assunto=="") {
echo "";
echo "";
exit;
}

if ($mensagem == "") {
echo "";
echo "";
exit;
}

if ($arquivo['size'] > $tamanho) {
echo "";
echo "";
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'.'
'; $mensagemConcatenada .= '-------------------------------
'; $mensagemConcatenada .= 'Nome: '.$nome.'
'; $mensagemConcatenada .= 'E-mail: '.$email.'
'; $mensagemConcatenada .= 'Assunto: '.$assunto.'
'; $mensagemConcatenada .= '-------------------------------
'; $mensagemConcatenada .= "IP: " . $remetente->ip . "
\n"; // opcional $mensagemConcatenada .= "Data/Hora: " . $remetente->datatime . "
\n"; // opcional $mensagemConcatenada .= "Navegador: " . $remetente->browser . "
\n"; // opcional $mensagemConcatenada .= '-------------------------------
'; $mensagemConcatenada .= 'Arquivo anexado: "'.$arquivo['name'].'"
'; $mensagemConcatenada .= '-------------------------------

'; $mensagemConcatenada .= 'Mensagem: "'.$mensagem.'"
'; /*********************************** 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 ""; }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");} } ?>

Tabela sem Table, só com CSS

Laptop sem wi-fi no roteador SAGEMCOM da Vivo Fibra [Resolvido]

Tabela sem Table, só com CSS

Rode o Office online (Office Live Workspace) no Firefox, no Linux!

Instalação do Debian sem mídia removível

Habilitando a compilação JIT (Just In Time) para o PHP8 no Ubuntu

Atalho para Terminal (konsole) no KDE / openSUSE

Como saber se um programa esta instalado no Debian

Nenhum comentário foi encontrado.

Contribuir com comentário

Entre na sua conta para comentar.



Nome :
Seu E-mail :
   
Assunto :
Mensagem:

Digite sua mensagem.
Anexo: