使用mutt处理电子邮件

Tuesday, 26. December 2006, 14:47:36



今天突发奇想,决定不再使用evolution来处理email了,换用一下命令行下的mutt。以前虽然早已闻其大名,但到今天才有勇气去试一下。

先在网上仔细搜了一下mutt的教程,发现要么是过时的东西,要么就是讲得不清楚,决定自己重新整理一下。(不敢期望比其它教程都好;-p)

下面仅以我使用的FC5和gmail为例。;-)

首先你应该清楚mutt所扮演的角色,mutt的设计遵循了Unix的设计哲学──“做一件事,把它做好”。mutt不会编辑邮件,也不会收发邮件,它只是把做这些事的程序有效的结合起来。具体说就是,mutt会把由fetchmail接收来的邮件以可定制的方式呈现给用户,用户编辑时它会调用用户指定好的编辑器(比如:vi或emacs),然后把编辑好的邮件交给sendmail或者其它发送邮件的程序(比如我用的msmtp)来发送。整个过程就完成了。

为了更好的配合mutt,有必要先讲一下ESR编写的fetchmail的使用。首先,按照常规,你需要通过编写配置文件来定制fetchmail的行为。在用户目录下新建一个名为.fetchmailrc的文件,内容大体如下:

defaults
poll pop.gmail.com proto POP3 and options no dns
user ‘YOURUSER_NAME@gmail.com’ there with password ‘YOUR_PASSWORD’ is ‘YOUR_USER_NAME’ here options ssl
keep
mda “/usr/bin/procmail -d YOUR_USER_ID”

把上面的YOUR_USER_NAME替换成你gmail的用户名(非gmail用户也要替换后面的服务器名和上面的pop服务器),YOUR_PASSWORD替换成你的邮箱密码,把YOUR_USER_ID替换成你在你//所用主机//上面的用户名。

编写完.fetchmailrc文件之后还要用chmod把它权限设为600。

试试用下面的命令测试一下你上面的配置:

fetchmail -c

如果配置OK的话,你以后就可以使用_fetchmail -d0 -v来接收邮件了。

如果你上面收到邮件的话(没收到的话就自己发一封;-p),现在启动mutt试试。(如果没有mutt的话,到mutt官方主页上下载一个最新的。注意:如果你要让mutt本身也有收邮件功能的话,编译时请指明。)进去后是不是就看到收到的email了?mutt的按键风格和vi类似,追求用最少的按键完成最多的功能。Enter键是阅读,i键退出阅读界面,如果有多于一封邮件的话,j上选中下面的一封,而k是选中下面的,如果还有更多的话,按PageUpPageDown来进行翻页。和其它多数程序一样,按q键是退出mutt。

在进行进一步介绍mutt之前,我们先要看一下怎么发送邮件以及怎么定制mutt。

如前所述,发送邮件可以使用sendmail或者msmtp,我用的是后者(msmtp的官方主页是:http://msmtp.sourceforge.net/)。它的配置文件你应该能猜到了,也是在用户目录下,名为.msmtprc。设置如下:

account gmail
host smtp.gmail.com
from YOURMAILBOX
tls on
auth on
port 587
user YOUR_MAILBOX
password YOUR_PASSWORD

把里面的YOUR_MAILBOX替换成你的gmail邮箱,把YOUR_PASSWORD替换为你的密码即可。

mutt的配置文件有两个,一个是系统的,一个是用户的。系统配置文件是/etc/Muttrc,里面是设置mutt的一些配色等,而用户配置文件是为用户所用的,指定自己想要的一些特性,它是在用户目录下,名为.muttrc,内容大体如下:

set alternates=”YOUR_MAILBOX”
set to_chars=”+TCFL”
set index_format=”%4C %Z %{%b %d} %-15.15L (%41) %s”
mailboxes Mailbox sent-mail
set header=yes
set quit=ask-yes
auto_view text/html
set move=yes
set include
set indent_str=”<"
my_hdr From: YOUR_MAILBOX
set sort=date
set charset="utf-8"
set send_charset="us-ascii:utf-8"
set editor="vi"
set sendmail="/usr/local/bin/msmtp -a gmail"
set pop_last=yes
set pop_user=YOUR_MAILBOX
set pop_pass="YOUR_PASSWORD"
set pop_host="pops://pop.gmail.com"

同样,对大写的内容做相应的替换即可。
我们逐行来看:
set alternates=”YOUR_MAILBOX”

你有可能收到信件的地址。

set to_chars=”+TCFL”

设置$to_chars变量,一般就为”+TCFL”。

set index_format=”%4C %Z %{%b %d} %-15.15L (%41) %s”

格式字符串,用来控制index的列表显示。

mailboxes Mailbox sent-mail

指定你有哪些信箱文件。

set header=yes

显示邮件头。

set quit=ask-yes

退出时询问,默认是yes。

auto_view text/html

自动浏览text/html格式的邮件。

set move=yes

提示你把信件从 /var/spool移动到的邮箱文件。

set include

回复时引用原文。

set indent_str=”<"

回信时以”<"表示引用内容。

my_hdr From: YOUR_MAILBOX

设置你自己的邮件头。

set sort=date

按日期对邮件进行排序。

set charset=”utf-8”

终端支持的那一种编码的显示。

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

设置发送邮件的编码,先是ASCII,如果不行的话会选择UTF-8。

set editor=”vi”

指定编辑器是vi,当然了,也可以是其它你喜欢的。

set sendmail=”/usr/local/bin/msmtp -a gmail”

设置发送邮件的程序是msmtp,-a选项指定账户,就是.msmtprc中account后面指定的内容,默认的是default。

如果你的mutt编译时带了pop功能,你可以加上下面几行:

set pop_last=yes
set pop_user=YOUR_MAILBOX
set pop_pass=”YOUR_PASSWORD”
set pop_host=”pops://pop.gmail.com”

OK!mutt的配置搞定了,现在你可以用mutt发一封邮件试试。进入mutt以后按_m键,或者干脆直接在mutt选项中指定:

mutt -s “This is subject.” foo@bar.com > contents.txt


好了,mutt的介绍就到此为止了。更多的mutt介绍请参考[2]。试试mutt,是不是很酷呢?

参考资料:

[1] http://corsairdoom.blogspot.com/2006/10/mutt.html

[2] http://www.ucolick.org/~lharden/learnmutt.html

[3] http://learn.tsinghua.edu.cn:8080/2001315450/mutt_frame.html