Enviar email com Anexo em PHP

Danilo Iannone 22/11/2011 18

Segue um tutorial simples e funcional para enviar email com anexo em PHP utilizando a função mail()

Página: index.html

obs: NUNCA se esqueçam de colocar o enctype=”multipart/form-data” e o método de envio precisa ser POST.

Página: enviar_email.php

18 Comments »

  1. Yuhara 23/03/2012 at 13:54 - Reply

    Olá, eu tentei usar o codigo mais não funcionou, o script não anexou o documento. será q vc poderia me ajudar ?

    • Danilo Iannone 26/03/2012 at 10:19 - Reply

      Retornou algum erro ou somente não anexou o arquivo?

  2. Richard 03/05/2012 at 15:05 - Reply

    OLá Amigo, o anexo vem com 0k é o mesmo erro do amigo Yuhara, o que pode ser? ele chega certinho mais com 0K

    • Danilo Iannone 24/05/2012 at 22:49 - Reply

      Estranho, vou dar uma revisado em todo o script para ver o que pode ser…

  3. felipe 16/05/2012 at 21:50 - Reply

    sou novato emphp, usei o script e retornou este erro:Parse error: syntax error, unexpected T_VARIABLE in /home/allcarvi/public_html/email.php on line 198.

    poderia me ajudar?

    agradeço

    • Danilo Iannone 24/05/2012 at 22:49 - Reply

      Felipe, para poder lhe ajudar precisaria ver a página inteira… se puder me envie por email!

  4. Claudio 04/07/2012 at 18:50 - Reply

    Caros,

    estou tentando enviar email com a funcao abaixo porém nao funciona poderia verificar se existe algum erro…

    while ( $lista = mysql_fetch_assoc( $q_ListaForn ) ){

    $envia = mail( $lista['email'],”Solicitação de Cotação”, $v_mensagem, $v_cabec );
    mysql_query(“INSERT INTO cotacao(
    cot_codusuario,
    cot_codfornecedor,
    cot_datsolicitacao,
    cot_descricao)
    VALUES(
    ‘$v_codusuario’,
    ‘$lista[id_usuario]‘,
    ‘$v_datacotacao’,
    ‘$v_mensagem’)”);

    }

    $envia = mail($v_emailusuario,”Cópia de sua cotação enviada!”,$v_mensagem, $v_cabec);

    obrigado pela ajuda

    • Danilo Iannone 05/07/2012 at 11:42 - Reply

      Bom, se você quer enviar um Anexo está com o código errado…
      Agora, se for só para enviar um mail() simples, a sintaxe está correta… precisa checar com o seu host se está habilitado

  5. Anderson Coimbra 16/07/2012 at 17:00 - Reply

    Olá…Estou conseguindo anexar o arquivo, porém o resto da mensagem não aparece no email, tipo: nome, mensagem…

    O que pode ser?

  6. Samuel 30/08/2012 at 17:37 - Reply

    Cara, eu estou tentando usar o seu código, mas estou encontrando uma dificuldade, o arquivo anexado sempre chega vazio, sabe o motivo disso estar ocorrendo?

    • Danilo Iannone 11/09/2012 at 10:28 - Reply

      Pode ser algum erro de variável que você está passando, já checou isso?

  7. Andre Larangeira 11/09/2012 at 09:34 - Reply

    Muito bom script, funcionou perfeitamente.
    Parabens!!!

  8. Wesley 17/09/2012 at 18:35 - Reply

    Danilo,
    É possível enviar mais de um anexo no mesmo e-mail?
    Valeu!

    • Danilo Iannone 19/09/2012 at 08:17 - Reply

      É possível sim, você terá que duplicar o código e alterar as variáveis

  9. Daniel Cordeiro 22/10/2012 at 08:01 - Reply

    ola, copiei e colei no dreamwever e logo de cara ele informa um erro nas linhas 17, 27 e 29…

  10. Bruno Padilha 26/10/2012 at 19:27 - Reply

    Copiei e colei o código, logo, surgiram vários erros de concatenação. Consertei, e resolvi postar : http://pastebin.com/625DxsKE ! E obrigado pelo código!

  11. Marcelo Jannotti N, R. 03/05/2013 at 19:09 - Reply

    Segue correção para quem está tendo dificuldades para implementar o código dessa publicação.

    Erros encontrados:
    - O boundary para serparação dos arquivos deve começar com — seguido do boundary informado.
    - O arquivo anexo deve estar junto do cabeçalho e não junto da mensagem.
    - No php quando inicia um string com “, ao querer imprimir o caracter “, deve-se colocar \”.
    - É de extrema importância, por questões de compatibilidade, finalizar uma linha com \r\n.

    Danilo Iannone, meus parabéns pelo script. É de grande valia para todos.

    ——————————————
    $nome = $_POST['nome'];
    $arquivo = $_FILES["arquivo"];

    // Para quem vai ser enviado o email
    $para = “[E-MAIL DESTINATÁRIO]“;

    // Assunto do email
    $assunto = “[ASSUNTO DO EMAIL]“;

    $boundary = “XYZ-”.date(“dmYis”).”-ZYX”;
    $fp = fopen($arquivo["tmp_name"], “rb”); // abre o arquivo enviado
    $anexo = fread($fp, filesize($arquivo["tmp_name"])); // calcula o tamanho
    $anexo = base64_encode($anexo); // codifica o anexo em base 64
    fclose($fp); // fecha o arquivo

    // cabeçalho do email
    $headers = “MIME-Version: 1.0\r\n”;
    $headers .= “Content-Type: multipart/mixed; “;
    $headers .= “boundary=\”$boundary\”\r\n”;
    $headers .= “–$boundary\r\n”;

    // email
    $mensagem .= “Content-Type: text/html; charset=’utf-8′\r\n”;
    $mensagem .= “Nome: $nome \r\n”;
    $mensagem .= “–$boundary \r\n”;

    // anexo
    $file = “Content-Type: “.$arquivo["type"].”; name=\”".$arquivo['name'].”\” \r\n”;
    $file .= “Content-Transfer-Encoding: base64 \r\n”;
    // NA LINHA ABAIXO É IMPORTANTE COLOCAR DUAS VEZES \r\n
    $file .= “Content-Disposition: attachment; filename=\”".$arquivo['name'].”\” \r\n\r\n”;
    $file .= “$anexo \r\n”;
    $file .= “–$boundary \r\n”;

    // enviar o email
    mail($para, $assunto, $mensagem, $headers.$file);

Deixe um comentário »