나는 이것이 이론적으로 가능하다는 것을 알고 있지만 바퀴를 재발명하지 않으려고 노력하고 있습니다.
저는 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;
}
}
}