逢坂はるな作品番号:【转】 mutt配置记述 (传)

来源:百度文库 编辑:九乡新闻网 时间:2024/05/07 12:46:58
【转】mutt配置记述 (传)2011年01月05日 星期三 16:40转载自 thelastgame最终编辑 thelastgame

http://s5unty.blogspot.com/2007/01/mutt.html

mutt配置记述

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

基本配置步骤

  1. 首先是安装必须的软件
    sudo apt-get install mutt fetchmail procmail msmtp
    装 mutt之后,在命令行输入mutt开启mutt界面,首先在界面的下方,提醒我们"$HOME/Mail不存在。制造吗?",有些像我一样急性子的人会 毫不犹豫的no。然后开始寻找让mutt使用其它位置的目录作为信箱的办法。但是我相信你将花费很多的精力浪费在错误的认识上。原因是对mutt的误解, 我为此付出了2个小时的代价,要知道它不是传统意义上的邮件客户端。信箱目录应该由负责接收邮件的程序控制,例如fetchmail。mutt只负责管理 邮件,而不是收发邮件。
  2. 安装了邮件接收程序fetchmail和邮件分拣 程序procmail后,首先分别创建各自的配置文件$HOME/.fetchmailrc和$HOME/.procmailrc,这样为的是让我们能独 立使用fetchmail和procmail这两个程序通过pop接收并分拣邮件。
    # $HOME/.fetchmailrc
    poll pop.somewhere.com \
    proto pop3 \
    uidl \
    username zhangsan \
    password password \
    keep
    # $HOME/.procmailrc
    # 用户邮箱目录的位置
    MAILDIR="/sun/mails/"
    # 分拣日志保存的位置
    LOGFILE="/var/log/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文件标识。
  3. 如果参考以 上设置,你已经可以正常的收到邮件,那就可以继续下面的配置。否则请先解决遇到的问题。下面我们继续配置邮件发送程序msmtp,配置文件比较简单易懂, 需要注意的是tls和auth这两行,为了满足SMTP服务器对邮件发送者必须通过SSL或TLS认证的要求,请确认配置文件中包含这些内容。但是如果你 的SMTP服务器不需要认证,则去掉这两行。
    # $HOME/.msmtprc
    defaults
    logfile /var/log/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
  4. 最后要配置的就是我们的主角mutt了,这里只是简要的配置,更复杂的配置留给读者自己。一旦完成了mutt的配置,我们希望能立刻尝试用mutt发送邮件,所以借着以下示例立即创建一个属于你自己的$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"
    # 解决中文附件名为乱码的问题
    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中存在以下内容
    set strict_mime=no
    set assumed_charset="GB18030:UTF-8"
  • 问题3 - 修改你自己在对方邮箱界面发件人栏的名称
    如果你希望你发的信件在对方邮箱界面的发件人栏中显示你的中文名,则确认$HOME/.muttrc中存在以下类似内容
    set use_from=yes
    set 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以外的其它值。
  • 问题8 - 个别HTML邮件内容为乱码的问题
    如果你在$HOME/.muttrc中添加了"auto_view text/html",那么可能有个别HTML格式的邮件存在乱码问题。这种情况很可能发生在当你的编码环境是UTF-8,而那些HTML邮件的编码格式是gbk。对于这种在mutt中显示为乱码,但在浏览器中却可以正常显示的问题,请确认在$HOME/.mailcap中存在以下内容,如没有此文件则手工创建。
    text/html ;\
    w3m -T text/html -I %{charset} -dump %s ;\
    nametemplate=%s.html ;\
    copiousoutput
  • 问题9 - 搜索中文关键字时有某些邮件未能被检索到
    具体说明请man muttrc,解决办法是确认你的$HOME/.muttrc文件中存在以下内容。
    set thorough_search=yes

更多自定义配置

  • GMail的tag
    让procmail在分拣邮件时添加一个X-Label字段,此字段在mutt的index_format中可被识别。
    # 分拣公司的信件
    :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中存在以下相似内容
    set index_format="%4C %Z %{%b %d} %-15.15L %?M?(# %02M)&(%4l)? %?y?[%.20Y]?%s"
    其中 %?y?[%.20Y] 含义是,如果存在X-Label,就在[ ]中显示它的内容。
  • 给tags添加不同颜色
    确认在$HOME/.muttrc中存在以下类似内容
    # $HOME/.muttrc
    color index brightyellow default "~h ^X-Label"
    美中不足的是未能对X-Label的内容作局部处理。改变颜色后整行颜色都被改了。
  • 手工添加tag
    首先在这里下载一个脚本,保存并赋予可执行权限。备份你的$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行的配置相同。在该文件中添加若干标签,每个标签独占一行,保存退出即可。
    sss
    eee
    xxx
    配置到此结束。打开mutt后选择一封信件,
    添加标签:按小写的y,然后输入与$HOME/.labels文件中任意一行内容相同的标签,回车,即可。
    删除标签:按大写的Y,然后选c(表示清除所有标签),回车,即可。
  • 来信自动提醒
    首先配置让fetchmail在后台运行,并且每600秒(10分钟)检查一次是否有新信件,确认在$HOME/.fetchmailrc文件中存在以下内容:
    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中存在以下类似内容。
    # 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中存在以下内容
    # 在mutt提示To:时,按tab显示通讯录
    source ~/.abc.alias
    # 在mutt按a,把发件人添加到通讯录
    set alias_file=~/.abc.alias
  • 自定义颜色
    可用颜色包括:white, black, green, magenta, blue, cyan, yellow, red, default。确认在$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
  • 如何从多个邮件帐号发送邮件?
    首先确认在邮件发送程序msmtp的配置文件中添加了多个邮件帐号,例如:
    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 beta
    host smtp.gmail.com
    from lisi@gmail.com
    port 587
    user lisi@gmail.com
    password pssword
    tls on
    auth on

    account default: company
    如后修改mutt的配置文件,确认$HOME/.muttrc存在类似以下内容
    # 实现从多个账户发送信件
    set use_from=yes
    # 此选项确保从真正的邮送域发送信件
    set envelope_from=yes
    # 默认使用的的邮送域
    set from='张三 '
    macro generic "1" ":set from='张三 '"
    macro generic "2" ":set from='李四 '"
    配置完成后,进入mutt,默认情况下mutt使用张三发送邮件。如果在按m撰写邮件之前,先按Alt+2,回车,然后再按m……,则此时发出的邮件便是从李四的帐号发出去的。如果要改回从张三的帐号发送,请在m之前按Alt+1,回车。
    需要说明的是,必须在按m之前通过Alt+1或2修改发送帐号。

完整的配置清单

以 下是目前我用的配置文件,已经满足了日常收发邮件的要求,也基本覆盖了其它邮件客户端的常用功能。如果懒人想直接拿去用,请把张三改成你自己,其中somewhere.com代表你的邮件服务器的域名,如163.com或gmail.com。其中smtp.somewhere.com请换成你用的SMTP服务器信息。其中pop.somewhere.com请换成你用的POP服务器信息。其中紧跟在password后面出现的password请换成你的邮箱密码。仅供各位参考。

$HOME/.muttrc


#set config_charset=UTF-8
#set signature="iconv -f UTF-8 ~/.signature |"
#set locale=`echo "${LC_ALL:-${LC_TIME:-${LANG}}}"`

# 建立信箱
set folder="/sun/mails/"
# 已读的信箱
set mbox="+incoming"
# 进入mutt后默认使用的信箱,可以考虑和$HOME/.procmailrc设置的默认信箱相同
set spoolfile="+company"
# 功能不明
#set postponed="+postponed"
# 已发送的信箱
set record="+outgoing"

# 我自己的邮箱
mailboxes "+incoming"
mailboxes "+outgoing"
mailboxes "+company"
mailboxes "+personal"
mailboxes "+debian"

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

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

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

# 采用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

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

# 设置要显示的邮件头及其显示顺序
ignore *
unignore From:
unignore To:
unignore Reply-To:
#unignore Subject:
unignore Date:
unignore CC:
unignore BCC:
unignore X-Label:
unignore Organization:
hdr_order Subject: To: CC: BCC: From: Date: Reply-To: X-Label: Organization:

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

# 自定义界面颜色
# -- -- 前景色 背景色
color status cyan default # 状态栏
color indicator white default # 当前行
color hdrdefault blue default # 信头
color attachment blue default # 附件
color quoted green default # 引用
color tree cyan default # 线索
color message white default # 提示信息
color signature cyan default # 签名
color normal default default # 普通文字
# 特殊邮件头
color header white default "^Subject:"
color header brightyellow default "^To:"
color header brightyellow default "^CC:"
color header brightyellow default "^BCC:"
color header yellow default "^From:"
color header yellow default "^Reply-To:"
color header yellow default "^Date:"
color header brightblue brightdefault "^X-Label:"
# 特殊状态
color index brightyellow default "~F" # 长期标记
color index yellow default "~T" # 短期标记
color index brightred default "~D" # 删除
color index brightgreen default "~U" # 未读信件

# 自定义显示界面
set index_format="%Z %?M?%-22.22n (%M)&%-26.26n? >> %?y?[%Y] %s&%s? %> %?X?/& ? %{%b%d}"

# 当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"

# 实现从多个账户发送信件
set use_from=yes
# 此选项确保从真正的邮送域发送信件
set envelope_from=yes
# 默认使用的的邮送域
set from='张三 '
macro generic "1" ":set from='张三 '"
macro generic "2" ":set from='李四 '"

# 光标行为
# 阅读正文时的光标行为
bind pager half-up
bind pager half-down
bind pager previous-line
# 浏览首页时的光标行为
bind index previous-entry
bind index next-entry
bind index previous-line
bind index next-line

#show index of messages while in pager
set pager_index_lines=6
#put status bar on top instead of bottom
set status_on_top
#treat all unread messages as new
set mark_old=no
#default subject when forwarding
set forward_format="Fwd: %s"
#don't confirm when appending messages to a mailbox
set confirmappend=no
#don't collapse threads w/ unread messages
set collapse_unread=no

# 将邮件正文解码再搜索
set thorough_search=yes

$HOME/.msmtprc


defaults
logfile /var/log/msmtp.log

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

account gmail
host smtp.gmail.com
from lisi@gmail.com
port 587
user lisi@gmail.com
password password
tls on
auth on

account default: company

$HOME/.procmailrc


# 用户邮箱目录的位置
MAILDIR="/sun/mails/"
# 分拣日志保存的位置
LOGFILE="/var/log/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/incoming信箱中
:0
* .*
incoming

$HOME/.fetchmailrc


defaults
mda "/usr/bin/procmail -d %T"

set logfile "/var/log/fetchmail.log"

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

poll pop.somewhere.com \
proto pop3 \
uidl \
username zhangsan \
password password \
keep

poll pop.gmail.com \
proto pop3 \
uidl \
username lisi \
password password \
ssl \
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/
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
http://www.webservertalk.com/archive204-2005-9-1190554.html
http://auriga.wearlab.de/~alb/other/mutt-labels/ 张贴者 Vern 时间: 17:08