2006年11月22日星期三

[Ubuntu]fetchmail+procmail+mutt+esmtp初窥

以前我讲过自己的email客户端软件选择历程,现在已经很少用客户端了,大部分时间都在gmail中泡。但是由于历史的沉淀,仍然有很多邮件会发送到tom、126等邮箱中,所以我决心再次涉足email客户端,初步选定linux平台下的fetchmail+procmail+mutt+esmtp组合,主要用于一些不支持转发的国内免费邮箱,如果感觉好的话,或许我会把gmail也加进来?

在fetchmail+procmail+mutt+esmtp的组合中,fetchmail负责收信,procmail负责过滤、分拣邮件,mutt是邮件阅读、撰写工具,esmtp负责发送邮件,在ubuntu下,都可以用apt安装,并且文件都不大:fetchmail 6.3.2-2ubuntu2 332k,procmail 3.22-11ubuntu2 140k,libesmtp5 1.0.3-1 51.9k,esmtp 0.5.1-3 35.3k,esmtp-run 0.5.1-3 3.302k,mutt 1.5.11-3ubuntu2.2 908k。

注意安装mutt的时候,它依赖postfix或者mail-transport-agent,所以要先安装esmtp-run,再安装postfix,因为postfix用于个人收发邮件是有点杀鸡用牛刀了。

然后是配置,配置的时候最好倒序进行,先配发信、过滤什么的,要不然先把收信配置好了,后续的过滤处理还没配就不好玩了。

首先创建.esmtprc,包含如下内容:

# smtp服务器地址
identity fwolf@domain1.com
hostname = smtp.domain1.com:25
username = "fwolf"
password = "pass"
default

identity fwolf@domain2.com
hostname = smtp.domain2.com:25
username = "fwolf"
password = "pass"

# 设置邮件发送代理程序
mda = "/usr/bin/procmail -d %T"

有多个smtp帐号时可以用identity区分。

然后配置mutt,ubuntu中系统的muttrc文件为/etc/Muttrc,可以另存一份为~/.muttrc然后修改,不过里面的默认设置很多都不用动,所以新建一份空的.muttrc然后把个人设置写进来也不错:

# 使用esmtp发信
set sendmail = "/usr/bin/esmtp -v -X ~/log/esmtplog"

有了这一行简单的配置,就可以告诉mutt把新建转交给esmtp进行发送了。现在启动mutt,就能够发信了,试一试吧,过完瘾之后,再来点复杂一些的muttrc配置:

#——–Basic
set beep=yes # beep when an error occurs
unset confirmappend # no confirm when appending message to existed mbox
set copy=yes # whether or not save your outgoing messages for later references
set delete=yes # purge deleted messages without asking
set editor=vim
set fast_reply=yes # donot prompt for to and subject when reply
set folder=~/mail # where to keep my mailboxes
set include=yes # include origin message when reply
set markers=yes # display + before wrapped lines
set mbox="=inbox"
set mbox_type=Maildir # use Maildir storage for mails
unset menu_scroll
set pager_context=1 # display N rows of last list page
set pager_index_lines=6 # mini index rows in list page
set pgp_verify_sig=no # ??
set postponed="=postponed"
set record="=sent" # turns on recording sent message to outgoing
set save_empty=yes # keep mailbox when last message is removed
set sendmail_wait=0 # wait when send mail process run
set status_on_top=no # move status bar to top of screen
set to_chars=" +TCFL"

#——–Folder
# Define the directory where mutt looks for mailboxes to report new mail
mailboxes `echo ~/mail/*`

#——–Format
#set date_format="!%H:%M %a %d %b   "
#set folder_format="%2C %t %8s %d %N %f"
#set index_format="%4C %Z %[%b%d] %-15.15F %s"
#set pager_format="%-10.10i %[!%a %b %d %R]"
#set status_format=" %r %b %f %n   Del %d   Msgs %m %l %> (%P)"

#——–Sort
set sort=threads # sorting the mails in threads
set sort_aux=date-sent # sort brother mails inside threads

#——–Headers
#ignore X-Mozilla-Status X-Mozilla-Status2 X-Accept-Language Delivered-To X-UIDL X-MSMail-Priority X-MimeOLE In-Reply-To
# 显示邮件时,除去默认邮件头列表中的域
# 忽略所有域然后反选您想看到的
ignore *
unignore Date To From: Subject X-Mailer Organization User-Agent
hdr_order Date From To Subject X-Mailer User-Agent Organization

#set alias_file=~/.mail_aliases # Let mutt know save path to aliases.(useless, default value is .muttrc)
#source ~/.mail_alias # load user aliases

#——–Misc
# 使用esmtp发信
set sendmail = "/usr/bin/esmtp -v -X ~/log/esmtplog"

#使用 G 键运行 fetchmail
macro index G "!fetchmail -a -m 'procmail -d %T'\r"
macro pager G "!fetchmail -a -m 'procmail -d %T'\r"

这些配置也只是一些基本的设置,是我从网上搜到的几个muttrc中汇总而来的,一些复杂的功能没有加上,等熟悉了之后再介绍。

再来配置procmail,编辑~/.procmail文件,我是参照这里进行的设置,也是打算熟悉了以后再深入研究:

MAILDIR=$HOME/mail/ #您最好确认该目录存在
LOGFILE=$HOME/log/procmail.log
LOGABSTRACT=no
#VERBOSE=on #…只在调试时使用
VERBOSE=off
FORMAIL=/usr/bin/formail
NL="
"
##处方行以 :0 开始
##不要在处方行加入注解
##使用否条件 ! 禁止一个处方
##条件行以 * 开始,regex 是您的朋友
##条件并列在一起,* 以后的部分都被送到 egrep
##紧接条件的是执行行,在这里是一个邮箱的名称
#使用 formail 捕获复本
:0 Whc: .msgid.lock
| $FORMAIL -D 16384 .msgid.cache

:0 a
$MAILDIR/duplicates/

#我们总是允许邮件来自
:0
* ^From:.*(fwolf\@domain.com)
$MAILDIR/myself/

#接着冲走一些垃圾
:0
* ^Subject:.*(credit|cash|money|debt|sex|sale|loan)
$MAILDIR/spam/

#不要 html 消息
#:0
#* ^Content-Type:.*html
#$MAILDIR/junk/

#将我的邮件列表转到相应邮箱
:0
* ^List-Id:.*gentoo-user
$MAILDIR/gentoo-user/
:0
* ^List-Id:.*gentoo-dev
$MAILDIR/gentoo-dev/
:0
* ^List-Id:.*gentoo-announce
$MAILDIR/gentoo-announce/

#捕获任何其它的 gentoo 邮件
:0
* ^From:.*gentoo.org
$MAILDIR/gentoo/
:0
* ^From:.*@freshmeat\.net
$MAILDIR/freshmeat/

################################
# 最后一条规则:将到达 #
# 这的邮件送到默认邮箱 #
################################
:0
* .*
$MAILDIR/inbox/

# 文件结束

注意每个邮箱目录名的后面都有斜杠"/",这是告诉procmail创建Maildir格式的邮箱目录,和muttrc中设置的一样,都使用Maildir格式存储邮件。

最后配置fetchmail,编辑~/.fetchmailrc文件,我也是参照Sucha's Homesite简单配置了一个,仍然是等熟悉了再详细介绍:

defaults
mda "/usr/bin/esmtp -f %F %T"

# set daemon fetch per 1.5 min
#set daemon 90

poll pop.126.com
proto pop3
uidl
username uname-126
password pass-126
is fwolf
keep

poll pop3.sina.com.cn
proto pop3
uidl
username uname-sina
password pass-sina
is fwolf

最后不要忘记更改配置文件的权限,里面可有你的密码哦。

chmod 600 .esmtprc
chmod 600 .fetchmailrc

现在,在shell中执行

fetchmail -akv -m "/usr/bin/procmail -d %T"

就能看到fetchmail和procmail愉快的收信与分拣了,再进入mutt,就可以对邮件进行管理了,我们的安装到此基本结束。

其实除了esmtp以外,fetcmail、procmail尤其是mutt的配置都非常丰富,我刚开始使用也是比照前人的葫芦画自己的瓢,网上也有很多类似的资源可以搜索到。

现在真的开始担忧mutt用爽了以后,在线的gmail如何处理了,毕竟mutt把邮件都收到了本地进行存储、处理,和gmail在线处理相比,虽然有速度的优势,却又少了可以随时随地使用的特点,我应该如何取舍呢?

Source: http://www.fwolf.com/blog/post/255