Como a maioria dos servidores SMTP está migrando a porta de envio padrão 25 para 587, eu necessitava de um
Script que, além de fornecer a autenticação no Servidor para o envio do e-mail ser garantido, ele também tinha que
conectar-se na porta correta.
Agora vamos criar um dos principais arquivos, o "formail.php", este arquivo contém procedimentos para verificar se os campos no formulário
estão preenchidos corretamente antes do envio.
Por exemplo, se o campo 'e=mail' tem '@', se não tiver, exibe uma página contendo o erro.
Ele foi modificado para que realize a conexão com autenticação no SMTP, utilizando informações dos outros arquivos PHPs já criados. Obrigado
ao autor SK15, pelo compartilhamento do conhecimento:
<!-- INICIO DO CÓDIGO -->
<?php require "config.ini"; ?>
<?php
////////////////////////////////////////////////
// Formail em PHP por SK15 v 1.0 |||
// Esse formulario é uma imitação do formail |||
// com um pequena ponto fraco |||
// ao adicionar um novo campo ele tera |||
// quer ser mudado aqui nesse arquivo |||
//modificado para autenticação no smtp por ClayCezar
/////////////////////////////////////////////|||
// Carrega dados pelo método POST, independente da configuração das variáveis Globais do ini do PHP
session_start();
header("Content-Type: text/html; charset=ISO-8859-1", true);
//conforme já mencionado, se você mudar o formulario tera que alterar as variaveis abaixo
$nome=$_POST["nome"];
$email=$_POST["email"];
$mensagem=$_POST["mensagem"];
$empresa=$_POST["company"];
$estado=$_POST["estado"];
$telefone=$_POST["telefone"];
$pais=$_POST["Country"];
// Verifica se O Campo nome tá preenchido
if (empty($nome)){
// HTML que aparecera o ERRO
echo "<html><head><title>Ocorreu Um ERRO !!!</title></head>";
echo "<body bgcolor=\"#ffffff\">";
echo "<br><br><br>";
echo "<center>É Necessario o Preenchimento do <b>Nome</b></center>";
echo "<br><br><center><a href=\"javascript:history.back(1)\">Volta</a></center>";
echo "</body></html>";
}
// Verifica o Campo E-mail Tá preenchido
elseif (empty($email)){
// HTML que aparecera o ERRO
echo "<html><head><title>Ocorreu Um ERRO !!!</title></head>";
echo "<body bgcolor=\"#ffffff\">";
echo "<br><br><br>";
echo "<center>O E-mail nao foi <b>Digitado</b></center>";
echo "<br><br><center><a href=\"javascript:history.back(1)\">Volta</a></center>";
echo "</body></html>";
}
// Verifoca Se o E-mail Contem @
elseif (!(strpos($email,"@")) OR strpos($email,"@") !=strrpos($email,"@")) {
// HTML que aparecera o ERRO
echo "<html><head><title>Ocorreu Um ERRO !!!</title></head>";
echo "<body bgcolor=\"#ffffff\">";
echo "<br><br><br>";
echo "<center>E-mail <b>Invalido</b></center>";
echo "<br><br><center><a href=\"javascript:history.back(1)\">Volta</a></center>";
echo "</body></html>";
}
// Verifica se o Campo Está Preenchido
//elseif (empty($assunto)){
// HTML que aparecera o ERRO
//echo "<html><head><title>Ocorreu Um ERRO !!!</title></head>";
//echo "<body bgcolor=\"#ffffff\">";
//echo "<center>Você <b>Não</b> Digitou Um <b>Assunto</b></center>";
//echo "<br><br><center><a href=\"javascript:history.back(1)\">Volta</a></center>";
//echo "</body></html>";
//}
// Verifica se o Campo Mensagem tá preenchido
elseif (empty($mensagem)){
// HTML que aparecera o ERRO
echo "<html><head><title>Ocorreu Um ERRO !!!</title></head>";
echo "<body bgcolor=\"#ffffff\">";
echo "<br><br><br>";
echo "<center>Você <b>Não</b> Digitou Uma <b>Mensagem</b></center>";
echo "<br><br><center><a href=\"javascript:history.back(1)\">Volta</a></center>";
echo "</body></html>";
}
else{
// Comfirma o Envio Do E-mail
if ($certo== "1")
{
// Função de envio Do E-mail
require ("alterar_esse_arquivo.php"); // pega os dados personalizados desse arquivo
require("class.phpmailer.php"); // envio de e-mail com autenticacao do provedor
$mail = new PHPMailer(); // envodo de email com autenticacao do provedor
$mail->SetLanguage("br", "language/");
$mail->IsSMTP();
//Cria PHPmailer class
$mail->From = $email; //email do remetente
$mail->FromName = $nome; //Nome de formatado do remetente
$mail->Host = "$smtp_endereco"; //Pegando dados do alterar_esse_arquivo.php
$mail->Mailer = "smtp"; //Usando protocolo SMTP
$mail->AddAddress("$seu_email"); //pegando dados do alterar_esse_arquivo.php
$mail->Subject = "Fale Conosco"; //o assunto com qual a mensagem chega pra você
$mail->Body ="Empresa: ".$company." Telefone: ".$telefone. " Pais: ".$pais. " cidade: "."$cidade-$estado". "\n \n".$mensagem; //aqui
exibe as informaçoes do formulario no corpo da mensagem do email, você pode alterar se modificou ou adicionou algum campo em seu
formulario.
//SMTP
$mail->SMTPAuth = true;
$mail->Username = "$usuario_smtp";
$mail->Password = "$senha_smtp";
//Verifica se email sera enviado
if(!$mail->Send())
{ //Checa erros no envio do email
echo "Ocorreram erros ao enviar email"; //Imprime mensagem de que email nao foi enviado
exit;
}
else
{
echo "$mensagem_sucesso";
echo "<br><br><center><a href=\"javascript:history.back(1)\">Voltar</a></center>";
exit;
}
}
}
?>
<!-- FIM DO CODIGO -->
Esse monte de arquivo php poderia ser troca por somente um com:
<?
mail("ze@criarweb.com,maria@criarweb.com","assunto","Este é o corpo da mensagem")
?>
[3] Comentário enviado por claycezar em 18/05/2012 - 17:08h
Olá Stremer,
O problema era enviar email usando autenticação e pela porta 587 do servidor, verificar e validar os dados do formulário para envio, apresentar mensagens de erro do servidor para o usuário quando não fosse possivel enviar por que o servidor não respondeu ou algo erro aconteceu. Por isto usei este monte de arquivos, mas se tiver uma maneira mais simples de fazer o que esses arquivos fazem com menos linhas seria uma boa.
[4] Comentário enviado por adfs03 em 08/06/2012 - 23:59h
Ola claycezar ...
Eu fiz exatamente o que você explicou no tutorial....sou "dummie" em PHP....estou testando o form, com o EasyPHP, e na execução ele informa o seguinte erro....
"Parse error: syntax error, unexpected T_VARIABLE in C:\Program Files (x86)\EasyPHP-5.3.9\www\Contato\config.ini on line 9"
[5] Comentário enviado por claycezar em 09/06/2012 - 06:44h
Bom dia,
adsf03 pode comentar a linha com a variavel $emaildest do arquivo .ini ou apaga-la, já que o formail recebe o endereço do seu email pela variavel $seu_email no arquivo "alterar_esse_arquivo.php". Eu acabei esquecendo de apagar essa linha que está com uma variavel sem mais utilidade. A unica variavel que é preciso conservar no arquivo config.ini é $certo="1"; (para enviar emails) OU $certo="0"; (para nao enviar) e mais nada.
[6] Comentário enviado por gsevilhajr em 21/06/2012 - 11:17h
Bom dia, claycezar.
Eu copiei tudo certinho mas esta dando este erro:
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /home/sevilhac/public_html/teste_formmail/formail.php:2) in /home/sevilhac/public_html/teste_formmail/formail.php on line 13
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/sevilhac/public_html/teste_formmail/formail.php:2) in /home/sevilhac/public_html/teste_formmail/formail.php on line 13
Warning: Cannot modify header information - headers already sent by (output started at /home/sevilhac/public_html/teste_formmail/formail.php:2) in /home/sevilhac/public_html/teste_formmail/formail.php on line 14
[7] Comentário enviado por claycezar em 22/06/2012 - 00:41h
Olá gsevilhajr,
Dá uma olhada se na hora de copiar foi colado o codigo corretamente respeitando os "<?php e ?>", elimine espaços e linhas em branco, se continuar o erro, mude a codificação do arquivo que você gerou como formail.php para UTF8. (abra ele no bloco de notas mesmo, e mude a codicação usando o "salvar como..").
[8] Comentário enviado por janaraujo em 11/06/2013 - 17:57h
Caramba!!!!!! Até que enfim funcionou!!! Muito obrigado amigo. pesquisei varios sites e nenhum tinha funcionado até agora. Muito obrigado mesmo. Aqui rodou na boa!!!!
[9] Comentário enviado por scooter em 07/09/2013 - 05:10h
Poderia me ajudar no formulário esta apresentado o seguinte erro.
Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /home/u936331729/public_html/class.phpmailer.php on line 1421
[10] Comentário enviado por shindo em 29/10/2013 - 13:46h
Boa tarde, primeiramente obrigado pelo formulário, aqui está ocorrendo o seguinte erro:
Warning: addcslashes() [function.addcslashes]: Invalid '..'-range, '..'-range needs to be incrementing in /var/www/html/rptinfo.com.br/web/class.phpmailer.php on line 1144
Ocorreram erros ao enviar email
não sei como posso corrigir, alguma idéia? desde já obrigado.
[11] Comentário enviado por devstar em 24/09/2018 - 11:06h
Eu recomendo que você siga este tutorial aqui no formulário de contato php (https://www.cloudways.com/blog/custom-php-mysql-contact-form/) para criar seu próprio formulário em html, php e mysql. Este formulário também tem um script de validação, para que você não receba e-mails ou spams inválidos.