Mutt & Friends

Mutt & Friends

Table of Contents:

What Is Mutt
Mutt + Gmail
Fetchmail
Maildrop
Msmtp
Mutt
关于 SSL 和 TLS

What Is Mutt

Mutt 是一个邮件管理器。与 Windows 下的 Outlook, The Bat! 和 Linux 下的 Kmail, Thunderbird 等不同,Mutt 只负责管理本地的邮件。而对于我们这些使 用 Internet 上的免费邮箱的正常人类来说,我们还需要从 POP 收取邮件,从 SMTP 发送邮件(或者 IMAP 一个人全包了)。这些功能都是 Mutt 没有的,我们 需要其它的程序来完成这些工作,比如 fetchmail, msmtp 什么的。

Mutt + Gmail

Mutt 本身带了 pop3 访问功能,最新的 1.5.16 版还带了 smtp,但是这里我使 用 fetchmail 通过 pop3 收取邮件,使用 msmtp 发送,原因是

  1. 这些程序更加强大,工作地更好,更稳定
  2. 这符合 UNIX 的精神

我还使用了 maildrop 来过滤和分拣邮件。

附赠截图一张 。

Fetchmail

Fetchmail 的作者就是大名鼎鼎的 Eric Raymond。这个人对开源世界的贡献真 是不容小觑,也许你不知道 fetchmail,那你总该知道 The Art of UNIX Programming 这本书吧?好吧,就算你不知道这本书,那《大教堂与市集》这篇 经典文章你总该听说过吧?就算你连这篇文章也没听说过,那“教堂”和“市集” 这两个东西你总是知道的吧?...

如果你属于最后那种只知道两个单词的,那可以把 fetchmail 理解成一个像神一 样强大的从 pop3 服务器上收取邮件的程序;如果你属于前面那几种,就去看看 那些文章和书,然后就会比较清楚的知道 fetchmail 能干什么,因为那两个东西 都包含 fetchmail 的广告 + 功能简介...

废话完毕,看配置:

defaults
set daemon 300
set logfile "/home/corsair/fetchmaillog"
set postmaster "Corsair"
poll pop.gmail.com with proto POP3
    user 'chris.corsair@gmail.com'
    with ssl with password "noneofyourbusiness"
    is 'Corsair' here
    options keep ssl
    sslfingerprint '59:51:61:89:CD:DD:B2:35:94:BB:44:97:A0:39:D5:B4'
    sslcertck sslcertpath /etc/ssl/certs

mda "/usr/bin/maildrop -V 2"

第一行的 defaults 表示以下的设置为默认的帐户设置,第二行 set daemon 让 fetchmail 运行为一个守护进程,每隔 300 秒到 pop3 服务器上检查一次邮件,如果不设这个的话就是运行一次检查一次。这些都 没什么,从 poll 那行开始,配置文件就比较诡异了。Raymond 没有使用常用的 变量名和值的方式来获得 pop3 的配置,而是用了各种关键和不关键的词让这一 段比较像自然语言(至少 Raymond 本人是这样认为的,我保留意见...)。比如 那个 poll 就是一个关键词,指定一个 pop3 服务器,而 is 'Corsair' here 的那个 here 就不是关键词,而是一个可有可无的 dummy word,它之是为了让这句话更像自然语言。既然像自然语言,我就不讲了, 大家自己看吧,里面关于 ssl 的问题在后面有一节专门叙述。

最后一行有个 mda 的设置,我设成了 maildrop,这样 fetchmail 在收到邮件 以后会直接传给 maildrop 过滤。

Maildrop

Maildrop 是一个过滤和分拣程序,使用类似 c 的语法来配置。

logfile "$HOME/maildroplog"

REG_CASE = no

# # What we can find in the header
if     (  (/^X-Advertisement:.*/)         \
       || (/^X-Mailer:.*(Advanced Mass)/)     \
       || (/^X-Spam-Status: YES /)                \
       || (/^Message-ID:*<>/:h))
{
    exception {
        to $HOME/Mail/.Trash/
    }
}
# --------------- end of spams --------------->

# ---------- Bookmarks ---------->
if ((/^From:.*chris\.corsair\@gmail\.com.*/) \
   && (/^Subject: \[bm\] .*/))
{
    to "$HOME/Mail/bookmark"
}

# --------------- Mailing Lists --------------->
if (/^List-Unsubscribe/)
{
    to "$HOME/Mail/lists"
}

to "$HOME/Mail/mbox"

Msmtp

这个基本没什么好说的,比前面两个简单多了。关于 tls 的问题在后面和 ssl 一起叙述。

account default
host smtp.gmail.com
from chris.corsair@gmail.com
port 587
auth on
user chris.corsair@gmail.com
password nonofyourbusiness
tls on
# use the trust file that included in curl program
tls_trust_file /usr/share/curl/curl-ca-bundle.crt
# use this for debugging output
logfile ~/msmtplog

Mutt

终于轮到这个大头了,嘎嘎 。关于 mutt 这个东西,除了配置以外我想说的就 是,这个东西相对其它的邮件管理程序来说很强大,非常强大,极其强大... 下 面解说配置,基本的那些就不说了,可以参考王垠的。

alternates "chris.corsair@gmail.com"

对于我们这些用 Gmail 的人来说, alternates 是很重要的,因为一个 Gmail 帐户有几乎无穷多个 Email 地址,比如我的 Email 是 chris.corsair@gmail.com,那么 ch.riscorsair@gmail.com, chr.isc.orsiar@gmail.com 都是我的地址(好像 chr.iscorsair.whatever@gmail.com 也可以,但是没有考证过)。 这些地址可能被用于不同的用途,我们就要把所有用到的地址都写道 alternates 里,有都好分隔,让 mutt 知道,“这些都是老子的地址!”

set sort=threads
set sort_aux=last-date-sent

设置排序,可惜 mutt 只能设置两种排序方式,而且 threads 自己还要占一种, 所以不可能设置这种:邮件是以 threads 组织的,并且 threads 按 score 排 序,对于 score 相同的 threads 则按日期排序。我觉得这是 mutt 的唯一缺陷...

set send_charset="us-ascii:utf-8"

设置外发邮件的 charset。如果全是 ascii 字符,就使用 us-ascii,否则就使 用 utf-8

set editor="emacs -nw -q --load ~/.emacs-quick.el --no-splash"

写邮件时在当前 terminal 启动一个 emacs,启动时不加载默认的 .emacs,而 是一个很快的 .emacs-quick.el,里面只有一些很基本的配置,刚刚好够写邮件 的。

subscribe muse-el-discuss@gna.org
subscribe mutt-users@mutt.org

订阅的邮件列表填在这里。

set sendmail="/usr/bin/msmtp"

使用 msmtp 发送邮件。

folder-hook =lists 'push "<delete-pattern>~r>30d<enter>"'
folder-hook =sent 'push "<delete-pattern>~r>30d<enter>"'

在访问 lists 和 sent 这两个邮箱的时候删除超过 30 天的邮件。

# Ignore all headers
ignore *

# Then un-ignore the ones I want to see
unignore From:
unignore To:
unignore Reply-To:
unignore Mail-Followup-To:
unignore Subject:
unignore Date:
unignore Organization:
unignore Newsgroups:
unignore CC:
unignore BCC:
unignore Message-ID:
unignore X-Mailer:
unignore User-Agent:
unignore X-Junked-Because:
unignore X-SpamProbe:
unignore X-Virus-hagbard:

# Now order the visable header lines
hdr_order From: Subject: To: CC: BCC: Reply-To: Mail-Followup-To: Date: Organization: User-Agent: X-Mailer:

只显示特定的首部,并且排序。

下面是颜色的设置,关于颜色,每个人有不同的偏好,所以只给几个地球人都应 该设的:

color quoted  green   black
color quoted1 magenta black
color quoted2 yellow  black
color quoted3 red     black
color index   white   red   "~D"

关于 SSL 和 TLS

(未完待续...)