Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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(($destinatario,$assunto,$mensagem,$headers)){
print "falha no envio da mensagem";
} else {
[echo](http://br.php.net/echo) "<script>window.location.href='resp.htm'</script>";
}
?>Já tentou extrair alguma coisa deste tópico? ;)
Ja tentei, Frenesi. Nao consegui extrair a parte que faz apenas o anexo :(
Pode me ajudar? So quero separar isso do meio do codigo. So quero o codigo que faz o anexo do arquivo.
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](http://br.php.net/fopen)($attach, "r");
$contents = [fread](http://br.php.net/fread)($file, $attach_size);
$encoded_attach = [chunk_split](http://br.php.net/chunk_split)([base64_encode](http://br.php.net/base64_encode)($contents));
[fclose](http://br.php.net/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](http://br.php.net/mail)($to, [stripslashes](http://br.php.net/stripslashes)($subject), $msg_body, $mailheaders);
[echo](http://br.php.net/echo)"<center>Enviado com Sucesso!</center>";
}
else{
//se não tiver anexo ele envia só a mensagem com esses headers
[echo](http://br.php.net/echo) "<center>Erro: Envio de foto obrigatório!!!</center>";
[exit](http://br.php.net/exit);
[mail](http://br.php.net/mail)($to, [stripslashes](http://br.php.net/stripslashes)($subject), $msg_body, $mailheaders);
[echo](http://br.php.net/echo)"<center>Enviado com Sucesso!</center>";
}
?>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.
>
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.,
>
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.
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";
>
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](http://br.php.net/fopen)($attach, "r");
$contents = [fread](http://br.php.net/fread)($file, $attach_size);
$encoded_attach = [chunk_split](http://br.php.net/chunk_split)([base64_encode](http://br.php.net/base64_encode)($contents));
[fclose](http://br.php.net/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](http://br.php.net/mail)($to, $subject, $msg_body, $mailheaders);
[echo](http://br.php.net/echo)"<center>Enviado com Sucesso!</center>";
}
else{
//se não tiver anexo ele envia só a mensagem com esses headers
[echo](http://br.php.net/echo) "<center>Erro: Envio de foto obrigatório!!!</center>";
[exit](http://br.php.net/exit);
[mail](http://br.php.net/mail)($to, $subject, $msg_body, $mailheaders);
[echo](http://br.php.net/echo)"<center>Enviado com Sucesso!</center>";
}
?>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...>
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?
Alguem saberia como faz pra enviar pra mais de 1 email?
Alguem saberia como faz pra enviar pra mais de 1 email?
Separe os destinatários com ;
Já tentou extrair alguma coisa deste tópico? ;)