[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

mutt安装记述



配置mutt没有想像中的简单,所以要作好不断经历失败打击的心理准备。对于想拥有一个能简单收发邮件的mutt的门外汉来说,至少得需要几个小时。

首先是安装必须的软件
sudo apt-get install mutt fetchmail procmail msmtp

装mutt 之后,在命令行输入mutt开启mutt界面,首先在界面的下方,提醒我们"$HOME/Mail不存在。制造吗?",有些像我一样急性子的人会毫不犹豫 的no。然后开始寻找让mutt使用其它位置的目录作为信箱的办法。但是我相信你将花费很多的精力浪费在错误的认识上。原因是对mutt的误解,我为此付 出了2个小时的代价,要知道它不是传统意义上的邮件客户端。信箱目录应该由负责接收邮件的程序控制,例如fetchmail。mutt只负责管理邮件,而 不是收发邮件。

安装了邮件接收程序fetchmail和邮件分拣程序procmail后,首先分别创建各自的配置文件$ HOME/.fetchmailrc和$HOME/.procmailrc,这样为的是让我们能独立使用fetchmail和procmail这两个程序 通过pop接收并分拣邮件。
=== $HOME/.fetchmailrc ===
# pop 邮箱地址
poll pop.somewhere.com
proto pop3
# 只下载最新的邮件,已下载的邮件由$HOME/.fetchids文件标识
# 似乎把uidl放在别处会出错
uidl
# 用户名密码
username zhangsan
password password

# 在服务器上保留信件
keep
===================

=== $HOME/.procmailrc ===
# 用户邮箱目录的位置
MAILDIR="/sun/mails/"
# 分拣日志保存的位置
LOGFILE="$MAILDIR/logs/procmail.log"
# 邮件转换程序
FORMAIL=/usr/bin/formail

# 暂时未作任何分拣

# 所有经过分拣后的邮件都存储在$MAILDIR/default信箱中
:0
* .*
default
===================
这 时我们使用fetchmail -akv -m "/usr/bin/procmail -d %T"命令就可以把zhangsan在somewhere.com上的邮件通过pop下载到本地信箱/sun/mails/default文件中。这里要 说明的是fetchmail的-a参数,此参数用于下载全部信件,如果不加此参数,fetchmail只会下载最新的信件,而不会重复下载已下载过的信 件。已下载的信件由$HOME/.fetchids文件标识。

如果参考以上设置,你已经可以正常的收到邮件,那就可以继续下面的配置。否 则请先解决遇到的问题。下面我们继续配置邮件发送程序msmtp,配置文件比较简单易懂,需要注意的是tls和auth这两行,为了满足SMTP服务器对 邮件发送者必须通过SSL或TLS认证的要求,请确认配置文件中包含这些内容。但是如果你的SMTP服务器不需要认证,则去掉这两行。
=== $HOME/.msmtprc ===
defaults
logfile /sun/mails/logs/msmtp.log

account company
host smtp.somewhere.com
from zhangsan@somewhere.com
port 25
user zhangsan
password password
tls on
auth on

account default: company
===================

最后要配置的就是我们的主角mutt了,这里只是简要的配置,更复杂的配置留给读者自己。一旦完成了mutt的配置,我们希望能立刻尝试用mutt发送邮件,所以借着以下示例立即创建一个属于你自己的$HOME/.muttrc文件吧。
=== $HOME/.muttrc ===
# 默认信箱目录
set folder="/sun/mails/"
# 已读的信箱
set mbox="+incoming"
# 进入mutt后默认使用的信箱,可以考虑和$HOME/.procmailrc设置的默认信箱相同
set spoolfile="+default"
# 不清楚
#set postponed="+postponed"
# 已发送的信箱
set record="+outgoing"

# 终端的编码
set charset="UTF-8"
# 外发邮件使用的编码
set send_charset="UTF-8"
# 用中文格式显示日期
set locale="zh_CN.UTF-8"
# 解决没有设置字符编码的信件显示为乱码的问题
charset-hook ^us-ascii$ GB18030
# 解决主题为utf-8的信件标题显示为乱码的问题
charset-hook !UTF-8 GB18030
# 解决未经过MIME编码的信件显示为乱码的问题
set strict_mime=no
set assumed_charset="GB18030:UTF-8"
# 解决中文附件名为乱码的问题
set rfc2047_parameters=yes

# 采用msmtp发送邮件
set sendmail="/usr/bin/msmtp"
# 让mutt可以更好的阅读html邮件
auto_view text/html
===================
配置好后,立刻启动mutt,按m,输入对方的邮件地址后回车,输入主题后回车,这时mutt会调用默认的编辑器vim,然后输入信件正文后保存退出,最后浏览并确认待发送邮件无误,按y即可完成发送。愿意的话在y之前可以按a添加附件。

以下是我配置过程中遇到的一些问题和解决方法。
??? 问题1 - 邮件发不出去的问题 ???
发送邮件时,MUTT显示以下错误信息:
0 (null)
lisi@somewhere.com: 550 relaying to prohibited by administrator^M

Connected to MTA
From zhangsan@somewhere.com: 250 is syntactically correct^M
To lisi@somewhere.com: 550 relaying to prohibited by administrator^M
Disconnected to MTA

表示张三所用的SMTP服务器需要认证,所以要修改邮件发送程序msmtp的配置文件,让他支持这种认证
确认在$HOME/.msmtprc文件中存在以下内容
tls on
auth on
???????????????????????????????

??? 问题2 - 显示为乱码的问题 ???
mutt 主界面中有些邮件的发件人栏和主题栏的信息显示为乱码,有多种原因会导致这个问题,例如:
1. 某些 email 客户端,没有设置字符编码
Mutt 遇到这种没有设置 charset 的邮件就会使用 "us-ascii",所以把 "us-ascii" 设置为 "gb2312"(或gb18030) 的别名,确认$HOME/.muttrc中存在以下内容
charset-hook ^us-ascii$ GB18030
2. evolution 发过来的 subject 为 utf-8 编码的邮件标题乱码!
把不是 utf-8 的编码都映射到 gb2312(或gb18030)。确认$HOME/.muttrc中存在以下内容
charset-hook !UTF-8 GB18030
3. 完全沒用MIME编码的信件!
查看这些邮件的信头,你找不到"MIME-Version"这样的内容。确认在$HOME/.muttrc中存在以下内容
# 为了启用assumed_charset,必须禁用strict_mime
set strict_mime=no
set assumed_charset="GB18030:UTF-8"
??????????????????????????????

??? 问题3 - 修改你自己在对方邮箱界面发件人栏的名称 ???
如果你希望你发的信件在对方邮箱界面的发件人栏中显示你的中文名,则确认$HOME/.muttrc中存在以下类似内容
my_hddr From: 张三 < zhangsan@somewhere.com>
???????????????????????????????????????????????????????

??? 问题4 - 邮件发不去出的问题 ???
发送邮件时,MUTT显示以下错误信息:
msmtp: cannot locate host smtp.somewhere.com: Name or service not known
msmtp: could not send mail (account default from /sun/home/.msmtprc)
msmtp: cannot log to $MAIL/logs/msmtp.log: cannot open: No such file or directory
msmtp: log info was: host= smtp.somewhere.com tls=on auth=on user=zhangsan from=zhangsan@somewhere.com
+recipients=zhangsan@somewhere.com errormsg='cannot locate host smtp.somewhere.com: Name or service not known'
+exitcode=EX_NOHOST

表示系统在解析SMTP邮件服务器域名smtp.somewhere.com时失败。为了杜绝此问题,可以把手工解析所得的IP地址添加到/etc/hosts文件
1.2.3.4 smtp.somewhere.com
?????????????????????????????????

??? 问题5 - 所收附件的中文名称为乱码的问题 ???
由于大部分email客户端采用非标准的RFC2047格式作为附件名称的编码,而mutt采用标准的RFC2231对附件文件名进行编码。解决办法是确认在$HOME/.muttrc中存在以下内容。
set rfc2047_parameters=yes
??????????????????????????????????????????????

??? 问题6 - 怎么标记邮件为已读 ???
在mutt自带的帮助手册中,所有类似[ESC]r的快捷键实际上对应PC机上的[Alt]r。选择一封邮件后按Alt+r即可标记此邮件为已读。
??????????????????????????????????

??? 问题7 - 怎样按话题/线索方式显示邮件 ???
mutt 默认按thread排序,所以不必作任何配置。如果你发现你的mutt不能按话题/线索方式显示邮件了,有两个办法,一是在mutt界面中按o再按t,表 示恢复到按thread排序的方式;二是确认$HOME/.muttrc中没有把sort改为thread以外的其它值。
???????????????????????????????????????????

以下是我自定义的一些配置,希望你也喜欢。
* GMail的tag相信很多人都喜欢吧 ^^
让procmail在分拣邮件时添加一个X-Label字段,此字段在mutt的index_format中可被识别。
=== $HOME/.procmailrc ===
# 分拣公司的信件
:0
* ^From:.*@cctv.com
company

# 公司的svn提醒,加svn标签
:0
* ^From:.*@svn.cctv.com
{
:0 Afhw
| $FORMAIL -I "X-Label: svn"

:0
company
}
====================
注意:0 Afhw这行,中间有空格,A是大写。

需要说明的是,没有自定义index_format参数的mutt是无法看到所添加的tag的。确认$HOME/.muttrc中存在以下相似内容
=== $HOME/.muttrc ===
set index_format="%4C %Z %{%b %d} %-15.15L %?M?(# %02M)&(%4l)? %?y?[%.20Y] ?%s"
=================
其中 %?y?[%.20Y] 含义是,如果存在X-Label,就在[ ]中显示它的内容。

更多:
man muttrc
http://blog.gmane.org/gmane.mail.procmail/day=20020326
http://mail.python.org/pipermail/mailman-developers/2002-July/012732.html
http://sial.org/howto/procmail/
http://linuxgazette.net/issue14/procmail.html
http://koweycode.blogspot.com/2006/10/getting-things-done-with-mutt.html

* 给tags添加不同颜色
确认在$HOME/.muttrc中存在以下类似内容
=== $HOME/.muttrc ===
color index brightyellow default "~h ^X-Label"
=================
美中不足的是未能对X-Label的内容作局部处理。改变颜色后整行颜色都被改了。

更多:
http://www.webservertalk.com/archive204-2005-9-1190554.html

* 手工添加tag
首先在这里下载一个脚本 http://auriga.wearlab.de/~alb/other/mutt-labels/editlabel,保存并赋予可执行权限。备份你的$HOME/.muttrc后修改,在其中添加以下内容:
=== $HOME/.muttrc ===
# labels
macro index y " set editor=\"~/bin/editlabel append\"\n\
\
set editor=vim\n" "Append label"
macro pager y "set editor=\"~/bin/editlabel append\"\n\
\
set editor=vim\n" "Append label"
macro index Y "set editor=\"~/bin/editlabel menu\"\n\
\
set editor=vim\n" "Edit labels"
macro pager Y "set editor=\"~/bin/editlabel menu\"\n\
\
set editor=vim\n" "Edit labels"
macro index \Cy "~y " "Limit view to label"

set index_format="%4C %Z %{%b %d} %- 15.15L %?M?(#%03M)&(%4l)? %?y?(%.20Y) ?%s"
=================
然后,创建一个$HOME/.labels文件,如果你想用其它名称或创建在其它位置,可以,但是请保证和刚下载的脚本中第7行的配置相同。在该文件中添加若干标签,每个标签独占一行,保存退出即可。
=== $HOME/.labels ===
sss
eee
xxx
=================
配置到此结束。打开mutt后选择一封信件,
添加标签:按小写的y,然后输入与$HOME/.labels文件中任意一行内容相同的标签,回车,即可。
删除标签:按大写的Y,然后选c(表示清除所有标签),回车,即可。

更多:
http://auriga.wearlab.de/~alb/other/mutt-labels/

* 来信自动提醒
首先配置让fetchmail在后台运行,并且每600秒(10分钟)检查一次是否有新信件,确认在$HOME/.fetchmailrc文件中存在以下内容:
=== $HOME/.fetchmail ===
defaults
mda "/usr/bin/procmail -d %T"

set daemon 600
===================
需要说明的是:必须保证以下内容
defaults
mda "/usr/bin/procmail -d %T"
存 在于$HOME/.fetchmailrc的首部。然后,根据不同系统自行创建一个启动脚本,让系统启动时自动执行 /usr/bin/fetchmail。fetchmail会根据$HOME/.fetchmailrc文件,把自己转换为后台程序,并且每10分钟检查 一次邮件,在收到邮件后传递给procmail程序分拣。

Gnome下可用gnubiff,KDE环境下可用kbiff,因为区别不大, 这里只说kbiff的简单设置,正常安装后启动kbiff,在Poll栏输入600,表示每十分钟检查一次本地信箱;在Mail Client栏输入"konsole --nohist --noxft -e mutt",表示我们使用konsole中的mutt作为邮件客户端;切换到Mailbox标签页,添加所有你需要来信自动提醒的本地信箱。保存退出即 可。
要说明的是,kbiff需要配合邮件接收程序如fetchmail才能正常工作,fetchmail负责定时从服务器取回最新邮件并保存在本地信箱文件中,kbiff负责定时检查本地信箱文件并在必要时提醒。

* 只显示感兴趣的信头
mutt默认会显示所有信头,有些信头我们并不关心。我们先隐藏所有信头,然后显式的列出我们感兴趣的信头。确保$HOME/.muttrc中存在以下类似内容。
=== $HOME/.muttrc ===
# which to see
ignore *
unignore From:
unignore To
unignore Cc
unignore Subject
unignore X-Mailer
unignore User-Agent
unignore Date
unignore X-OS
unignore X-Uptime

# order
hdr_order From: To: cc subject date delivery-date x-mailer user-agent x-send-to x-spam-level x-mailinglist x-os
================

* 使用通讯录
mutt支持通讯录,包括把发件人自动添加到通讯录,以及在撰写邮件时列出通讯录中的对象两项功能。确认在$HOME/.muttrc中存在以下内容
=== $HOME/.muttrc ===
# 在mutt提示To:时,按tab显示通讯录
source ~/.abc.alias
# 在mutt按a,把发件人添加到通讯录
set alias_file=~/.abc.alias
================

* 自定义颜色
可用颜色包括:white, black, green, magenta, blue, cyan, yellow, red, default。确认在$HOME/.muttrc中存在以下类似内容
=== $HOME/.muttrc ===
# 自定义界面颜色
# -- -- 前景色 背景色
# 状态栏
color status black blue
# 当前行
color indicator white default
# 信头
color hdrdefault blue default
# 附件
color attachment yellow default
# 引用
color quoted green default
# 邮件空白处
color tilde white default
# 线索
color tree cyan default
# 提示信息
color message white default
# 签名
color signature white default
# 错误信息
color error white red
# 普通文件
color normal default default
=================

以 下是目前我用的配置文件,已经满足了日常收发邮件的要求,也基本覆盖了其它邮件客户端的常用功能。如果懒人想直接拿去用,请把张三改成你自己,其中 somewhere.com代表你的邮件服务器的域名,如163.com或gmail.com。其中smtp.somewhere.com请换成你用的 SMTP服务器信息。其中pop.somewhere.com请换成你用的POP服务器信息。其中紧跟在password后面出现的password请换 成你的邮箱密码。^^ 仅供各位参考。感到抱歉的是在$HOME/.muttrc中,请把张三后面出现的zhangsan.somewhere.com前后的小括号()手动改成 中括号<>。
=== $HOME/.muttrc ===
# 建立信箱
set folder="/sun/mails/"
# 已读的信箱
set mbox="+incoming"
#set mbox_type=maildir
# 进入mutt后默认使用的信箱,可以考虑和$HOME/.procmailrc设置的默认信箱相同
set spoolfile="+company"
# 功能不明
#set postponed="+postponed"
# 已发送的信箱
set record=+"outgoing"

# 邮件列表选项,按 "r" 会回信到别人的私人信箱,按 "L"可以回复到邮件列表地址
subscribe desktop
subscribe team.nj

# 终端的编码
set charset="UTF-8"
# 外发邮件使用的编码
set send_charset="UTF-8"
# 用中文格式显示日期
set locale="zh_CN.UTF-8"
# 解决没有设置字符编码的信件显示为乱码的问题
charset-hook ^us-ascii$ GB18030
# 解决主题为UTF-8的信件标题显示为乱码的问题
#charset-hook !UTF-8 GB18030
# 解决未经过MIME编码的信件显示为乱码的问题
set strict_mime=no
set assumed_charset="GB18030:UTF-8"
# 解决中文附件名为乱码的问题
set rfc2047_parameters=yes

# 回信时自动包含原文
set include
# 回信引文之前的符号
set indent_str="> "
# 回信引文不用包含原文的信头
set header=no

# 自己在对方邮箱界面发件人栏中显示的内容
# 请把这里的小括号()改成中括号<> :(
my_hdr From: 张三 (zhangsan@somewhere.com )
# 采用msmtp发送邮件
set sendmail="/usr/bin/msmtp"
# 让mutt可以更好的阅读html邮件
auto_view text/html
# 让mutt识别不同的邮件特征
# " "(空): 表示这封邮件的 To: 和 Cc: Bcc: 都没有你的地址,很多垃圾邮件都有这个特征。
# +: 表示你是收件人(To: 是你的地址之一),而且是唯一的收件人。
# T: 表示你是收件人(To: 包括了你的地址之一),但是你不是唯一的收件人。这是一封群体信件。
# C: 表示你的地址出现在 CC:,但是你不是唯一的被抄送的人。
# F: 表示这封邮件是你发出去的。
# L: 表示这是一封你已经加入的邮件列表寄来的。
alternates zhangsan@somewhere.com

# mutt用纯ascii表示树状列表
set ascii_chars=yes
# mutt默认按线索
#set sort=date

# 禁止PAGE键切换到下一封信件
set pager_stop
# 快速回复,不用确认回复地址和主题
set fast_reply
# 退出时不在提示把信件从spool移动到的mbox文件
set move=no

# 设置要显示的邮件头及其显示顺序
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:
hdr_order From: Subject: To: CC: BCC: Reply-To: Mail-Followup-To: Date: Organization: #User-Agent: X-Mailer:

# 在mutt提示To:时,按tab显示通讯录
source ~/.abc.alias
# 在mutt按a,把发件人添加到通讯录
set alias_file=~/.abc.alias

# 自定义界面颜色
# -- -- 前景色 背景色
# 状态栏
color status black blue
# 当前行
color indicator white default
# 信头
color hdrdefault blue default
# 附件
color attachment yellow default
# 引用
color quoted green default
# 邮件空白处
color tilde white default
# 线索
color tree cyan default
# 提示信息
color message white default
# 签名
color signature white default
# 错误信息
color error white red
# 普通文件
color normal default default

# 自定义显示界面
set index_format="%4C %Z %{%b %d} %-15.15L %?M?(# %02M)&(%4l)? %?y?[%.20Y] ?%s"
#color index brightyellow default "~h ^X-Label"

# 当procmail未能正常处理某些邮件时很有用,手工添加X-Label
macro index y "set editor=\"/usr/bin/xlabel.sh append\"\n\
\
set editor=vim\n" "Append label"
macro pager y "set editor=\"/usr/bin/xlabel.sh append\"\n\
\
set editor=vim\n" "Append label"
macro index Y "set editor=\"/usr/bin/xlabel.sh menu\"\n\
\
set editor=vim\n" "Edit labels"
macro pager Y "set editor=\"/usr/bin/xlabel.sh menu\"\n\
\
set editor=vim\n" "Edit labels"
macro index \Cy "~y " "Limit view to label"
=====================

=== $HOME/.msmtprc ===
defaults
logfile /sun/mails/logs/msmtp.log

account company
host smtp.somewhere.com
from zhangsan@somewhere.com
port 25
user zhangsan
password password
tls on
auth on

account default: company
======================

=== $HOME/.procmail ===
# 用户邮箱目录的位置
MAILDIR="/sun/mails/"
# 分拣日志保存的位置
LOGFILE="$MAILDIR/logs/procmail.log"
# 邮件转换程序
FORMAIL=/usr/bin/formail

# 分拣公司的信件
:0
* ^From:.*(@ somewhere.com|@somewhere2.com)
company

# 公司的svn提醒,加svn标签
:0
* ^From:.*@svn.somewhere.com
{
:0 Afhw
| $FORMAIL -I "X-Label: svn"

:0
company
}

# 所有经过分拣后的邮件都存储在$MAILDIR/default信箱中
:0
* .*
default
=======================

=== $HOME/.fetchmailrc ===
defaults
mda "/usr/bin/procmail -d %T"

set logfile "/sun/mails/logs/fetchmail.log"

# 在后台运行,每10分钟检查一次邮件
set daemon 600

poll pop.somewhere.com
proto pop3
# 每次只获取最新的信件
uidl
username zhangsan
password password

# 保留在服务器上的信件
keep
==========================


参考的资料太多
http://www.kreny.com/docs/mutt.htm
http://blog.vgod.tw/2005/05/18/mutt%E4%B8%AD%E7%9A%84%E4%BA%82%E7%A2%BC%E4%BF%A1/
http://mutt.blackfish.org.uk/storage/
http://blog.wdicc.com/wordpress/2006/09/03/242/

--
Vern
http://www.duodes.com/
Reply to: