私はこれが理論的に可能であることを知っていますが、車輪を再発明しないようにしています。
私は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;
}
}
}