Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Joelson Aguillera

Formulario de e-mail c/ Anexo

Recommended Posts

Pessoal, boa tarde! Estou querendo complementar o codigo abaixo com um anexo. Eu ja li e reli varios tutoriais mas nao consegui. Ele envia os textos mas nao o anexo. Pode me ajudar? Preciso de algo extremamente simples, nao precisa fazer verificacoes de arquivos, so preciso entender como funciona a parte de anexos.

Fico no aguardo e ja agradeço!!

PHP
<?php

$nome =         $_POST['nome'];

$email =        $_POST['email'];

$telefone = $_POST['telefone'];

$resposta = $_POST['resposta'];

 

 

$msg = "<font face=’Verdana’ size=’1?><b>Nome:</b> t$nome</font><br>";

$msg .= "<font face=’Verdana’ size=’1?><b>E-mail:</b> t$email</font><br>";

$msg .= "<font face=’Verdana’ size=’1?><b>Telefone:</b> t$telefone</font><br>";

$msg .= "<font face=’Verdana’ size=’1?><b>Resposta:</b> t$resposta</font><br>";

 

$mensagem = "$msg";

$remetente = "$email";

$destinatario = "MEU E-MAIL";

$assunto = "Contato por formulario do site";

$headers = "From: ".$remetente."nContent-type: text/html"; # o ‘text/html’ é o tipo mime da mensagem

if(!mail($destinatario,$assunto,$mensagem,$headers)){

print "falha no envio da mensagem";

} else {

echo "<script>window.location.href='resp.htm'</script>";

}

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Frenesi, isolei este codigo para anexo e ele funciona. Tem como simplificar mais?

PHP
<?

     //pega os dados enviados pelo usuário

     $to        = "MEU E-MAIL"; //Coloque aqui o seu email

     $attach  = $_FILES["arquivo"]["tmp_name"];

     $attach_name  = $_FILES["arquivo"]["name"];

     $attach_size  = $_FILES["arquivo"]["size"];

     $attach_type  = $_FILES["arquivo"]["type"];

     //verifica se tem arquivo anexo, o if é se tiver e o else se não tiver anexo

     if ($attach !=null)

     {

     //abre o arquivo para codificá-lo no formato de email

     $file = fopen($attach, "r");

     $contents = fread($file, $attach_size);

     $encoded_attach = chunk_split(base64_encode($contents));

     fclose($file);

     //define os headers do anexo e da mensagem

     $mailheaders .= "MIME-version: 1.0n";

     $mailheaders .= "Content-type: multipart/mixed; ";

     $mailheaders .= "boundary="Message-Boundary"n";

     $mailheaders .= "Content-transfer-encoding: 7BITn";

     $mailheaders .= "X-attachments: $attach_name";

   

     $body_top = "--Message-Boundaryn";

     $body_top .= "Content-type: text/plain; charset=US-ASCIIn";

     $body_top .= "Content-transfer-encoding: 7BITn";

     $body_top .= "Content-description: Mail message bodynn";

   

     $msg_body = $body_top . $msg_body;

   

     $msg_body .= "nn--Message-Boundaryn";

     $msg_body .= "Content-type: $attach_type; name="$attach_name"n";

     $msg_body .= "Content-Transfer-Encoding: BASE64n";

     $msg_body .= "Content-disposition: attachment; filename="$attach_name"nn";

     $msg_body .= "$encoded_attachn";

     $msg_body .= "--Message-Boundary--n";

     //envia o email para as variáveis já definidas e tratadas e mostra mensagem de sucesso

     mail($to, stripslashes($subject), $msg_body, $mailheaders);

     echo"<center>Enviado com Sucesso!</center>";

     }

     else{

     //se não tiver anexo ele envia só a mensagem com esses headers

     echo "<center>Erro: Envio de foto obrigatório!!!</center>";

     exit;

 

     mail($to, stripslashes($subject), $msg_body, $mailheaders);

     echo"<center>Enviado com Sucesso!</center>";

     }

     ?>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Simplificar mais o que? Já está no caminho, é isso mesmo.

 

Agora o que você tem que fazer é pegar aquela variável sua $msg e todas as vindas pelo formulário, claro pois estão juntas, e concatenar com a $msg_body.

 

E o resto é só trocar: $to, $subject e adicionar mais um no $mailheader para o remetente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Simplificar mais o que? Já está no caminho, é isso mesmo.

 

Agora o que você tem que fazer é pegar aquela variável sua $msg e todas as vindas pelo formulário, claro pois estão juntas, e concatenar com a $msg_body.

 

E o resto é só trocar: $to, $subject e adicionar mais um no $mailheader para o remetente.

Como assim, Frenesi... Nao entendi... Fiz o que você recomendou mas nao funcionou. Nao envia o anexo nem os campos preenchidos. Eu tentei jogar o segundo codigo dentro do primeiro.,

Compartilhar este post


Link para o post
Compartilhar em outros sites

Simplificar mais o que? Já está no caminho, é isso mesmo.

 

Agora o que você tem que fazer é pegar aquela variável sua $msg e todas as vindas pelo formulário, claro pois estão juntas, e concatenar com a $msg_body.

 

E o resto é só trocar: $to, $subject e adicionar mais um no $mailheader para o remetente.

Tem como me dar u exemplo? Nao to conseguindo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você vai pegar os seus campos do formulário:

$nome = $_POST['nome'];
$email = $_POST['email'];
$telefone = $_POST['telefone'];
$resposta = $_POST['resposta'];
E colocar neste novo, lá onde tem comentado "pega os dados enviados pelo usuário".

 

Depois, você vai concatenar todas estas variáveis à $msg_body, assim como você fez no seu com a variável $msg.

 

E em $mailheaders você precisa concatenar o remetente:

$mailheaders .= "From: <$remetente>\n";

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você vai pegar os seus campos do formulário:

$nome = $_POST['nome'];
$email = $_POST['email'];
$telefone = $_POST['telefone'];
$resposta = $_POST['resposta'];
E colocar neste novo, lá onde tem comentado "pega os dados enviados pelo usuário".

 

Depois, você vai concatenar todas estas variáveis à $msg_body, assim como você fez no seu com a variável $msg.

 

E em $mailheaders você precisa concatenar o remetente:

$mailheaders .= "From: <$remetente>\n";

Saca só Frenesi, ta funcionando =D

Mas tem um problema, como faco para o texto chegar formatado no e-mail? Quanto tento colocar comando html dentro do codigo ele imprimi junto. Por exemplo abaixo. cheg assim no meu mail:

 

 

<font>Nome: Joelson Aguillera</font>

E-mail: ***************

Mensagem: Joelson asdalsdas

 

Como corrijo isso? Agradeco a ajuda :)

 

PHP
<?PHP

     //pega os dados enviados pelo usuário

     $nome = $_POST["nome"];

         $email = $_POST["email"];

         $mensagem = $_POST["mensagem"];

     $rementente = "$email";

         

     $to        = "MEU MAIL"; //Coloque aqui o seu email

     $attach  = $_FILES["arquivo"]["tmp_name"];

     $attach_name  = $_FILES["arquivo"]["name"];

     $attach_size  = $_FILES["arquivo"]["size"];

     $attach_type  = $_FILES["arquivo"]["type"];

     //verifica se tem arquivo anexo, o if é se tiver e o else se não tiver anexo

     if ($attach !=null)

     {

     //abre o arquivo para codificá-lo no formato de email

     $file = fopen($attach, "r");

     $contents = fread($file, $attach_size);

     $encoded_attach = chunk_split(base64_encode($contents));

     fclose($file);

     //define os headers do anexo e da mensagem

     $mailheaders ="From: ".$remetente."nContent-type: text/html"; # o ‘text/html’ é o tipo mime da mensagem

     $mailheaders .= "MIME-version: 1.0n";

     $mailheaders .= "Content-type: multipart/mixed; ";

     $mailheaders .= "boundary="Message-Boundary"n";

     $mailheaders .= "Content-transfer-encoding: 7BITn";

     $mailheaders .= "X-attachments: $attach_name";

   

     $body_top = "--Message-Boundaryn";

     $body_top .= "Content-type: text/plain; charset=US-ASCIIn";

     $body_top .= "Content-transfer-encoding: 7BITn";

     $body_top .= "Content-description: Mail message bodynn";

 

     $subject = "$email";

     $msg_body = $body_top . $msg_body;

 

     $msg_body .= "<font>Nome:t$nome</font>n";

     $msg_body .= "E-mail:t$emailn";

     $msg_body .= "Mensagem:t$mensagemn";    

     $msg_body .= "nn--Message-Boundaryn";

     $msg_body .= "Content-type: $attach_type; name="$attach_name"n";

     $msg_body .= "Content-Transfer-Encoding: BASE64n";

     $msg_body .= "Content-disposition: attachment; filename="$attach_name"nn";

     $msg_body .= "$encoded_attachn";

     $msg_body .= "--Message-Boundary--n";

     //envia o email para as variáveis já definidas e tratadas e mostra mensagem de sucesso

     mail($to, $subject, $msg_body, $mailheaders);

     echo"<center>Enviado com Sucesso!</center>";

     }

     else{

     //se não tiver anexo ele envia só a mensagem com esses headers

     echo "<center>Erro: Envio de foto obrigatório!!!</center>";

     exit;

 

     mail($to, $subject, $msg_body, $mailheaders);

     echo"<center>Enviado com Sucesso!</center>";

     }

     ?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na primeira linha do $mailheaders, tire Content-type: text/html pois logo abaixo, o Content-type já está sendo definido.

 

Na variável $msg_body, jogue todo o seu conteúdo, que é do formulário para baixo, deixando a parte do anexo separado e adicione o Content-type:

$msg_body .= "\n\n--Message-Boundary\n";
$msg_body .= "Content-type: $attach_type; name=\"$attach_name\"\n";
$msg_body .= "Content-Transfer-Encoding: BASE64\n";
$msg_body .= "Content-disposition: attachment; filename=\"$attach_name\"\n\n";
$msg_body .= "$encoded_attach\n";
$msg_body .= "--Message-Boundary--\n";

$msg_body .= "Content-type: text/html; charset=iso-8859-1\r\n";
$msg_body .= "<font>Nome:\t$nome</font>\n";
$msg_body .= "E-mail:\t$email\n";
$msg_body .= "Mensagem:\t$mensagem\n";

Flws...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na primeira linha do $mailheaders, tire Content-type: text/html pois logo abaixo, o Content-type já está sendo definido.

 

Na variável $msg_body, jogue todo o seu conteúdo, que é do formulário para baixo, deixando a parte do anexo separado e adicione o Content-type:

$msg_body .= "\n\n--Message-Boundary\n";
$msg_body .= "Content-type: $attach_type; name=\"$attach_name\"\n";
$msg_body .= "Content-Transfer-Encoding: BASE64\n";
$msg_body .= "Content-disposition: attachment; filename=\"$attach_name\"\n\n";
$msg_body .= "$encoded_attach\n";
$msg_body .= "--Message-Boundary--\n";

$msg_body .= "Content-type: text/html; charset=iso-8859-1\r\n";
$msg_body .= "<font>Nome:\t$nome</font>\n";
$msg_body .= "E-mail:\t$email\n";
$msg_body .= "Mensagem:\t$mensagem\n";

Flws...

Frenesi, qd eu coloco do modo que você recomendou o $msg_body ela sai td baguncado e com o conteudo do anexo como texto. mas qd inverto:

 

PHP
$msg_body = $body_top . $msg_body;

 

     $msg_body .= "Content-type: text/html; charset=iso-8859-1rn";

     $msg_body .= "Nome:t$nomen";

     $msg_body .= "E-mail:t$emailn";

     $msg_body .= "Mensagem:t$mensagemn";

 

     $msg_body .= "nn--Message-Boundaryn";

     $msg_body .= "Content-type: $attach_type; name="$attach_name"n";

     $msg_body .= "Content-Transfer-Encoding: BASE64n";

     $msg_body .= "Content-disposition: attachment; filename="$attach_name"nn";

     $msg_body .= "$encoded_attachn";

     $msg_body .= "--Message-Boundary--n";

 

Ele sai assim e com o anexo correto.

 

Content-type: text/html; charset=iso-8859-1

<font>Nome:</font> joelson Aguillera

E-mail: joelson_aguilera@fBO.com.br

Mensagem: IAUEhiAHUEIuaheiuh

AIEUHaieuAUE

 

 

 

 

Ja tentei de tdas as formas mas nao sai com a formatacao. Onde estou errando?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.