[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在线处理相比,虽然有速度的优势,却又少了可以随时随地使用的特点,我应该如何取舍呢?

Leave a Reply

Your email address will not be published. Required fields are marked *