Webmaster um formulário de contato para seu site
Este formulário permite ter uma página para ser contatado em seu site, sem utilizar um software de mensagens.
A pessoa que contata você indica seu endereço, o objeto da mensagem e sua mensagem (evidentemente).
O código é uma versão personalizada e arranjada se:
Site du zéro : "Função email () : Um menu puro e duro para o seu site em francês;
tutorial PHPformularios;
tutoriais emails PHP;
formulario flash PHP;
tutorial email PHP;
função para validar email
Ele utiliza a
função email, se ela não funcionar verifique que se o seu provedor de hospedagem não desativou-a ou a refreou.
O endereço email do destinatário também conta.
(Eu fiz isso com Free (provedor internet francês), indicando meu enderêço free, as mensagens não tinham sido enviadas. Colocando um outro enderêço funcionou).
Ele não tem segurança (=sem verificação « anti-bots »), é você que deve se virar.
No entanto, todas as verificações efetuadas deveriam bloquear certos spams pouco evoluídos.
Se você fizer sozinho, a melhor maneira é de colocar uma questão simples, como “Qual é o endereço desta página”, ou Quanto é: 2+2?”.
Um humano compreenderia perfeitamente, mas um robô responde não importa o que.
É mais fácil gerar uma imagem e de verificá-la (mesmo que este sistema pareça ser o mais eficaz em relação a certos robôs evoluídos).
(Você poderá também participar da evolução do sistema, por exemplo armazenando uma série de questões deste tipo e gerando uma de forma qualquer).
No entanto, o sistema anti-spam tem que adaptar em função da freqüentação do site e da fiabilidade necessária.
O formulário
Ele está disponível no seguinte endereço:
http://ssylvainsab.free.fr/autres/ccmfaq/script-contact.txt França
Eis o código.
A única coisa a fazer é copiar/colar o código e de colocá-lo em um arquivo com extensão .php (ou .shtml, .php3, etc...)
Atenção, não esqueça de indicar seu enderêço emaul na 3° linha!
<?php
//Escreva seu enderêço email entre as aspas
$destinatário='meu endereço@meu domínio';
?><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Strict//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="fr">
<head>
<title>Contact</title>
<style type="text/css">
form#contact{border:2px solid red;width:70%;padding:1em}
p#msg,p#adr,p#obj{border:2px solid green;margin-right:10%;padding:10px}
p#msg textarea{border:2px solid blue;height:30em;width:80%}
p#adr input,p#obj input{border:2px solid blue}
p.bt{text-align:center}
p.bt input{border:1px red solid;width:50%}
</style>
<meta http-equiv="content-type" content="Content-type:text/html;charset=iso-8859-1">
</head>
<body style="direction: ltr;">
<h1>Contact</h1>
<?php
$Pré-visualizar='<p class="bt">
<input type="submit" name="pré-visualizar" tabindex="3" value="Pré-visualizar"></p>';
$Envio="\n".'<p class="bt">
<input name="envoi" tabindex="4" value="Envoyer" type="submit"></p>';
if (isset($_POST['message']))
{
//A variável $verif vai nos permitir analisar se a semântica do email está correta
$verif='#^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,5}$#';
//algumas substituições para as
$message=preg_replace('#(<|>)#', '-', $_POST['message']);
$message=str_replace('"', "'",$message);
$message=str_replace('&', 'et',$message);
$objet=preg_replace('#(<|>)#', '-', $_POST['objet']);
$objet=str_replace('"', "'",$objet);
$objet=str_replace('&', 'et',$objet);
//Designa-se e/ou protege-se nossas variáveis
$seuemail=stripslashes(htmlentities($_POST['seuemai']));
$message=stripslashes(htmlspecialchars($message));
$objet=stripslashes(htmlspecialchars($objet));
//input envio/pré-visualizar
$envio=htmlentities($_POST['envoi']);
$pré-visualizar=htmlentities($_POST['pré-visualizar']);
//tira-se os espaços
$seuemail=trim($seumail);
$message=trim($message);
$objet=trim($objet);
$afixagem_resultado='<p>Afixagem do resultado:</p>';
/*Verifica-se se o email e a mensagem estão plenas, e age-se em função.
(afixa-se Afixagem do resultado, tal ou qual campo é vazio, , etc...*/
//Se isto não funcionar (mal completado, email inválido...)
if((empty($message))or(empty($objet))or(!preg_match($verif,$votremail)))
{
//Os três campos estão vazios
if(empty($votremail)and(empty($message))and(empty($objet)))
{
eco '<p>Todos os campos estão vazios.</p>';
$mensagem='';$euemail='';$objet='';$afixagem_resultado='';
}
//um dos campos está vazio
else
{
if(!preg_match($verif,$seuemail))
eco'<p>Seu enderêço email n\’é inválido.</p>';
else
{
eco'<p>É preciso completar todos os campos!</p>';
if(empty($message))
$Afixagem_resiltado='';
}
}
}
//Se os dois estão completos e que o enderêço é válido, envia-se e pré-visualiza-se sem envio
else
{
$domínio=preg_replace('#[^@]+@(.+)#','$1',$seuemail);
$DomínioMailExiste=checkdnsrr($domínio,'MX');
if(!$DomínioMailExiste)
eco'<p>O nome de domínio do enderêço email que você deu é inválido.</p>';
elseif(!empty($pré-visualizar))
{
$afixagem_resultado='<p>Sua mensagem e seu enderêço email são válidos e prontos par ser enviados.
<br>Você deve clicar sobre o botão: "Enviar".<br>Prè-visualização :</p>';
$Pré-visualizar='';
}
elseif(!empty($envio))
{
$objeto='[SITE] : '.$objeto;
$headers='From:'.$seuemail."\r\n".'To:'.$email."\r\n".'Subject:'.$objeto."\r\n".'Content-type:text/plain;charset=is-8859-1'."\r\n".'Sent:'.date('l, F d, Y H:i');
if(mail($destinatário,$objeto,$mensagem,$headers))
{
eco '<p>Sua mensagem foi enviada;. Obrigado.</p><p><a href="/">Retorno a página inicial</a></p>';
$Envio='';
$Prè-visualizar='';
}
else
echo'<p>Um grave problema aconteceu durante o envio do email.</p>';
}
else
echo'<p>Uma situação inesperada aconteceu na execução do script.</p>';
}
eco $afixagem_resultado;
}
else
{
eco '<p>Você pode utilizar este formulário para me contatar.</p>';
$seuemail='';$mensagem='';
}
$bas_formulário=$Prévisualizar.$Envio;
?>
<form id='contact' method="post" action="<?php echo $_SERVER['PHP_SELF'];?>" enctype="multipart/form-data">
<p id='obj'><label for='objet'>Objeto de sua mensagem:<br>
<input type='text' name='objet' id='objet' tabindex='10' size='30'></label></p>
<p id="adr"><label for="mail">Seu endereço email<br>
<input name="seuemail" tabindex="20" size="30" type="text" id="mail" value="<?php eco $seuemail; ?>"></label></p>
<p id="msg"><label for="message">Sua mensagem<br>
<textarea tabindex="30" rows="20" cols="120" name="message" id="message"><?php eco $mensagem; ?></textarea>
</label></p>
<?php eco $bas_formulário;?>
</form>
</body>
</html>
Uma outra versão em PHP5
Este formulário é escrito em PHP5 e não comporta pré-visualização.
O código fonte e
Links PHPsecure
<?php
define( 'MAIL_TO', /* >>>>> */'utilizador@domínio.tld'/* <<<<< */ ); //acrescentar seu courriel
define( 'MAIL_FROM', 'utilisador@domínio.tld' ); // valor por padrão
define( 'MAIL_OBJECT', 'objeto da mensagem' ); // valor por padrão
define( 'MAIL_MESSAGE', 'sua mensagem' ); // valor por padrão
$mailSent = false; // bandeira que orienta a afixagem do formulário OU de recapitulativo
$errors = array(); // quadro de erros de digitação
if( filter_has_var( INPUT_POST, 'send' ) ) // o formulário foi submetido com o botão [Enviar]
{
$from = filter_input( INPUT_POST, 'from', FILTER_VALIDATE_EMAIL );
if( $from === NULL || $from === MAIL_FROM ) // se o correio fornecido é vazio OU igual ao valor por padrão
{
$errors[] = 'Você deve informar seu endereço de correio eletrônico
}
elseif( $from === false ) // se o correio fornecido é inválido
{
$errors[] = 'O enderêço do correio eletrônico é inválido
$from = filter_input( INPUT_POST, 'from', FILTER_SANITIZE_EMAIL );
}
$objecto = filter_input( INPUT_POST, 'object', FILTER_SANITIZE_STRING, FILTER_FLAG_ENCODE_HIGH | FILTER_FLAG_ENCODE_LOW );
if( $object === NULL OR $object === false OR empty( $object ) OR $object === MAIL_OBJECT ) // se o objeto é vazio, inválido ou igual ao valor padrão
{
$errors[] =
}
/* sem necessidade de limpar a mensagem.
/ http://www.phpsecure.info/v2/.php
/ Logicamente, as partes mensagens ;, To: e Subject: poderiam servir também para injectar alguma coisa, mas a função email ()
/ filtrar as duas últimas, e a primeira é a mensagem, e a partir do momento onde uma linha foi saltada no envio do email.
/ 2 considerado como texto ; a mensagem ficaria unicamente como mensagem. */
$message = filter_input( INPUT_POST, 'message', FILTER_UNSAFE_RAW );
if( $message === NULL OR $message === false OR empty( $message ) OR $message === MAIL_MESSAGE ) // se a mensagem fornecida é vazia ou igual ao valor por padrão
{
$errors[] = 'Você deve escrever uma mensagem.
}
if( count( $errors ) === 0 ) // se não houver erros
{
if( mail( MAIL_TO, $object, $message, "From: $from\nReply-to: $from\n" ) ) // tentative de envoi da mensagem
{
$mailSent = true;
}
else // envio interrompido
{
$errors[] = Sua mensagem não foi enviada. }
}
}
else //o formulário foi afixado pela primeira vez, com os valores por padrão
{
$from = MAIL_FROM;
$object = MAIL_OBJECT;
$message = MAIL_MESSAGE;
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="fr" xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
<title>Contact</title>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
<meta http-equiv="content-language" content="fr" />
<style type="text/css">
html{ font-family:Geneva, Arial, Helvetica, sans-serif; margin:0; padding:0; font-size:.88em;}
body{ width:772px; margin:0 auto; padding:0; }
textarea{ width:772px; }
label{ display:block; font-weight:bold; }
p#welcome{ padding:10px 20px; border:1px dotted #00f; color:#00f; font-weight:bold; }
ul{ padding:10px 20px; border:1px dotted #f00; color:#f00; font-weight:bold; }
p#success{ padding:10px 20px; border:1px dotted #0f0; color:#0f0; font-weight:bold; }
p em{ display:block; font-weight:normal; }
</style>
</head>
<body>
<h1>Contact</h1>
<hr />
<?php
if( $mailSent === true ) // se a mensagem foi enviada com sucesso, afxa-se o recapitulativo
{
?>
<p id="success">Sua mensagem foi enviada com sucesso.</p>
<p><strong>Correio para a resposta </strong><br /><?php echo( $from ); ?></p>
<p><strong>Objet :</strong><br /><?php echo( $object ); ?></p>
<p><strong>Message :</strong><br /><?php echo( nl2br( htmlspecialchars( $message ) ) ); ?></p>
<?php
}
else // O formulário é afixado pela primeira vez ou o formulário foi submetido mas continha erros
{
if( count( $errors ) !== 0 )
{
eco( "\t\t<ul>\n" );
foreach( $errors as $error )
{
eco( "\t\t\t<li>$error</li>\n" );
}
eco( "\t\t</ul>\n" );
}
else
{
eco( "\t\t<p id=\"welcome\"><em>Todos os campos são obrigatórios</em></p>\n" );
}
?>
<form id='contact' method="post" action="<?php echo( $_SERVER['REQUEST_URI'] ); ?>">
<p>
<label for="from">Coreeio para a resposta</label>
<input type="text" name="from" id="from" value="<?php echo( $from ); ?>" />
</p>
<p>
<label for="object">Objeto</label>
<input type="text" name="object" id="object" value="<?php echo( $object ); ?>" />
</p>
<p>
<label for="message">Mensagem</label>
<textarea name="message" id="message" rows="20" cols="80"><?php echo( $message ); ?></textarea>
</p>
<p>
<input type="reset" name="reset" value="Apagar" />
<input type="submit" name="send" value="Enviar" />
</p>
</form>
<?php
}
?>
</body>
</html>
Artigo <a href='http://www.commentcamarche.net/faq/sujet-4516-webmaster-un-formulaire-de-contact-pour-votre-site
original'>
http://www.commentcamarche.net/...
original</a> publicado por
Ssylvainsab