Como posso imprimir um resumo do conteúdo do Maildir ao efetuar login em um shell?

1

Eu sei que isso é teoricamente possível, mas estou tentando evitar reinventar a roda.

Estou usando o Ubuntu Linux, com o formato de caixa de correio do Maildir. Eu quero colocar algo no meu .login que irá analisar o conteúdo do ~ / Maildir e exibir um resumo das minhas mensagens de e-mail não lidas.

Estou executando o Ubuntu 13.04 (Raring Ringtail) e uso o mutt para meu cliente de e-mail, e estou usando o Postfix e o dovecot para SMTP e MDA / IMAP.

Existe algo já escrito que fará isso? Ou precisarei escrever algo usando Perl e Mail :: Box :: Maildir? Parece que isso seria algo comum, mas, para minha vida, não consigo encontrar um pacote ou utilitário que faça o que estou procurando.

    
por m0j0 18.07.2013 / 19:59

2 respostas

1

Eu encontrei uma maneira mais curta e simples de implementar com o Python.

Exemplo de código abaixo.

#!/usr/bin/python

import mailbox
import email.utils
import os

mbox = mailbox.Maildir(os.environ['HOME'] + "/Maildir" )
mbox.lock()
spam = mbox.get_folder('INBOX.junk')
print "INBOX:"
for message in mbox:
    print "- [%s] %s:  \"%s\"" % ( message['date'], message['from'], message['subject'] )
print
print "SPAM messages:"
for message in spam:
    print "- [%s] %s:  \"%s\"" % ( message['date'], message['from'], message['subject'] )

mbox.close()
    
por 24.07.2013 / 21:43
0

Veja o que eu criei ... um script Perl feito em casa usando o módulo CPAN Mail :: Box :: Maildir.

#!/usr/bin/perl
use strict;
use Mail::Box::Maildir;

my $folder = new Mail::Box::Maildir folder=>"$ENV{HOME}/Maildir";

my $message;
my $messsages;
my $to;
my $from;
my $date;
my $subject;

print "********************************************************************************\n";
foreach $message( $folder->messages('ALL') ) {
    #print $message->{'MM_head'}, "\n";
    parse_header( $message->{'MM_head'} );
    print "   Date:  $date\n";
    print "   From:  $from\n";
    print "     To:  $to\n";
    print "Subject:  $subject\n";
    print "********************************************************************************\n";
}

exit 0;

sub parse_header {
    my @lines = split( /\n/, shift(@_) );
    undef $to;
    undef $from;
    undef $date;
    undef $subject;

    foreach ( @lines ) {
        if ( /^To:\s+?(.*)$/ ) {
            $to = $1;
        }
        elsif ( /^From:\s+?(.*)$/ ) {
            $from = $1;
        }
        elsif ( /^Date:\s+?(.*)$/ ) {
            $date = $1;
        }
        elsif ( /^Subject:\s+?(.*)$/ ) {
            $subject = $1;
        }
    }
}
    
por 19.07.2013 / 03:03