PHP

Em por

Bom pessoal, no tutorial de hoje como prometido, vou lhes ensinar como realizar o download do anexo contido no e-mail em seu servidor utilizando IMAP e PHP.

baixando anexo do email no servidor com imap e php

No tutorial passado (Ler email do servidor com IMAP) eu ensinei a vocês a realizar apenas uma leitura dos emails contidos no servidor correto! Hoje vamos um pouco mais além, que na verdade é onde o pessoal tem uma dificuldade em encontrar algo que realmente funcione na internet, eu, por exemplo, tive muita dificuldade em achar algo bom, então vamos lá.

Baixando Anexo com IMAP

Bom, para começarmos o nosso processo, temos que fazer a conexão com nosso servidor de e-mail para podermos ler as mensagens contidas no mesmo. Para isso vamos criar nossas variáveis com os valores dos parâmetros de conexão.

 /* Ler um e-mail e salvar o anexo */ //Conecta-se ao MailServer $host = "imap.dominio-it.inf.br"; $usuario = "exemplo@dominio.com.br"; $senha = "sua_senha"; $mbox = imap_open("{".$host.":143/novalidate-cert}INBOX", $usuario, $senha)or die("can't connect: " . imap_last_error());

Muito bem, feito nossa conexão temos que colocar tudo dentro de um laço para podermos percorrer toda nossa caixa de entrada.

Para isso usamos a função imap_num_msg que nos retornará o total de mensagens e o limite para que nosso laço percorra todos os e-mails que serão lidos.

 //Lê todas as mensagens for($m = 1; $m <= imap_num_msg($mbox); $m++){ //suas intrucoes }

Agora vamos a cereja do bolo, rsrs...

Para capturarmos o anexo, precisamos utilizar uma função nativa do IMAP chamada imap_fetchbody, na qual ela nos retorna todo o conteúdo do e-mail, mas há um porém, o resultado que ele nos fornece vem criptografado, ou seja, um monte de códigos incompreensíveis para nossa leitura, então eis que entra uma outra função juntamente que é imap_base64, ela transformara todo aquele código bagunçado no arquivo original, ou seja, ele vai descriptografar o e-mail para nosso download.

Então nossa linha de código nesse trecho ficará assim:

 for($m = 1; $m <= imap_num_msg($mbox); $m++){ //pegando o anexo e descriptografando $dados = imap_base64(imap_fetchbody($mbox, $m,2)); }

Nessa nossa variável $dados nós já temos nosso anexo, ai você me pergunta...(garanto que leu com a voz do Rezende rsrsrs)... então como faço para gravar essas informações?

A resposta é o seguinte, lembra-se de como criar arquivos com PHP, isso mesmo aquela função que você acha que nunca vai usar, pois é, vamos utiliza-la agora.

 //determine o nome do arquivo $nomeAnexo = “meuArquivo.extensao”; //determine o caminho onde será gravado o anexo $caminho = anexos/'; //Cria um arquivo com o nome do anexo $arq = fopen($caminho.$nomeAnexo,"w"); //Grava o conteúdo do anexo no novo arquivo. fwrite($arq, $dados); //Fecha o novo arquivo fclose($arq);

Prontinho nosso arquivo já foi criado, vamos à explicação.

Primeiramente você determina o nome do arquivo, isso você pode coloca-lo fixo, ou gravar ele como próprio nome que vem no e-mail, para isso tem que fazer o seguinte:

 //pegamos a estrutura do email $estrutura = imap_fetchstructure($mbox, $m); //pego o nome do anexo e se quiser o tipo de arquivo do anexo $nomeAnexo = $estrutura->parts[$j]->dparameters[0]->value; $extensao = strtolower(pathinfo($nomeAnexo, PATHINFO_EXTENSION));

Feito isso, você criará o arquivo exatamente com o mesmo nome que ele foi enviado no e-mail. Após escolher o nome etc..., você precisa escolher onde quer grava-lo, ou seja, o diretório para onde ele será mandado, isso fica a seu critério.

Depois vamos abrir um arquivo com a função fopen no modo w, passando o caminho e o nome do arquivo com sua extensão tudo junto.

Feito isso, vamos escrever dentro desse arquivo utilizando a função fwrite, passando qual arquivo queremos gravar, que no caso foi o que acabamos de criar, e o nosso conteúdo a ser escrito é exatamente aquela nossa variável $dados que recebeu o anexo descriptografado lembra?

Após esse procedimento, fechamos nosso arquivo depois de escrito e está pronto, você já pode ir ao diretório que determinou que seu anexo estara lá.

Realizado a leitura e o download do anexo marcamos a mensagem como lida e fechamos nossa conexão com e-mail.

 //marca a mensagem como lida imap_setflag_full($mbox, $uid, "\\Seen", ST_UID); //Fecha a conexão com o MailServer imap_close($mbox);

Prontinho, nesse exemplo básico ensinado hoje, mostrei com realizar o download de qualquer arquivo anexado no e-mail, porém você pode restringir a qual arquivo você deseja fazer o download, por exemplo, somente arquivos com extensão XML ou JPG, isso dependerá da necessidade de seu sistema.

Duvidas criticas ou sugestões comentem abaixo que teremos o prazer em tentar ajuda-los. laugh

Veja Também:

Artigos Relacionados a categoria: PHP

Olá, deixe seu comentário para Baixando anexo do email no servidor com IMAP e PHP

Já temos 1 comentário(s). DEIXE O SEU :)
Vinicius Alves de Morais

Vinicius Alves de Morais

Olá, boa noite!

Gostei do post, implementei funcionou perfeitamente, porem tenho uma duvida, como faço para fazer o download quando tenho mais de 1 anexo, os nome dos arquivos consegui, porem ao tentar baixar, acaba que baixando o mesmo arquivo, com nomes diferentes

Obrigado desde já!
★★★★★ DIA 26.03.17 23h27 RESPONDER
N/A
Enviando Comentário Fechar :/
Enviando Comentário Fechar :/

...AINDA NÃO VIU NOSSO PORTFÓLIO?

Se ainda não viu nosso Portfólio e quer conhecer um pouco mais... aproveite e veja agora mesmo e tenha um site de qualidade para o seu negócio!

[contato]
Ver o Portfólio Agora