Hoje gostaria de implementar no nosso Blog um assunto simples, porém, de grande importância: Envio de Ficheiros por Formulário Para Email.
Quem utiliza o PHP de forma profissional, certamente já encontrou algum cliente com necessidade de enviar ficheiro por formulário (especialmente gráficas que precisam receber ficheiro em formato do Corel ou Photoshop e muitas vezes, esses ficheiros não chegam por email, por causa de seu tamanho).
Através desta solução, você poderá implementar o script em seu site e resolver este problema!
Como fazemos em todas as nossas matérias, em anexo temos disponível os ficheiros para que tu possa estudar e testar a matéria que estamos lhe explicando.
Formulário Em HTML
Antes de partirmos para a programação, é importante analisar o formulário que vamos preencher para enviar o ficheiro. Por isso, abra o ficheiro index.php (disponível no arquivo em anexo – conforme o código e imagem a seguir).
Copie e cole os ficheiros disponíveis em anexo em seu Servidor.
Preencha os dados disponíveis no formulário e selecione o ficheiro a ser enviado (conforme a imagem a seguir).
Após preencher todos os dados, clique no botão Enviar para efetuar o envio da mensagem.
Feito isso, a mensagem será enviada com sucesso.
OBS.: Não esqueça de alterar o email de recebimento nas linhas 22 e 28 do ficheiro “envia_email.php”.
Veja na imagem a seguir o exemplo de recebimento:
Script De Envio Em PHP
Vamos analisar um pouco mais sobre o ficheiro “envia_email.php”.
----- Linha 3 a linha 6 -----
$nome = $_POST['nome'];
$email = $_POST['email'];
$assunto = $_POST['assunto'];
$msg = $_POST['msg'];
No trecho acima, recebemos as variáveis do ficheiro “index.php”.
OBS.: Não trouxemos o ficheiro, pois pretendemos fazer abaixo.
----- Linha 8 -----
$corpo = "Nome: $nome
E-mail: $email
Mensagem: $msg";
Através da linha acima, traremos os campos necessários para a apresentação do conteúdo em tela.
OBS.: Trata-se de uma apresentação simples e objetiva. Caso queira melhorar esta apresentação, apenas comente a linha 8 e insira o script abaixo logo na linha a seguir:
$corpo = "
Prezado Administrador, Recebemos através do site SEUSITE.COM.PT a mensagem abaixo: Nome: $nome Atenciosamente, Central de Relacionamentos Temos a forte convicção de que o relação entre cliente e empresa deve ser marcada pelo conceito de parceria, fortalecendo o vínculo estabelecido em bases de confiança e apoio mútuo. |
";
OBS.: Altere informações como “Sua Empresa”, “Imagem” para personalizar este trecho do código.
----- Linha 10 a linha 16 -----
if (($fp = fopen($_FILES['arquivo']['tmp_name'],"rb")))
{
$anexo = fread($fp,filesize($_FILES['arquivo']['tmp_name']));
$anexo = base64_encode($anexo);
fclose($fp);
$anexo = chunk_split($anexo);
}
O trecho acima trata o recebimento do ficheiro que está sendo enviado.
----- Linha 17 a linha 25 -----
if ($anexo)
{
$mensagem = "--$bound\nContent-type: text/html\nContent-Transfer-Encoding: 7bit\n\n$corpo\n\n"
. "--$bound\nContent-type: $_FILES[arquivo][type]\nContent-Disposition: attachment; filename=" . $_FILES['arquivo']['name']
. "\nContent-Transfer-Encoding: base64\n\n$anexo\n"
. "--$bound\r\n";
mail("seuemail@webmaster.pt",$assunto,$mensagem,"From: $email\nMIME-Version: 1.0\nContent-type: multipart/mixed;
boundary=\"$bound\"");
print("Mensagem Enviada com Sucesso!");
//print($fp);
}
Se houver ficheiro a ser enviado, o sistema efetuará o envio para a conta de email acima descrita, (para o correto funcionamento, onde está escrito “seuemail@webmaster.pt”, altere para a sua conta de email).
----- Linha 26 a linha 30 -----
else
{
mail("seuemail@webmaster.pt",$assunto,$corpo,"From: $email\nContent-type: text/html");
print("Mensagem Enviada com Sucesso - Sem Anexo");
}
Se não houver ficheiro em anexo, o sistema efetuará o envio para a caixa de mensagens acima descrita sem o ficheiro, (para o correto funcionamento, onde está escrito “seuemail@webmaster.pt”, altere para a sua conta de email).
Trata-se de um script simples e poderá ser modificado de acordo com suas necessidades.
Ficamos por aqui em mais uma matéria! Esperamos tê-lo ajudado em algo…
Envie-nos suas dúvidas e dê sugestões para as próximas matérias! Nosso compromisso é lhe ajudar!
Download do código fonte utilizado neste tutorial: Envio Ficheiros Por Formulário Para Email
17 Responses
Como não percebo nada de php
é possível explicar melhor o ficheiro envia_email.php tipo o código completo?
Obrigado
da linha 3 à 6 não se vê nada na primeira imagem, porque nao colocaram o código todo seguido, agora dá-me erro… n sei pk
há partes nas imagens de baixo que nao sei onde se completam na de cima… como faço para meter o meu mail?
Olá, eu gostaria de te perguntar aonde encontro um formulario do tipo: ENVIE SUA RECEITA AQUI. aí a pessoa escreve a receita e se tiver alguma foto da mesma vai no icone procurar e adiciona a imagem da receita. Apos isso ela envia e eu recebo no email, analiso e posto. Voce poderia me ajudar.
Obrigado. Um abraço ….Marcos
ola, eu fiz o download desse formulario, personalizei conforme a minha necessidade, porem, toda vez que tento enviar o formulario sem arquivo anexo da o seguinte erro:
" Warning: fopen() [function.fopen]: Filename cannot be empty in /home/netwanin/web/netwan/envia_trabalhe.php on line 107
Mensagem Enviada com Sucesso – Sem AnexoMensagem Enviada com Sucesso – Sem Anexo "
Você pode me ajudar a solucionar esse erro?
Ja sentei com o meu chefe, tentamos de varias maneiras que pareciam logicas mas nao conseguimos resolver.
Obrigado, Wesley
A mim também dá este erro, como dá para resolver? e quando tem o ficheiro, dá mensagem que $anexo é desconhecido!
Será que dá para ajudar?
Olá, só passo aqui para agradecer e parabenizar, ótimo post e de fácil compreensão para pessoas como eu que conhece muito pouco de web, procurei muito na internet sobre o assunto mas não conseguir encontrar nada tão bem explicado e de fácil aplicação. Você não tem ideia de como isso vai me ajudar.
Abraço e parabéns novamente.
Olá!
Primeiramente, Muito Obrigado pelo arquivo disponibilizado.
Me serviu muito bem cara. foi 10! não foi 1000 kkkk.
Eu só gostaria de saber como faço pra que nesse código um cliente possa me mandar ao invés de uma, varias fotos.
Pode me ajudar?
Grato!
mande ele adc tudo em um arquivo winrar
Este realmente funciona! Obrigado por esta contribuição.
Boa tarde, ocorreu o seguinte erro:
Warning: fopen() [function.fopen]: Filename cannot be empty in /"o_meu_endereço"/formulario.php on line 20
Mensagem Enviada com Sucesso – Sem Anexo "
Será que me podem ajudar a solucionar este erro?
Obrigado
Continuação de excelente trabalho.
Excelente. Depois de procurar bastante na internet esse foi o que funcionou melhor!
Very good job! Work very well. Thank you very much.
e como eu faço um formulário desse para o blog wordpress?
Boa noite pessoal pra arrumar esse ero apenas adiciona na primeira linha " <? " "<?php" é um erro do IE
abraços !
Quemuel obrigado! Ajudou muito e foi muito claro também. Se eu quiser deixar o assunto fixo, para que o e-mail chegue sempre com o mesmo assunto onde devo alterar? Um abraço e parabéns
Alguém sabe como arrumar?
Warning: fopen() [function.fopen]: Filename cannot be empty in D:weblocaluserxxxwwwenvia_email.php on line 10
não consegui com a dica do victor!
Como faria para restringir o tipo de arquivo que pudesse ser enviado? Se, por exemplo, eu quiser que só me enviem arquivos .doc ?
Obrigado
Eu baixei em código mas não funcionou apresenta o seguinte erro, poderia me ajudar por favor?
Ficarei muito grata!.
E-mail: $email
Mensagem: $msg"; $bound = "XYZ-" . date("dmYis") . "-ZYX"; if (($fp = fopen($_FILES['arquivo']['tmp_name'],"rb"))) { $anexo = fread($fp,filesize($_FILES['arquivo']['tmp_name'])); $anexo = base64_encode($anexo); fclose($fp); $anexo = chunk_split($anexo); } if ($anexo) { $mensagem = "–$boundnContent-type: text/htmlnContent-Transfer-Encoding: 7bitnn$corponn" . "–$boundnContent-type: $_FILES[arquivo][type]nContent-Disposition: attachment; filename=" . $_FILES['arquivo']['name'] . "nContent-Transfer-Encoding: base64nn$anexon" . "–$boundrn"; mail("cenartec.unn@gmail.com",$assunto,$mensagem,"From: $emailnMIME-Version: 1.0nContent-type: multipart/mixed; boundary="$bound""); print("Mensagem Enviada com Sucesso!"); //print($fp); } else { mail("cenartec.unn@gmail.com",$assunto,$corpo,"From: $emailnContent-type: text/html"); print("Mensagem Enviada com Sucesso – Sem Anexo"); } ?>
Obrigada