[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Baixar anexo de e-mail
From: |
Cristiano |
Subject: |
Re: Baixar anexo de e-mail |
Date: |
Wed, 22 Sep 2010 20:41:04 -0000 |
User-agent: |
eGroups-EW/0.82 |
--- Em address@hidden, "osvaldo.luiz" <osvaldo.luiz.2005@...> escreveu
>
> Bom dia Senhores,
>
> Preciso da ajuda de voces,
>
> Tenho uma conta de e-mail especifica para receber NF-e. Preciso de um script
> que baixe esses XMLs e salve-os em uma determinada pasta, caso esses arquivos
> venham compactados, gostaria que fossem descompactados e depois salvos dentro
> desse diretorio.
>
> Alguem tem algo parecido ou poderia orientar-me em como fazer?
>
> Obrigado.
>
Osvaldo, boa tarde.
Dias atrás implementei uma solução idêntica a esta que você procura.
Tenho um script pronto mas não seria nada didático fornecer-lhe, pois lhe
privaria da oportunidade de pesquisa e aprendizado, nem mesmo justo comigo, que
ralei alguns dias para chegar à solução.
Mas vou lhe dar o roteiro da solução e repassar algumas dicas que recebi aqui
menos na lista (dai de graça o que recebeu de graça).
Não sou profundo conhecedor de servidores de e-mail, portanto, posso falar algo
que não seja regra ou não se aplique a todos. Se fizer isso, releve, por favor.
O fato é que o servidor de e-mail, pelo menos o meu (courrier), armazena as
mensagens recebida em arquivos em plain-text, com os anexos como parte deste
texto, codificado em algum padrão (base64, xml, etc).
No meu caso, cada usuário tem um diretório no sistema de arquivo que é a raiz
do e-mail, dentro onde há subdiretórios para as pastas de mensagens (novas -
new, lidas - cur, enviadas - sent, etc). Sabendo que o comportamento padrão do
servidor é gravar os arquivos das mensagens que chegam dentro do diretório
'new' e transferi-las para a pasta 'cur' após serem baixadas (pop3) ou
acessadas (imap) pelo client, eu fiz o seguinte:
1) usei o programa incron
(http://inotify.aiken.cz/?section=incron&page=about&lang=en) para monitorar o
filesystem e detectar novos arquivos criados no diretóro
/home/usuario/maildir/new (o path pode ser diferente no seu caso) e disparar um
shell script que recebe o nome do arquivo como parâmetro e que tem a finalidade
de extrair os anexo.
O incron é uma espécie de crontab que dispara com base em eventos do filesystem
(arquivos criados, arquivos movidos, arquivos acessados, arquivos apagados,
arquivos alterados, etc.). Se você usa debian, ele está nos repositórios
oficiais.
2) O script, com eu disse, recebe como parâmetro o nome do arquivo que acabou
de chegar. Basicamente o que ele faz é usar comando munpack
(http://linux.die.net/man/1/munpack) para extrair e salvar o(s) anexo(s) que
chegam atachados à mensagem.
3) O resto, é perfumaria:
- separar os arquivos XML de outros tipos que eventualmente cheguem (PDF do
DANFE, ou outros tipo que não deveriam está alí - SPAM)
- extrair de dentro do XML os dados do como remetente e destinatário (possuímos
mais de uma empresa e recebemos o XML de ambas no mesmo endereço), fazendo a
triagem do arquivo.
Há também outra opções. Por exemplo, se não tiver acesso ao servidor, pode
configurar uma máquina qualquer para puxar as mensagens via pop3 através do
getmail, repassando-as para o maildrop que se encarrega da entrega local.
Dentro do maildrop tem um comando chamdado xfilter que repassa, via stdin o
conteúdo da mensagem a um script, que pode ser um shell, um python, um php, um
perl, etc. Aí, dá para usar o munpack do mesmo modo para extrair os anexos.
Dá uma estudada nestas opções e tenta escrever algum código. Se tiver
dificuldades, posta denovo para a gente tentar ajudar.