Eu trabalho com procmail
e Dovecot
, mas a estrutura maildir é bastante padronizada.
Se você estiver tentando arquivar por data, talvez queira verificar o Date
dos cabeçalhos. Lendo a partir do topo dos cabeçalhos a primeira data que você encontrar deve ser muito precisa. Minhas mensagens têm três campos que podem ser usados Delivery-Date:
, os cabeçalhos Received:
e o cabeçalho Date:
. Para mensagens recebidas, o cabeçalho Delivery-Date:
ou primeiro Received:
terá a data apropriada. Para mensagens enviadas, é provável que você tenha apenas o cabeçalho Date:
, que pode refletir a hora do sistema que o criou, não o servidor de e-mail. Você pode sinalizar mensagens que não tenham uma data utilizável nos cabeçalhos.
ctime
geralmente deve ser a data da mensagem, mas há casos em que uma nova cópia da mensagem é criada quando é movida ou copiada. Normalmente, essas ações ocorrem ao vincular o arquivo ao diretório correto.
EDIT: este script irá imprimir uma lista de mensagens com a primeira data no arquivo. Ele corresponde no formato de data do RFC. O regex pode não ser o melhor.
#!/usr/bin/perl
%months = ( 'Jan'=>'01', 'Feb'=>'02', 'Mar'=>'03', 'Apr'=>'04',
'May'=>'05', 'Jun'=>'06', 'Jul'=>'07', 'Aug'=>'08',
'Sep'=>'09', 'Oct'=>'10', 'Nov'=>'11', 'Dec'=>'12' );
foreach $filename (@ARGV) {
open( MESSAGE, $filename);
while (<MESSAGE>) {
if ( m/[A-Z][a-z][a-z], ([1230][0-9]) ([A-Z][a-z][a-z]) ([12][0-9][0-9][0-9])/ ) {
print "$3-$months{$2}-$1 $filename\n";
last
}
if ( m/^$/ ) { # End of header
print "-No--Date- $filename\n";
last
}
}
close MESSAGE;
}
# EOF