쉘에 로그인할 때 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;
        }
    }
}

관련 정보