Metadados para troca de arquivos de caixa de correio BSD

2

O formato de caixa de correio do BSD, de acordo com Jamie Zawinski, nunca foi formalmente documentado (veja seu tamanho anti-conteúdo rant ), e não tem, tanto quanto eu sei, quaisquer identificadores formais que possam ser usados como metadados para identificar um arquivo para aplicativos como sendo uma caixa de correio BSD, exceto pelo fato de ter a mágica de 4 bytes número 0x46726f6d. Gostaria de saber se existem convenções para identificar esses arquivos de caixa de correio.

Até agora eu encontrei:

  1. a extensão de arquivo .mbox usada em alguns sites, suportada com scripts locais, mas como não a vi usada em nenhum aplicativo amplamente usado, acho que isso não conta como uma convenção - em contraste, RFC * 822 mensagens geralmente recebem a extensão .eml, que é amplamente suportada, inclusive pela Microsoft e pela Apple; e
  2. não há um tipo MIME para isso: não está na lista de tipos de IANA , embora possa haver tipos estendidos informais para ele.

Postscript

Note que estou pedindo uma maneira de comunicar que um arquivo é um arquivo de caixa de correio do BSD, não um reconhecedor para eles. E note também que um reconhecedor para arquivos de caixa de correio BSD que não tenha certeza de rejeitar arquivos de caixa de correio que usam a codificação Content-Length é uma coisa perigosa, pelas razões que Jamie fornece no link acima: o mesmo arquivo pode representar seqüências completamente diferentes de email mensagens sob os dois esquemas.

    
por Charles Stewart 04.03.2014 / 11:37

1 resposta

0

Eu usaria heurística difusa para determinar se um arquivo é mbox. Por exemplo, aqui está um script AWK:

ls -F | awk '{
    if($0 !~ /\//){
        getline first < $0; 
        if(first ~ /^From .*@/){
            print $0 " is a mbox file"
        }
    }
}'

Como getline mata um script AWK, caso haja um problema ao abrir um arquivo, usamos o argumento -F para ls para adicionar um / no final dos diretórios. A verificação $0 !~ /\// certifica-se de não abrir nenhum nome com uma barra nela. Em seguida, lemos a primeira linha do arquivo, colocando-a na variável first .

Agora, estamos prontos para fazer uma verificação heurística difusa para um arquivo mbox. Se a primeira linha de um arquivo começar com "De" e depois tiver um @ em algum lugar na primeira linha, informaremos que o arquivo é um arquivo mbox BSD.

E, sim, maildirs são uma ideia melhor (contanto que você tenha inodes suficientes para armazenar um monte de arquivos pequenos) porque eles são mais confiáveis do que os arquivos mbox do BSD, e porque não precisamos fazer essa solução feia muito difamado em "The UNIX Haters Handbook" da necessidade de adicionar um '>' antes de uma linha que começa "De".

    
por 05.03.2014 / 00:49