Enviando E-mail com Anexo utilizando PHP (2 métodos)


Novo blog em breve...fique por dentro ->

E aiiii pessoal blz….o motivo desse post é que precisei de um script em PHP para enviar e-mail com anexo. Eu tinha esse script, mas acontece que eu perdi e não sei aonde eu coloquei, então resolvi fazer um do zero usando dois métodos de envio e explicando cada linha, com isso resolvi postar no Blog para que não precise ficar cassando igual louco no Tio Google como fazer esse processo quando precisar. Esse post exige um pouco de conhecimento em HTML e PHP básico. Vamos lá >>

Primeiramente você tem que criar um formulário em HTML para entrar com os dados que serão enviados.

Formulário HTML (Imagem)

Visualize o script e copie >> aqui

Nesse formulário foi criado um campo chamado Método de Envio que é justamente onde você escolhe o método que será executado. São dois métodos: um usando a função mail() do PHP e o outro usando a Clasee PHPMailer que nada mais é de que um sistema já pronto para possibilitar e facilitar esse envio. O objetivo de está mostrando esses dois métodos é que a casos que vai precisar mais de um do que do outro apesar de que os dois tem o mesmo propósito. Lembrando que os dois métodos funciona perfeitamente.

OBS: Antes de começar a explicar resumidamente as funções é extremamente importante saber que esses scripts só irão rodar caso você já tenha algum site já hospedado para enviar esses arquivos e poder testá-los. Se você montar os scripts e tentar rodar em servidor web local vai dar erro na função mail() e ou erro na Classe PHPMailer porque a função e a Classe só rodam com acesso a internet.

Função mail() usando anexo

A melhor forma que achei pra enviar um anexo pela função mail() do php foi ter que pegar o arquivo e salvá-lo dentro de uma pasta no servidor usando a função de upload move_uploaded_file() e após isso pegar o caminho gerado por esse upload e enviar por e-mail gerando um link na mensagem deste e-mail.

Visualise o script e copie >> aqui

Explicando brevemente esse script até porque o código está bem comentado e de fácil entendimento.

  • No início foi feito uma verificação para ver se existe o arquivo ou se o campo anexo do formulário não está em branco, caso seja verdadeiro ele manda uma mensagem de arquivo inexistente.
  • Caso contrário é cetado uma variável que pega o nome  desse arquivo e passa pela função de tratamento(Visualise a função e copie >> aqui). Essa função retira caracteres especiais, letras maiúsculas e espaços para que o nome do arquivo fique lincável na URL, se caso não tratasse o nome do arquivo poderia correr o risco da pesso que recebeu o anexo não conseguir fazer o download.
  • No próximo bloco de scripts é feito uma varredura na pasta que está no servidor web procurando se já existe um arquivo com aquele nome caso existe o nome do arquivo é renomeado colocando um número na frente.
  • Após é verificado se função de upload foi executado com sucesso, ou seja, verifica se o arquivo foi copiado do computador para a pasta no servidor.
  • Após copiado o arquivo declara-se variáveis para pegar o conteúdo dos campos do formulário.
  • Configura-se o cabeçalho do e-mail. (E extremamente importante esse cabeçalho a explicação detalhada está no comentário do script).
  • Usa-se uma variável para pegar o conteúdo da mensagem.
  • E por fim usa-se a função mail().

 OBS: Criem uma pasta chamada “anexo” dentro do diretório onde vai ficar o arquivo.

Usando a Classe PHPMailer

Para usar essa classe é necessário que faça o download dela >> aqui

Feito o download descompacte-a e coloque a pasta junto com seu arquivo php do formulário. Após isso escreva o script que pode ser visualizado e copiado >> aqui.

Explicação prévia do script

  • A primeira coisa a ser feita é instanciar a classe chamando-a.
  • Declara-se variáveis para pegar o conteúdo dos campos do formulário.
  • Por fim chama as funções da classe para o cabeçalho e anexo do e-mail para o envio.

Podemos observar que é bem mais simples utilizar a classe PHPMailer do que a função mail() para o envio de e-mail, mas quis colocar os dois métodos porque pode ser que existem casos para utilizar um ou o outro, ai você pode escolher. O propósito é abrir a mente pra usar da criatividade para a junção dos dois métodos em um sistema qualquer. E também no script da função mail() tem algumas funções que podem ser utilizados em outros sistemas que você venha a desenvolver como a função de upload que pode ser aplicada em várias outras coisas.

OBS: O Sistema foi testado para contas do Hotmail, Gmail e Yahoo só encontrei um problema no Hotmail e no Yahoo. Os emails são enviados corretamente mas acontece que eles vão para caixa de Lixo. Esse problema não conseguir resolver se alguém que tenha lido esse post souber resolver esse problema vou ficar muito grato se entrar em contato e me informar como resolver. Para o Gmail funcionou perfeitamente.

Baixe os arquivos >> Download – O script está bem comentado

Só lembrando, após baixar os arquivos para que possa testá-lo, envie esses arquivos para uma pasta em algum servidor de hospedagem PHP.

Tecnologias Web, UX e Design

    • Web
    • 18 de maio de 2012

    manda pro email contato@webgrafbrasil.com.br este script

    • Web
    • 12 de março de 2013

    Não consigo fazer download, pode enviar para ctsclick@hotmail.com por favor?

    • Alexander Antunes
    • 12 de agosto de 2013

    tbm nao consigo fazer o dow.. pode encaminhar para alexanderfuty@hotmail.com

    • Mauricio de Souza
    • 15 de outubro de 2013

    também não estou conseguindo fazer download poderia disponiblizar?
    mauricio.souza.f@hotmail.com

    • Kowalski
    • 22 de outubro de 2013

    Caso possa mandar por email agradeço – maiconkowalski@live.com

  1. tb não consegui baixar, favor enviar para: almirguedes@hotmail.com

  2. Olá, por favor poderia encaminhar os anexo por e-mail, pois o download não vai. romeu_sn@hotmail.com

  3. Olá pessoal o link dos arquivos já foram atualizados ok >> https://www.dropbox.com/s/1f95ow0cohzgc9c/envia_email_anexo.zip?dl=0

  4. Cara, não costumo comentar posts, mas este aqui não pude deixar de parabenizar, acabou com minha dor de cabeça de dois dias…. Abraços

    • Só uma pergunta, no caso o meu input file é multiple, mas na hora de anexar dois arquivos, ele só envia o último. Como faço para enviar mais de um arquivo? Estou usando o phpmailer…

      • Tenta assim e vê se da certo:

        Declaração dos inputs

        input type=”file” name=”arquivo[]”
        input type=”file” name=”arquivo[]”

        No PHP

        $arquivo = $_FILES['arquivo'];

        foreach( $arquivo as $item ) {
        $mail->AddAttachment( $item['tmp_name'], $item['name'] );
        }

  1. No trackbacks yet.

Deixar mensagem para Eduardo Cancelar resposta