RFC822

1. RFC822

Pierre
mister_pi

(usa Outra)

Enviado em 15/10/2012 - 17:12h

Olá pessoal!

Preciso enfiar um porrilhão de arquivos de e-mail no banco para viabilizar pesquisas.
Hoje eu estou fazendo +/- assim:
for i in /home/user/Maildir/new/*
do
nomearq=$(echo $i )
from=$( sed -n '/^From: /{p;q}' $nomearq | sed "s/'//g" | cut -c7-)
to=$(sed -n '/^To: /{p;q}' $nomearq | sed "s/'//g" | cut -c5-)
date=$(sed -n '/^Date: /{p;q}' $nomearq | sed "s/'//g" | cut -c11-)
menssagem1=$(sed '1,/^$/d' $nomearq | cut -b-700)
menssagem=$(echo $menssagem1 | tr -d '`' | tr -d '*'| tr -d "'"|cut -b-127185)
subject=$(sed -n '/^Subject: /{p;q}' $nomearq | sed "s/'//g" | cut -c9-)
nome=$(echo $i | cut -c27-)
mysql -uinfoemail -p***** -e "INSERT INTO d1(nomearq,frommail,subject,rcpto,date,menssagem) VALUES('$nome','$from','$subject','$to','$date','$menssagem');" infoemail
mv $i /email/messages/$nome
done

Até funciona, mas deve ter algum jeito mais inteligente de fazer isso.
Os arquivos em /home/user/Maildir/new/ são do tipo "smtp mail text" e sua construção segue a RFC822.
Alguém conhece alguma função que identifique os campos neste tipo de arquivo e que possa ser usada para fazer o INSERT?

TKS!

mister_pi


  


2. Re: RFC822

cr0n
_di0

(usa FreeBSD)

Enviado em 15/10/2012 - 18:00h

Isso está mais feio do que bater na mãe, e pra ajudar, há uma variável chamada "$menssagem1".

Mas há uma forma simples de se fazer isso. Eu usaria um script em PHP ou Perl, ambos dispõe de motores poderosos para se trabalhar com regex, há abundantes documentações em ambas linguagens de regras regex já prontas(viva o google), que casam campos de email, como subject, data, from, etc. Depois de ter extraídos esses dados no código, você pode por exemplo usar a função gmdate() do PHP para formatar a data/hora para RFC-822, e logo após inserir de forma mais elegante esses dados no BD.

PS: O seu servidor de email não tem uma opção/recurso já pronto para guardar tais dados, já formatados do jeito que deseja no BD, ao invés de um arquivo?


3. Re: RFC822

Pierre
mister_pi

(usa Outra)

Enviado em 15/10/2012 - 22:16h

rsrsrsrsrs

bater na mãe foi forte.... hehehehe

Mas a verdade é que eu sei que tá feio mesmo.
O código não é meu, e script não é muito a minha praia, mas...

Eu acho que ouvi em algum lugar sobre uma função do tipo LOAD DATA LOCAL INFILE, mas que trata diretamente arquivos de email.

O servidor de e-mail é um Postfix, mas o volume é muito grande para fazer search direto com a ferramenta. São 40Gb por dia de massa de dados, e preciso armazenar e fazer busca retroativa de 100 dias. Além disso a busca precisa ocorrer em qualquer campo do header, no corpo e nos anexos do email.

Não tá fácil...

Mas vou atrás das suas dicas com php e perl.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts