シェルにログインするときにMaildirの内容の概要をどのように印刷しますか?

シェルにログインするときにMaildirの内容の概要をどのように印刷しますか?

私はこれが理論的に可能であることを知っていますが、車輪を再発明しないようにしています。

私はUbuntu Linuxを使用しており、Maildirメールボックス形式を使用しています。 〜/Maildirの内容を解析し、未読の電子メールの概要を表示する内容を.loginに追加したいと思います。

私はUbuntu 13.04(Raring Ringtail)を実行しており、電子メールクライアントとしてmuttを使用し、SMTPとMDA / IMAPにPostfixとdovecotを使用しています。

これができることが書かれていますか?それとも、PerlとMail::Box::Maildirを使って自分で書く必要がありますか?これは一般的なように見えますが、生涯にわたって私が探している機能を実行するパッケージやユーティリティを見つけることができません。

答え1

Pythonでより短くて簡単な方法を見つけました。

以下のサンプルコード。

#!/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()

答え2

Mail::Box::Maildir CPAN モジュールを使用して作成した Perl スクリプトは次のとおりです。

#!/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;
        }
    }
}

関連情報