Mutt中文FAQ
扫描二维码
随时随地手机看文章
怎样才能让我发出的信件使用我的POP邮箱的地址,而不是 root@myhost.com 这样的地址?
用 my_hdr 把你的 From: 设置为你想要的地址就行了。比如我是这样设置的:
my_hdr From: wang-y01@mails.tsinghua.edu.cn
注意 From: 的冒号之后有空格!
怎样让 Mutt 显示日期等为中文?
set locale="zh_CN"
发出的信件为什么设置了错误的 charset?别人的程序不能正确显示我的中文信件!
把 gb2312 编码加到你的 send_charset. 就像这样最好:
set send_charset="us-ascii:iso-8859-1:gb2312:utf-8"
收到一些中文信件全部显示为 "???"
这是因为某些 email 客户端,比如清华大学 mails.tsinghua.edu.cn 的WWW界面客户端 没有设置字符编码,你看看邮件头(按h),是不是有个
Content-Type: text/plain
但是后面没有说 charset="GB2312"? Mutt 遇到这种没有设置 charset 的邮件就会使用 "us-ascii",所以如果你想让这种信件可以正确显示,就把 "us-ascii" 设置为 "gb2312" 的别名:
charset-hook ^us-ascii$ gb2312
注意 "us-ascii" 中间的连字号!
可是仍然有邮件标题乱码呢!
看看你的 $spool 里那个乱码的信件是不是有类似如下内容:
Subject: =?iso8859-1?B?U29oddCj09HCvDq587Dg09DQwrPJ1LG808jro6E=?=
Chinaren 等服务器发出来的信件使用了 quoted-printable 的 subject,而且设置编码为 "iso8859-1",这显然是错误的。
对付这个错误的办法是把 iso-8859-1 变成 gb2312 的别名:
charset-hook ^iso-8859-1$ gb2312
注意 "iso-8859-1" 中间的连字号!
如果仍然有信件乱码。干脆用
charset-hook .* gb2312
把所有信件都用 gb2312 显示。
可是这样设置之后 evolution 发过来的 subject 为 utf-8 编码的邮件标题乱码!
那就把不是 utf-8 的编码都映射到 gb2312:
charset-hook !utf-8 gb2312
怎样配置 fetchmail?
fetchmail 的配置非常简单。如果只是一个人用的话,可以这样设置:比如,我在我的 $HOME 目录编辑了一个 .fetchmailrc:
set daemon 60 poll mails.tsinghua.edu.cn protocol POP3 user "wang-y01" password "wang-y01的密码" poll smth.org .... ....
然后把 fetchmail 写到我的shell启动脚本里:
! ps aux | grep -q fetchmail && fetchmail &
fetchmail 启动后成为一个 daemon, 每分种帮我检查所有邮箱里的邮件,收回来,并且转发到本地信箱。修改上面那个 "60" 就可以改变检查时间间隔。
如果不想让 fetchmail 删除服务器上的文件,而且每次只取新的信。就在配置文件里加上:
keep uidl
我不想用 fetchmail,能不能直接收回 POP 信件啊?
如果你的 Mutt 编译时加入了 POP 功能,那么你可以直接从 POP 服务器收邮件而不用借助于 fetchmail. 把类似这些行加入 ~/.muttrc
set pop_user=wang-y01 set pop_pass="wang-y01的密码" set pop_host="pop://mails.tsinghua.edu.cn"
也可以一次性输入所有内容:
set pop_host="pop://wang-y01:wang-y01的密码@smth.org"
在 Mutt 里按一下 "G" 就可以取邮件了。
怎样处理多个 POP3 信箱?
如果你有多个POP信箱,你可以设置一些方便的宏把POP信件收到你信箱里。举个例子,就像我这样:
macro index ,shredder ":set pop_host= "pop://shredder:shredder的密码@smth.org"r
这样,我只要按 ,shredder 就可以收我在 smth 上 shredder 的信件,只要按 ,sk8er 就可以收我在 smth 上 sk8er 的信件,只要按 ,ts 就可以收 mails.tsinghua.edu.cn 的信件,只要按 ,g 就可以收取我所有 POP 信箱的信件了。
怎样直接访问 POP3 信箱?
除了上面的方法,你还可以直接访问 POP3 信箱。比如,我可以直接按 "c" 切换到信箱 pop://sk8er:sk8er的密码@smth.org
就可以浏览 pop 的信件了。切换到其它信箱就浏览不同的 pop。如果你嫌按键太多可以自己定义一个宏。这是同步操作,你如果在这个信箱里删除一封信件,mutt 就会删除你 pop3 服务器上的信件。你不删它也不删。
邮件太多时这样效率很低,每次都要取所有邮件头,就像 Foxmail 的“远程邮件管理”。所以最好在那种不想取回信件,而想直接删除垃圾邮件的时候用这个办法。
怎样处理邮件列表?
参看subscribe命令。
我按 "d" 的时候邮件被直接标记删除了,怎样才能把删掉的信件都移到一个“垃圾箱”呢?
你只要把信件用 save-message 函数保存到你的垃圾箱,比如 ~/Mail/Trash,信件会被自动做上 "D"(删除) 标志。为了让 "d" 可以保存到垃圾箱,你可以把 "d" 键绑定到一个宏。但是如果你要删除垃圾箱里的邮件,这个宏会再次把垃圾箱的邮件存储到垃圾箱,产生循环。所以你应该使用 folder-hook 在垃圾箱里把 "d" 恢复到原来的 delete-message 函数,而在其它信箱使用那个宏。
现在你可以用以下设置得到一个“垃圾箱”的功能。第一次按 "d" 时有可能会被讯问是否建立这个信箱(Trash).
folder-hook . ‘macro index d "~/Mail/Trashr"‘ folder-hook ~/Mail/Trash ‘bind index d delete-message‘[!--empirenews.page--]
当收到的邮件的 header 有很多项目时,我的 pager 里全都是邮件头。怎样才能只看到某些我想看的邮件头呢?
你可以用 ignore 忽略你不想看到的邮件头,如果 ignore *,你就可以忽略所有邮件头。用 unignore 可以恢复显示被忽略的邮件头。所以一个简单的办法就是先把所有邮件头忽略,然后放出你想看的那几个。
看下面的设置。我的 sent.*(发件箱) 里只显示 To: Subject: Date: 三项。而在其它信箱就显示 From: Subject: X-Mailer: Date: 这几项。
folder-hook . "ignore *; unignore from subject X-mailer date" folder-hook sent.* "ignore *; unignore to subject date"
你还可以指定邮件头显示的顺序:
hdr_order from to subject date
Mutt 怎么使用地址簿呢?
你可以用 alias 来实现一个地址簿。alias 命令的形式是这样的,举个例子:
alias wy Wang Yin
alias 是命令,wy 是别名,Wang Yin
在 To: 的提示下按 Tab 就可以显示联系人列表,然后你可以移动光标选择联系人。
如果你有很多 alias 要写,最好把它们写到另外一个文件,比如叫 .mutt.alias. 然后在 .muttrc 里加上:
source ~/.mutt.alias
你还可以设置一个变量:
set alias_file=~/.mutt.alias
这样你在 index 里按 "a",就可以把来信人加入到这个 alias 文件了。
Mutt 如何处理 HTML 附件?
Mutt 可以处理任何类型的附件。因为它可以调用合适的程序来处理它们。为了直接在 mutt 的窗口里显示 HTML,你只需要在 ~/.mailcap 文件加入:
text/html; lynx --dump %s; nametemplate=%s.html; copiousoutput
在 ~/.muttrc 加入:
auto_view text/html
Mutt 如何处理 Word doc 附件。
清华大学总是喜欢发送含有 doc 附件的通知。真是让人ft。现在有一个完美的解决方案了:使用 wvware 把 doc 转成 HTML 嵌入mutt里。
wvware 可以在 http://www.wvware.com/免费得到。
wvHtml --charset=gb2312 your.doc your.html
就可以把doc转成 HTML。经测试,能够正确处理汉字和图片。
你可以让mutt调用 wvHtml 在自己的窗口里直接显示转换的 doc 文档。只需要在 ~/.mailcap 文件加入:
application/msword; wvHtml --charset=gb2312 %s - | lynx --dump -stdin; nametemplate=%s.html; copiousoutput text/html; lynx --dump %s; nametemplate=%s.html; copiousoutput
在 ~/.muttrc 加入:
auto_view text/html application/msword
这样你的 mutt 看一个 doc 的时候就像这个样子:
我想在 Mutt 里使用 Emacs 怎么办?
Emacs 是一个非常强大的编辑器,所以你肯定会希望能在 Mutt 里使用 Emacs。你可以选择两种方式:
一种方式是直接在 Mutt 的终端里使用非图形界面的 Emacs (emacs -nw)。
你只需要在 .muttrc 设置:
set editor="emacs -nw"
这样会启动一个新的 Emacs。如果你的 Emacs 配置加入了大量扩展,这个启动时间是相当长的,你不希望每回一封email就等上10秒等Emacs启动吧?
有一个办法可以跳过冗长的 Emacs 扩展。只需要把你的 .emacs 里耗时的部分放在一个条件语句里。比如,我就把 desktop 和 session 放在了一个条件语句里启动。如果知道编辑的文件名叫做 "/tmp/mutt-..." 那我们就知道是 mutt 在调用 Emacs,所以我就不加载 desktop 和 session 这种费时间又没用的东西。
(unless (catch ‘found (dolist (arg command-line-args) (if (string-match "^/tmp/mutt-" arg) (throw ‘found t)))) ;; load desktop (load "desktop") (desktop-load-default) (desktop-read) ;; load session (require ‘session) (add-hook ‘after-init-hook ‘session-initialize) (setq desktop-globals-to-save ‘(desktop-missing-file-warning)) ;; start server (server-start) )
一种方式是使用 emacsclient 发送到 GUI 的 Emacs 服务器编辑。
这种方式可以使用一个已经启动的 Emacs,启动非常快速。但是我不是很喜欢这种方式,因为我不想离开 Mutt 的终端到 Emacs 的窗口,编辑完了还要切换窗口。看这幅图。
先来看看 Emacs 的设置,启动 Emacs 后,你可以使用 server-start 启动 Emacs 服务器。你也可以把
(server-start)
加入到你的 .emacs 文件,这样 Emacs 启动时自动就启动了服务器。
在 .muttrc 里加入
set editor=emacsclient
这样 Mutt 在要发送邮件时,就把需要编辑的东西送到已经启动的 Emacs 里。编辑完了之后你按 C-x #,控制会转回到 Mutt.
我不能直接连国外,sendmail必需通过 mails.tsinghua.edu.cn 转发,但是 sendmail 不能通过 ESMTP 验证怎么办?
由于清华大学网络中心的限制,一般同学不能直接连接国外的服务器。这样 sendmail 就不能直接将邮件发送到目的地。我们需要依赖国内的邮件服务器来转发到目的地。但是现在国内的smtp邮件服务器通常需要 SMTP 验证才能帮你转发邮件。比如 mails.tsinghua.edu.cn, 这是一种防止别人利用自己主机发送垃圾邮件的办法。
sendmail 怎样才能通过 SMTP 身份验证呢?sendmail 的网页上说有办法。可是我搞了一天还是没有搞定。而且 sendmail 是以安全漏洞著称的。所以我决定换用 Postfix。qmail 也很好,但是我不知道怎么让 qmail 通过 AUTH SMTP 转发, 如果有人知道请告诉我。
postfix 是一个可以取代 sendmail 的始服务器。它在普通机器上可以达?sendmail 3 倍的吞吐率。而且相当安全。它可以在 www.postfix.org 下载安装过程如下:
编译的时候你需要让 postfix 支持 SASL 验证,使用以下选项编译:[!--empirenews.page--]
% make makefiles CCARGS="-DUSE_SASL_AUTH -I/usr/local/include" AUXLIBS="-L/usr/local/lib -lsasl"
然后安装
% make; make install
为了 postfix 能够正确发送本地邮件,请在 /etc/postfix/main.cf 加上:
myhostname = tu140066.tsinghua.edu.cn mydestination = wangyin.com, $myhostname, localhost.$mydomain
$myhostname 指明了你的主机域名,清华大学的网络给了每个人一个域名,其实就是 tuxxxxxx.tsinghua.edu.cn, xxxxxx 就是你的 IP 后面的数字,比如我的IP是166.111.140.66, 所以我的域名是 tu140066.tsinghua.edu.cn.
$mydestination 指出哪些地址是认为是你自己的地址。你应该把你的机器名(我的是 wangyin.com),$myhostname, $localhost.$mydomain 加进去。
为了能够使用 SASL 验证登录,把这些行加到 /etc/postfix/main.cf
smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd smtp_sasl_security_options = relayhost = mails.tsinghua.edu.cn
编辑口令文件 /etc/postfix/sasl_passwd。加入一行:
Your.Relay.Server your_auth_login_name:Your_PassWord
比如我的口令文件是这样的:
mails.tsinghua.edu.cn wang-y01:aDF2m@3d$q=+
当然密码不是那个 :P
把口令文件转成 Berkeley DB 格式:
#postmap hash:sasl_passwd
启动你的 postfix 服务器
postfix start