Ir ao conteúdo
  • Cadastre-se
Entre para seguir isso  
jjlipe

[Resolvido] formulario de email HTML com anexo

Recommended Posts

Preciso inserir em um site HTML um formulario de email que possua campo para anexo.

Alguém pode me ajudar?

no momento estou usando este e funciona perfeitamente, mas preciso incluir o campo de anexo:

contato.html

<form action="contato.html" method="post">
<fieldset>
<legend>Entre em contato</legend>
<small>*Campos de Preenchimentos Obrigatório</small><br />
<label for="nome"> * Seu nome:</label>
<input id="nome" name="nome" size="31" type="text" value="" /><br />
<label for="email">* Seu email:</label>
<input id="email" name="email" size="31" type="text" value="" /><br />
<label for="assunto">* Assunto:</label>
 <input id="assunto" maxlength="50" name="assunto" size="15" type="text" value="" /><br />
<label for="mensagem">* Mensagem:</label><br />
<textarea id="mensagem" cols="53" rows="5" name="mensagem"></textarea><br />
<input name="enviar" type="submit" value="Enviar" class="botao"/>
<input name="cancelar" type="reset" value="Limpar" class="botao"/>
</fieldset>
</form>

enviar.php

<?php
/*Variaveis do Formulario*/
$nome = trim($_POST['nome']);/*recebe os dados digitados no campo "nome"*/
$email = trim($_POST['email']);/*recebe os dados digitados no campo "email"*/
$assunto_user = trim($_POST['assunto']);/*recebe os dados digitados no campo "assunto"*/
$mensagem = trim($_POST['mensagem']);/*recebe os dados digitados no campo "mensagem"*/

$enviar = $_POST['enviar'];/*Botão enviar*/

/*variavel que contará os erros*/
$erros = 1;

/*transforma em variavel global, a variã¡vel email*/
global $email;
if($enviar)/*Se o botão enviar for pressionado, faça...*/
{
/*Verifica campo "nome" vazio*/
if($nome == "")
{
$erros++;
echo "<small class=\"erro\">O Campo nome esta vazio</small><br />";
}
elseif(is_numeric($nome))/*verifica se foi digitado número no campo*/
{
$erros++;
echo "<small class=\"erro\">Você digitou numero no campo nome</small><br />";
}
/*Verifica campo "email" vazio*/
if($email == "")
{
$erros++;
echo "<small class=\"erro\">O Campo email está vazio</small><br />";
}
/*Verifica campo "assunto" vazio*/
if($assunto_user == "")
{
$erros++;
echo "<small class=\"erro\">O Campo assunto esté vazio</small><br />";
}
/*Verifica campo mensagem vazio*/
if($mensagem == "")
{
$erros++;
echo "<small class=\"erro\">O Campo mensagem esté vazio</small><br />";
}

/*verifica email, se digitado incorretamente*/
$email = str_replace (" ", "", $email);
$email = str_replace ("/", "", $email);
$email = str_replace ("@.", "@", $email);
$email = str_replace (".@", "@", $email);
$email = str_replace (",", ".", $email);
$email = str_replace (";", ".", $email);

if(strlen($email)<8 || substr_count($email, "@")!=1 || substr_count($email, ".")==0)
{
$erros++;
echo "<small class=\"erro\">Por favor, digite seu <b>e-mail</b> corretamente.</small><br />";
}
if($erros <= 1)/*se não tiver algum erro continuara abaixo, se tiver é exibido as messagens configuradas acima*/
{

/*Configuramos o e-mail para o qual serão enviadas as informações*/

$seuemail = "email@email.com.br";/*email de destino*/

$assunto = "contato do site";/*assunto padrão do email(não o digitado pelo úsuario)*/

/*Configuramos os cabeçalhos do e-mail*/
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=utf-8\r\n";/*para o envio com formatação HTML. Charset po ser iso-8859-1 também*/
$headers .= "From: $seuemail \r\n";/*Para "seu email"*/

/*Configuramos o conteúdo do e-mail*/
$conteudo = "<strong>Nome:</strong> $nome<br />";/*vai para o seu email o que foi digitado no campo "nome"*/
$conteudo .= "<strong>Email:</strong> $email<br />";/*vai para o seu email o que foi digitado no campo "email"*/
$conteudo .= "<strong>Assunto:</strong> $assunto_user<br />";/*vai para o seu email o que foi digitado no campo "assunto"*/
$conteudo .= "<strong>Mensagem:</strong> $mensagem<br />";/*vai para o seu email o que foi digitado no campo "mensagem"*/

/*Enviando o e-mail...*/
$enviando = mail($seuemail, $assunto, $conteudo, $headers);

/*verifica se o e-mail foi enviado com sucesso*/
if($enviando) {
echo "Mensagem enviada com sucesso!";
echo "<script>alert(\"Mensagem enviada com sucesso!\")</script>";
echo "<script>window.location = \"index.html\"</script>";
}
else{/*seu ouve algum erro...*/
echo "<p><b>$nome</b><br />Ouve um erro no envio, desculpe-nos pelo transtorno!!!</p>";
}
}
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Adicione o campo input do tipo file, adicione o enctype='multipart/form-data'

e depois no php manipule as propriedades do arquivo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

larga a mão pow, o cara te ajudou na maior parte, o minimo que você faz é agradecer. KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK

segue como manipular:

$nomeTemporario = $_FILES["seuArquivo"]["tmp_name"]

ai é só saber qual biblioteca do php você ta usando, se for PHPMailer, só pesquisar la como anexar arquivos, e anexar o $nomeTemporario

Compartilhar este post


Link para o post
Compartilhar em outros sites

pra saber a biblioteca do php é no servidor né? Peguei aquele codigo la em cima pronto na net e funciona direitinho... vou incluir isso ai no codigo e testar...

Compartilhar este post


Link para o post
Compartilhar em outros sites

vish... deu erro.. falha ao carregar enviar.php

o codigo ficou assim

contato.html

<form action="enviar.php" method="post">
<fieldset>
<legend>Entre em contato</legend>
<small>*Campos de Preenchimentos Obrigatório</small><br />
<label for="nome"> * Seu nome:</label>
<input id="nome" name="nome" size="31" type="text" value="" /><br />
<label for="email">* Seu email:</label>
<input id="email" name="email" size="31" type="text" value="" /><br />
<label for="assunto">* Assunto:</label>
 <input id="assunto" maxlength="50" name="assunto" size="15" type="text" value="" /><br />
<label for="mensagem">* Mensagem:</label><br />
<textarea id="mensagem" cols="53" rows="5" name="mensagem"></textarea><br />
<input name="anexo" type="file" value"enctype='multipart/form-data'"/><br />
<input name="enviar" type="submit" value="Enviar" class="botao"/>
<input name="cancelar" type="reset" value="Limpar" class="botao"/>
</fieldset>
</form>

enviar.php

<?php
/*Variaveis do Formulario*/
$nome = trim($_POST['nome']);/*recebe os dados digitados no campo "nome"*/
$email = trim($_POST['email']);/*recebe os dados digitados no campo "email"*/
$assunto_user = trim($_POST['assunto']);/*recebe os dados digitados no campo "assunto"*/
$mensagem = trim($_POST['mensagem']);/*recebe os dados digitados no campo "mensagem"*/
$anexo = $_FILES["seuArquivo"]["tmp_name"]

$enviar = $_POST['enviar'];/*Botão enviar*/

/*variavel que contará os erros*/
$erros = 1;

/*transforma em variavel global, a variã¡vel email*/
global $email;
if($enviar)/*Se o botão enviar for pressionado, faça...*/
{
/*Verifica campo "nome" vazio*/
if($nome == "")
{
$erros++;
echo "<small class=\"erro\">O Campo nome esta vazio</small><br />";
}
elseif(is_numeric($nome))/*verifica se foi digitado número no campo*/
{
$erros++;
echo "<small class=\"erro\">Você digitou numero no campo nome</small><br />";
}
/*Verifica campo "email" vazio*/
if($email == "")
{
$erros++;
echo "<small class=\"erro\">O Campo email está vazio</small><br />";
}
/*Verifica campo "assunto" vazio*/
if($assunto_user == "")
{
$erros++;
echo "<small class=\"erro\">O Campo assunto esté vazio</small><br />";
}
/*Verifica campo mensagem vazio*/
if($mensagem == "")
{
$erros++;
echo "<small class=\"erro\">O Campo mensagem esté vazio</small><br />";
}

/*verifica email, se digitado incorretamente*/
$email = str_replace (" ", "", $email);
$email = str_replace ("/", "", $email);
$email = str_replace ("@.", "@", $email);
$email = str_replace (".@", "@", $email);
$email = str_replace (",", ".", $email);
$email = str_replace (";", ".", $email);

if(strlen($email)<8 || substr_count($email, "@")!=1 || substr_count($email, ".")==0)
{
$erros++;
echo "<small class=\"erro\">Por favor, digite seu <b>e-mail</b> corretamente.</small><br />";
}
if($erros <= 1)/*se não tiver algum erro continuara abaixo, se tiver é exibido as messagens configuradas acima*/
{

/*Configuramos o e-mail para o qual serão enviadas as informações*/

$seuemail = "contato@lyondrywall.com.br";/*email de destino*/

$assunto = "contato do site";/*assunto padrão do email(não o digitado pelo úsuario)*/

/*Configuramos os cabeçalhos do e-mail*/
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=utf-8\r\n";/*para o envio com formatação HTML. Charset po ser iso-8859-1 também*/
$headers .= "From: $seuemail \r\n";/*Para "seu email"*/

/*Configuramos o conteúdo do e-mail*/
$conteudo = "<strong>Nome:</strong> $nome<br />";/*vai para o seu email o que foi digitado no campo "nome"*/
$conteudo .= "<strong>Email:</strong> $email<br />";/*vai para o seu email o que foi digitado no campo "email"*/
$conteudo .= "<strong>Assunto:</strong> $assunto_user<br />";/*vai para o seu email o que foi digitado no campo "assunto"*/
$conteudo .= "<strong>Mensagem:</strong> $mensagem<br />";/*vai para o seu email o que foi digitado no campo "mensagem"*/

/*Enviando o e-mail...*/
$enviando = mail($seuemail, $assunto, $conteudo, $headers, $anexo);

/*verifica se o e-mail foi enviado com sucesso*/
if($enviando) {
echo "Mensagem enviada com sucesso!";
echo "<script>alert(\"Mensagem enviada com sucesso!\")</script>";
echo "<script>window.location = \"index.html\"</script>";
}
else{/*seu ouve algum erro...*/
echo "<p><b>$nome</b><br />Ouve um erro no envio, desculpe-nos pelo transtorno!!!</p>";
}
}
}
?>

tinha esquecido do ";" no final... agora parou de dar erro, o email chega, mas sem anexo

Compartilhar este post


Link para o post
Compartilhar em outros sites

jjlipe,

primeiramente Recomendo que utilize a nossa ferramenta de pesquisa para encontrar assuntos relacionados.. e certamente tem algo sobre anexos.

segundo, você começou errado ao copiar um código pronto sem entender como ele funciona.

Terceiro, você não está usando o enctype='multipart/form-data' no lugar certo.

por ultimo: Use o google para pesquisar.

Classe phpmailer com anexo

Enviar formulário com anexo

Att,

Dif

Compartilhar este post


Link para o post
Compartilhar em outros sites

ok... obrigado pelo valioso tempo desperdiçado. Ainda que eu não tenha resolvido o meu problema, o que descaracteriza o valor do fórum.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Depois de muito tempo perdido com forums, consegui um que funciona

<?php 
$subm = $_POST['frm_ok']; // Váriavel que indica que o formulário foi submetido
$name = $_POST['nome']; // Nome do remetente(Emissor)
$mail = $_POST['email']; // Segue o endereço de email do remetente
$__sj = "Formulário de Contato"; // Informe um assunto para a mensagem
$__to = $_POST['destino']; // Defina o email do destinatário(Receptor), para mais de um separe-os com vírgula
// Verifico se o formulário foi submetido
if(isset($subm)):
// Descomente a linha abaixo, se você quiser analisar as variáveis que estão sendo passadas pelo formulário via post
//echo "<pre>",print_r($_POST),"</pre>";
// Filtro algumas váriaveis passadas
$find = "/(content-type|bcc:|cc:)/i";
if(preg_match($find, $name) || preg_match($find, $mail))
exit("<h3>Sem meta/header inclusões, por favor.</h3>");
// Valido o email do remetente, usando expressão regular
$regex = "^([[:alnum:]]+)([-._]([[:alnum:]]+))*[@]([[:alnum:]]+)([-._]([[:alnum:]]+))*[.]([[:alnum:]]){2}([[:alnum:]])?$";
if(isset($mail) && !ereg($regex, $mail))
$erro = 1;
// Mensagem formatada, enviada no corpo do email
$html = "<!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\" xml:lang=\"pt-BR\" lang=\"pt-BR\">
<head>
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\">
<style>
body {background:#FFFFFF;}
a, a:link {color:#5b6105; text-decoration:none;}
#tab {margin:0; padding:0px; width:500px; border:1px solid #8F8E96; padding:10px;}
#tab tr {background:#F6F6F6; }
#tab td {color:#000000; font: normal 11px arial, helvetica, sans-serif; border:dashed 1px #DDD; padding:30px;}
</style>
</head>
<body>
<br />
<table border='0' cellspacing='10' cellpadding='0' id='tab' align='center'>
<tr>
<td>
<b>Nome:</b> {$name}<br />
<b>Email:</b> {$mail}<br />
<b>Telefone:</b> {$_POST['telefone']}<br /><br />
<b>Mensagem:</b> {$_POST['mensagem']}<br />
</td>
</tr>
</table>
<br />
</body>
</html>
";
// Resolvo a diferença de quebra de linhas, entre o Linux e o Windows
$snap = (PHP_OS == "Linux")?"\n":((PHP_OS == "WINNT")?"\r\n":exit());
// Verifico se o formulário postado, possui arquivos anexos
$file = (isset($_FILES["arquivo"]) && in_array("0",$_FILES["arquivo"]["error"]))?$_FILES["arquivo"]:FALSE;
// Executo a condição seguinte, se identificar um ou mais anexos junto a mensagem
if($file){
// É removido da matriz os anexos falsos
for($x=0; $x<count($_FILES["arquivo"]["name"]); $x++):
if(empty($file['name'][$x])){
unset($file['name'][$x]);
unset($file['size'][$x]);
unset($file['type'][$x]);
unset($file['tmp_name'][$x]);
unset($file['error'][$x]);
}else{
$attach[] = array(
$file['name'][$x],
$file['size'][$x],
$file['type'][$x],
$file['tmp_name'][$x]
);
}
endfor;
$boundary = "==Multipart_Boundary_x".md5(time())."x";
$body = stripslashes($html);
// Criamos os cabeçalhos MIME utilizados para separar as partes da mensagem MIME
$html = "--".$boundary.$snap;
$html.= "Content-Transfer-Encoding: 8bits".$snap;
$html.= "Content-Type: text/html; charset=\"ISO-8859-1\"".$snap.$snap;
$html.= $body.$snap;
$html.= "--".$boundary.$snap;
for($i=0; $i<sizeof($attach); $i++):
if(is_uploaded_file($attach[$i][3])){
$Name = $attach[$i][0];
$Size = $attach[$i][1];
$Type = $attach[$i][2];
$Temp = $attach[$i][3];
if((strlen($Name)>1) && ($Size>0)){
$fopen = fopen($Temp,"rb"); // Fazemos a leitura do arquivo a ser anexado em leitura binária(rb)
$fread = fread($fopen, filesize($Temp));
$cript = base64_encode($fread); // Codificamos o arquivo de dados com Base64
$close = fclose($fopen);
$chunk = chunk_split($cript); // Convertemos a saída de base64_encode(), conforme semântica RFC 2045
$html.= "Content-Disposition: attachment; filename=\"{$Name}\"".$snap;
$html.= "Content-Type: {$Type}; name=\"{$Name}\"".$snap;
$html.= "Content-Transfer-Encoding: base64".$snap.$snap;
$html.= $chunk.$snap;
if(sizeof($attach) == $i+1) $html.= "--".$boundary."--".$snap;
else $html.= "--".$boundary.$snap;
}
}
endfor;
// Adiciono os cabeçalhos de um arquivo anexado
$head = "MIME-Version: 1.0".$snap;
$head.= "From: {$mail}".$snap;
$head.= "Content-type: multipart/mixed; boundary=\"{$boundary}\"".$snap;
$head.= $boundary.$snap;
}
// Caso contrário, enviamos uma mensagem html, sem anexos
else{
$head = "MIME-Version: 1.0".$snap;
$head.= "From: {$mail}".$snap;
$head.= "Content-type: text/html; charset=\"ISO-8859-1\"".$snap;
}
endif;
?>
<!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>
<title>Multi-Anexos</title>
<link href="_css/typo.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="div">
<h1>Orcamentos - Provas - Outros Contatos</h1>
<?
// Se o formulário for enviado sem a presença do email do remetente, é exibido uma mensagem de retorno
if(isset($erro) && $erro==1):
?>
<div style='padding:10px;'>
<a href='javascript:history.back(1)'>Clique aqui para retornar e informe um <b>email válido</b>!</a>
</div>
<?
// Faço o envio da mensagem, se o formulário for submetido e passar no teste anterior
elseif(isset($subm)):
?>
<div style='padding:10px;'>
<?
$msg1 = "<h2><b>Sua mensagem foi enviada com sucesso!</b></h2>";
$msg2 = "<h2><b style='color:#e23b30;'>Sua mensagem não pôde ser enviada.</b><br /><br />Por favor tente novamente mais tarde.</h2>";
$conf = @mail($__to, $__sj, $html, $head);
echo ($conf)?$msg1:$msg2;
?>
<br />
<a href='javascript:history.back(1)'>Clique aqui para retornar!</a>
</div>
<?
// Exibe o formulário para preenchimento
else:
?>
<p>Preencha o formulario abaixo para enviar sua mensagem.<br />Necessario preencher todos os campos.</p>
<form id="frm" action="<?=basename(__FILE__)?>" method="post" enctype="multipart/form-data">
<input type="hidden" name="frm_ok" />
<fieldset>
<legend>Formulario de Contato</legend>
<p>
<label for="nome">Nome:</label>
<input id="nome" name="nome" onKeyDown="if(event.keyCode==13) event.keyCode=9;" />
</p>
<p>
<label for="email">E-Mail:</label>
<input id="email" name="email" onKeyDown="if(event.keyCode==13) event.keyCode=9;" />
</p>
<p>
<label for="telefone">Telefone:</label>
<input id="telefone" name="telefone" onKeyDown="if(event.keyCode==13) event.keyCode=9;" />
</p>
<p><label for="para">Para:</label>
<select name="destino" class="texto">
<option value="email@seusite.com.br" selected>Selecione um Setor</option>
<option value="email@seusite.com.br">Provas</option>
<option value="email@seusite.com.br">Orçamento</option>
<option value="email@seusite.com.br">Administração do Site</option>
</select>
<p>
<label for="mensagem">Anexo #1:</label>
<input type="file" name="arquivo[]" size="50" class="file" />
</p>
<p>
<label for="mensagem">Anexo #2:</label>
<input type="file" name="arquivo[]" size="50" class="file" />
</p>
<p>
<label for="mensagem">Anexo #3:</label>
<input type="file" name="arquivo[]" size="50" class="file" />
</p>
<p>
<label for="mensagem">Mensagem:</label>
<textarea id="mensagem" name="mensagem" class="text"></textarea>
</p>
<p style="text-align:right; padding-right:10px;">
<input type="submit" value="ENVIAR" class="send" />
</p>
</fieldset>
</form>
<?
endif;
?>
</div>
</body>
</html>

Obrigado a quem pelo menos tentou ajudar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caso o autor do tópico necessite, o mesmo será reaberto, para isso deverá entrar em contato com a moderação solicitando o desbloqueio.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante
Este tópico está impedido de receber novos posts.
Entre para seguir isso  





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×