PHP : enviando formulários por email
setembro 3rd, 2008 | by DragaO~ |olá pessoas-felizes-que-se-prestam-a-ler-isso :D
hoje quero fazer um novo tutorial e vou tentar ser o mais direto possivel ok ? ;D
como o titulo jah diz, faremos um formulario de contato para ser posteriormente enviado por email
antes de começar, certifique-se que o seu servidor onde vai ser (ou esta) hospedado este script tenha suporte à envios de emails
feito isso, maos à obra ;)
começando, precisamos do nosso formulario, obviamente :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Formulário de Contato pelo Site</title>
<style type="text/css">
.c
{
vertical-align: top;
text-align: right;
}
</style>
</head>
<body>
<form action="envia_form_email.php" method="post">
<table>
<tr>
<td class="c">
Nome:
</td>
<td>
<input type="text" name="nome" />
</td>
</tr>
<tr>
<td class="c">
Email:
</td>
<td>
<input type="text" name="email" />
</td>
</tr>
<tr>
<td class="c">
O que você achou do tutorial?
</td>
<td>
<textarea rows="5" cols="20" name="opiniao"></textarea>
</td>
</tr>
<tr>
<td>
</td>
<td>
<input type="submit" value="Enviar Email" />
</td>
</tr>
</table>
</form>
</body>
</html> |
agora, explicando o que foi feito :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Formulário de Contato pelo Site</title>
<style type="text/css">
.c
{
vertical-align: top;
text-align: right;
}
</style>
</head>
<body> |
nao vou me ater às linhas acima, pois nao sao o foco deste tutorial, pois sao apenas um estilo CSS e declaraçoes HTML
15 | <form action="envia_form_email.php" method="post"> |
a linha acima indoca que os dados do nosso formulario serao enviados para o arquivo “envia_form_email.php” (que veremos a seguir) e que o metodo de envio escolhido foi o “post”, nenhum misterio ateh entao ;)
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | <table> <tr> <td class="c"> Nome: </td> <td> <input type="text" name="nome" /> </td> </tr> <tr> <td class="c"> Email: </td> <td> <input type="text" name="email" /> </td> </tr> <tr> <td class="c"> O que você achou do tutorial? </td> <td> <textarea rows="5" cols="20" name="opiniao"></textarea> </td> </tr> </table> |
acima temos o nosso formulario propriamente dito, com os campos “nome”, “email” e “opiniao”, que sao os dados que queremos enviar para nosso email
42 43 44 | </form> </body> </html> |
fechamento das tags previamente abertas
pronto, temos um simples formulario :D
agora basta fazer a “ardua” tarefa de enviar seu conteudo por email ;)
a seguir, o arquivo que faz isso, o nosso “envia_form_email.php” :
envia_form_email.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | <? foreach($_POST as $campo => $valor) { $temp = "\$".$campo."='".htmlentities($valor, ENT_QUOTES)."';"; eval($temp); } $para = "dragaoarrobapensaofunbari.com"; $assunto = "Email automatico via formulario"; $cabecalhos .= "MIME-Version: 1.0\n"; $cabecalhos .= "Content-type: text/html; charset=iso-8859-1\n"; $mensagem = $nome." enviou uma avaliação sobre o tutorial :<br />"; $mensagem .= "<br />"; $mensagem .= "email para contato : ".$email."<br />"; $mensagem .= "opiniao : ".nl2br($opiniao)."<br />"; if(mail($para, $assunto, $mensagem, $cabecalhos)) { echo "Obrigado pelo contato"; } else { echo "Desculpe-nos, ocorreu uma falha"; } ?> |
basicamente seria isso ^^
agora, explicando o codigo :
2 3 4 5 6 | foreach($_POST as $campo => $valor) { $temp = "\$".$campo."='".htmlentities($valor, ENT_QUOTES)."';"; eval($temp); } |
nao me aterei à este loop, pois eu explico ele com detalhes neste post ;D
8 | $para = "dragaoarrobapensaofunbari.com"; |
aqui estamos setando a variavel que vai receber o email para qual o “resultado” do formulario vai ser enviado
basicamente, coloque seu email ai para que o email seja enviado para voce
9 | $assunto = "Email automatico via formulario"; |
o assunto do email, creio nao ter nenhum misterio pra quem jah enviou emails alguma vez na vida ;D
10 11 | $cabecalhos .= "MIME-Version: 1.0\n"; $cabecalhos .= "Content-type: text/html; charset=iso-8859-1\n"; |
cabeçalhos do email, eles informaram o que contem no email
no nosso caso, informaram a versao do tipo mime (linha 10) que queremos/estamos utilizar/utilizando e que o conteudo do email (linha 11) sao texto puro ou html, e que a codificaçao de caracteres utilizada no email eh a ISO-8859-1
13 | $mensagem = $nome." enviou uma avaliação sobre o tutorial :<br />"; |
aqui estamos montando o corpo do nosso email, e primeiramente colocamos o nome de quem enviou, seguido de um texto qualquer
perceba que ao final da linha nos colocamos um “
“, que em HTML quebra a linha, e que no nosso email, graças ao que especificamos no “Content-type” de nosso cabeçalho de email, vai ser visualizado como uma quebra de linha, pois ele (o email) vai interpretar comandos HTML (se o cliente tiver suporte à isso, o que hoje em dia eh dificil acontecer de o cliente nao possuir suporte à HTML)
14 15 | $mensagem .= "<br />"; $mensagem .= "email para contato : ".$email."<br />"; |
aqui colocamos o que foi informado no campo “email” de nosso formulario
16 | $mensagem .= "opiniao : ".nl2br($opiniao)."<br />"; |
aqui colocamos a opiniao que a pessoa escreveu, utilizando a funçao “nl2br()”
esta funçao basicamente substitui os “\n” por “
” (lembre-se, os campos textarea assumem “\n” como quebra de linha)
18 19 20 21 22 23 24 25 | if(mail($para, $assunto, $mensagem, $cabecalhos)) { echo "Obrigado pelo contato"; } else { echo "Desculpe-nos, ocorreu uma falha"; } |
aqui fazemos a incrivel tarefa de enviar tudo isso por email e mostrar uma mensagem para o usuario ;)
acho que o que eu pus ali eh auto-explicativo, mas caso nao seja, basta olhar o php.net e ver como funciona a funçao “mail()” ;D
bom, acho que eras isso :D
duvidas? pergute ;)
falhas? informe-as ;D
ateh a proxima =D/
referencia das funçoes :
mail(), nl2br(), htmlentities(), eval()
10 Responses to “PHP : enviando formulários por email”
By Claiton Padilha on out 2, 2008 | Reply
Concordo com o que o Guitarrista Kurumin disse,
tu tens uma boa didática :D.
Tu poderias também postar tutoriais de como integrar PHP+Javascript, já que é o que mais se utiliza.
Flw ;)
Quote
By DragaO~ on out 5, 2008 | Reply
tu tens uma boa didática :D.
que bom, assim o pessoal consegue compreender bem o que eu tento “passar” nos “tutoriais” que eu posto aqui ^^
e obrigado pelo elogio :D
Flw ;)
hm…
tipo, eu nao sou muito “fan” de javascript pelo simples fato de ele ser facilmente bloqueavel pelo usuario
imagina depender de uma validaçao que utiliza somente javascript (jah vi casos de sites “grandes” ser assim), o cara vai ali e bloqueia e pronto, sem validaçao alguma =x
tudo bem que alguem pode vir e falar
imagina o “desperdicio” de codigo que eh :S
tem uns que dizem que eh “mais rapido”, pq tu “joga” uma parte do processamento pro cliente e tudo mais
e se o cliente conseguir burlar o javascript, tem ali o PHP “imburlavel” e tal
mas eu acho o seguinte : pra que colocar mais codigo em uma pagina e aumentar (dependendo do caso, consideravelmente) o tempo de carregameno da pagina ?
e veja, se tu fizer a validaçao com javascript, e quiser “garantir” a validaçao utilizando o PHP, teriamos outros problemas, como duplicaçao de codigo (sim, seria o mesmo em duas linguagens), e o PHP SEMPRE seria utilizado, mesmo que tudo estivesse correto e tal, o PHP iria fazer o “serviço” dele
acho que ficou um pouco confuso o que eu quis dizer :S
mas acho desnecessaria a validaçao de formularios utilizando javascript
(jah vi casos de sites INTEIRAMENTE feitos em javascript…eles eram tao pesados que meu firefox travava :S)
bom, acho que tae a minha opiniao ^^
e obrigado pelo comentario, espero que continue acompanhando os posts aqui ;D
flw xD/
Quote
By Claiton Padilha on out 7, 2008 | Reply
A questão é que os efeitos visuais são 99% em javascript…
Foi a isso que quis me referir…
Sem dúvidas que fazer validações com JS é total perca de tempo…
Certamente continuarei acompanhando os POST’S e GET’S por aqui :D
Quote
By DragaO~ on out 22, 2008 | Reply
cara, juro que nao tinha visto que tu tinha comentado aqui o.o
e o mais curioso, foi que eu aceitei teu comentario mas fui ler hoje, sei lah pq vim aqui XD
bom, quanto à isso :
nao se esqueça das CSS ;D
eu tava mesmo pensando em aprender DHTML, tem umas coisas muito bonitas (sem contar a facilidade pro usuario final) que se pode fazer com isso
HASUEhUASEhuAHSUehuASHeuhAUSeuASHE
MUITO boa a piada (Y)
serio, eu ri na hora que li XDDDDD
bom, serah sempre bem-vindo aqui ^^
obrigado pelo comentario :)
Quote
By Carlos Alexandre on set 4, 2009 | Reply
Olá Professor.
Queria saber uma coisa…eu tenho um formulario que copiei de um site, ele é em php.
Eu queria editar esse formulario para ele ser enviado para o e-mail do meu cliente.
O senhor pode me dar essa força?
Posso te enviar o formulario?
Obrigado
Quote
By DragaO~ on set 10, 2009 | Reply
“senhor”, “professor”?
realmente isso não combina comigo XD
pode passar o formulário sim, mas eu prefiro que tu poste ele aqui no blog mesmo (lembre-se de ler isso antes de postar os códigos)
posta ambos códigos, do formulário e do arquivo que faz o envio do email
qualquer coisa, tu pode tentar ler o meu post (que é justamente esse) e ver se ele te ajuda em algo :)
Quote
By Ronaldo on mar 25, 2010 | Reply
Boa tarde,
Estou utilizando o código acima para terminar meu site, porém não consigo… (novato de tudo!!!rs..) qdo. eu aplico o contato.htm e clico em enviar, ele abre o arquivo.php, estou fazendo uma caca? com certeza estou… queria saber qual?
Obrigado.
Ronaldo.
Obs.: minha hospedagem é locaweb, e o site que está em funcionamento é em flash, mas estou fazendo outro todo em XHTML!
Quote
By DragaO~ on abr 8, 2010 | Reply
@Ronaldo
Tu tá usando a locaweb? Eu, particularmente, acho que a hospedagem da locaweb não é lá essas coisas, mas em todo caso…
Se não me engano, os servidores da locaweb são máquinas Windows né? Se for, tentar mudar os “\n” para “\r\n”, assim ó:
Lembre-se de fazer em todas partes do código :)
Eu lembro que uma vez tive que colocar um sistema no servidor da locaweb, e, por ser servidor Windows, só reconhecia e envia o email quando eu colocava o “\r\n” (carriage return e new line) ao invés de apenas o “\n” (new line)
Se nada disso funcionar, se possível, peço que poste todos os códigos envolvidos nesse processo
Quote
By Eder on jun 23, 2010 | Reply
Olá dragão, estou hospedado na locaweb, e está aparecendo o seguinte erro:
PHP Warning: mail() [function.mail]: "sendmail_from" not set in php.ini or custom "From:" header missing in E:\home\xxxx\Web\envia_form_email.php on line 18
Pode me ajudar?
Abraço!
Quote
By DragaO~ on set 2, 2010 | Reply
@Eder
isso não é um erro, é um aviso :)
basicamente, tu tem que adicionar um campo dizendo quem está enviando o email.
basta tu fazer algo como
assim :
no mais, desculpe a demora em responder :)
Quote