![登录 shell 时如何打印 Maildir 内容的摘要?](https://linux22.com/image/49033/%E7%99%BB%E5%BD%95%20shell%20%E6%97%B6%E5%A6%82%E4%BD%95%E6%89%93%E5%8D%B0%20Maildir%20%E5%86%85%E5%AE%B9%E7%9A%84%E6%91%98%E8%A6%81%EF%BC%9F.png)
我知道这在理论上是可能的,但我试图避免重新发明轮子。
我使用的是 Ubuntu Linux,采用 Maildir 邮箱格式。我想在 .login 中添加一些内容来解析 ~/Maildir 内容并显示我未读电子邮件的摘要。
我运行的是 Ubuntu 13.04 (Raring Ringtail),我使用 mutt 作为我的电子邮件客户端,我使用 Postfix 和 dovecot 来处理 SMTP 和 MDA/IMAP。
是否已经写了一些可以做到这一点的东西?或者我需要使用 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;
}
}
}