使用Emacs阅读邮件和新闻组:Gnus 中文FAQ

来源:互联网 发布:江西省网络广播电视台 编辑:程序博客网 时间:2024/05/18 18:19

Gnus 中文FAQ[王春宇 译]

常见问题 (Frequently Asked Questions)

$Id: gnus-faq-cn.txt,v 1.5 2003/11/25 12:32:16 spr Exp $

Copyright (c) 1995, 1996 Free Software Foundation.

Copyright (c) 1995, 2001 Free Software Foundation, Inc.

----------------------------------------------------------------------

目录

译注
摘要
更改
简介
常见问题及解答
术语表


译注

来源:http://my.gnus.org/FAQ/
翻译:王春宇 <dddkk(at)sina(dot)com>
日期:2003-08-23

摘要 (Abstract)

新 Gnus 常见问题列表。用 Web 浏览器,可以看到正式的超文本版本:
http://my.gnus.org/FAQ/,源文件 Docbook 可以从这里得到:
http://sourceforge.net/projects/gnus/。

意见和建议请送至FAQ discussion list
(mailto:faq-discuss@my.gnus.org)。 这个列表用qconfirm
(http://smarden.org/qconfirm/index.html)设置了反垃圾邮件的保护。但
作为订阅者,你的消息可以通过该设置。给
faq-discuss-subscribe@my.gnus.org 发送一个空邮件来订阅还可以在这里:
http://mail1.kens.com/cgi-bin/ezmlm-browse?command=monthbythread%26list=faq-discuss
访问存档。

更改

This file is Id: gnus-faq.xml,v 1.24 2003/04/13 22:30:34 fschmitt Exp.

* Updated FAQ to reflect release of Gnus 5.10.

简介(Introduction)

Gnus 常见问题(Frequently Asked Questions)列表。

Gnus 是 Emacs 的一部分,是 Usenet 新闻阅读器,电子邮件客户端。 出
现至今已近十年,而且成为 Emacs 标准部分已经很长时间了。Gnus 5 是最
新的(也是最好的)化身。最初的版本称为 GNUS,由 Masanobu UMEDA 所编
写。94年入秋的时候,Lars Magne Ingebrigtsen 觉着无聊遍决定重写
Gnus。

Gnus 的最大的实力在于异乎寻常的可定制的能力。初看上去似乎很具威胁性,
但实际上可以忽略其中多半复杂的东西,直到你准备利用它。所以,无论接
收的邮件数量适中(在几个邮件列表中),还是去阅读邮件数目很大的列表
甚至难以跟得上,或者所在的新闻组帖子很多,使你却觉着有些累,Gnus都
能满足你的需求。

这份 FAQ 由 Justin Sheehy 维护直至 2002年3月。他曾对在他之前维护这
份列表的 Steve Baur 和 Per Abrahamsen 表示感谢。我们在这儿同样如此:
谢谢,Justin!

正式的超文本版本可以在这里看到:http://my.gnus.org/FAQ/。这一版本要
好于其他的非正式的版本,那些于Utrecht,Oxford,Smart Pages,Ohio
State,或者其他的 FAQ 存档。 如果你需要有关得到其他格式的信息,参看
下面有关资源的问题部分。

这里所包含的内容,来自于 Gnus 开发邮件列表,任何的错误或者印刷错误
请归咎于 my.gnus.org 小组,抱歉!(译注:当然,如果你看的是译文,或
许更多的是译者的错误)


常见问题及解决方法(Frequently Asked Questions with Answers)

1. Gnus 的安装

1.1 最新版本的 Gnus 是什么?
1.2 版本 5.10.0 有什么新特性?
1.3 如何、在哪里得到 Gnus?
1.4 得到了 tar 包,又该如何呢?
1.5 我需要的是哪个 Emacs 版本?
1.6 如何使 Gnus 在 Emacs 和 XEmacs 中都能运行?

2. 启动问题,Gnus 的第一个 Buffer

2.1 每次启动 Gnus 时,总有一个消息"Gnus auto-save file exists. Do
youwant to read it?",什么意思?如何去掉?
2.2 Gnus 没有记住我所订阅的组,怎么回事?
2.3 如何改变 Group buffer 中的行的格式?
2.4 我的 group buffer 变得有些拥挤,如何分类?
2.5 如何在 Group buffer 中用手来排序?如何排序某个主题下的组啊?

3. 用 Gnus 读取邮件和新闻

3.1 刚刚装好 Gnus,并且通过 `M-x gnus' 开启了它,却出现了“nntp
(news) open error”,如何处理?
3.2 我在Windows环境中,~/.gnus是什么意思。
3.3 我的新闻服务器需要验证,如何保存用户名和密码?
3.4 Gnus 好像已经运行起来了,但是我不知道如何订阅一个组。
3.5 Gnus 不能显示所有组/Gnus说我不允许在这个组上发帖子,为什么?
3.6 我想让 Gnus 在多个的服务器上取新闻,可能吗?
3.7 本地缓冲中的文件呢?
3.8 OK,能读新闻,可是我也想用 Gnus 读邮件,怎么做到?
3.9 IMAP 怎么处理?
3.10 我们的办公室中,使用的是一个 MS Exchange Server,我能用 Gnus 读
取上面的邮件吗?
3.11 通过 POP3 取信时,能不让 Gnus 删除服务器上面的邮件吗?

4. 有效地阅读消息

4.1 当我进入一个组,所有的已读消息都没有了,我如何再看到它们?
4.2 如何在每次我进入一个组的时候,让 Gnus 总是显示某个重要的消息,即
使即使是已读的。
4.3 如何看消息的头信息?
4.4 如何查看没有格式的原始信息?
4.5 如何改变 Gnus 在 Article buffer 顶部显示的头信息?
4.6 不想让 Gnus 显示 HTML 邮件,但是如果有,则显示文本部分。如何做到?
4.7 除 w3 之外可以用其他的的浏览器显示 HTML 邮件吗?
4.8 格式糟糕的邮件有办法更易读吗?
4.9 是否有办法自动的忽略由某个人发的文章或者含有某个词的文章呢?以及
我怎样突出我所感兴趣的文章?
4.10 如何在一些组(比如邮件组)里面取消主题显示,或者如何为指定的组
设定变量?
4.11 我能把自己写的文章和所跟的文章高亮显示吗?
4.12 在一个 Group buffer 中的显示的消息是按照序号由小到大的顺序排列
的,特别是在邮件组里面,这是不是一个bug?
4.13 不喜欢 Summary buffer 和 Article buffer 的版面,如何改变?或者
三个窗口的显示?
4.14 不喜欢 Summary buffer 的样子,如何调整?
4.15 如何把邮件分为几个组?

5. 写邮件或 Usenet 帖子

5.1 需要掌握的发送邮件和贴帖子的基本命令都有哪些?
5.2 写消息时如何打开自动折行 (word-wrap) ?
5.3 如何设定这些东西:From, Organization, Reply-to, signature...?
5.4 可以根据组名来设定不同的 Form, Signature 等等吗?
5.5 有没有拼写检查器?甚至自由(on-the-fly)拼写检查?
5.6 可以设置所投递的组相应的字典吗?
5.7 有没有类似于地址簿的东西,我就不必记忆太多地址了?
5.8 有时候在 Article buffer 顶部有个小小的图片,是什么?我发的帖子如
何加上?
5.9 在新闻组中,有时候想按 f 却按了 r。当我在新闻组中的时候通过邮件
回复的时候,Gnus 能否警告一下?。
5.10 如何让 Gnus 不要产生 sender header?
5.11 如何在本地保存我发送的邮件和帖子的复本?
5.12 有人告诉我说,我的 Message-ID 不正确,为什么,如何修改?

6. 引入, 存档, 搜索, 删除消息

6.1 如何把我的旧邮件引入 Gnus?
6.2 如何存档有趣的消息?
6.3 如何搜索特定的消息?
6.4 如何删除不想要的邮件?
6.5 我想所有已读消息都是过期的(至少一些组里这样),如何做?
6.6 我不想删除已过期的邮件,只想转移到另一个组。

7. 离线阅读邮件和新闻

7.1 我这里不是始终在线的,如何使得我的连接时间最小?
7.2 那么,Gnus Agent 如何呢?
7.3 如果也想把消息保存在本地呢?
7.4 离线时如何不让 Gnus 发送邮件/帖子?

8. 如果这个 FAQ 不足以解决问题

8.1 如何在 Emacs 中找到信息和帮助?
8.2 如何在 Gnus 手册中找到某某内容(例如,附件,PGP,MIME……),没
有文档?
8.3 应该知道哪些网站?
8.4 有那些邮件列表和新闻组呢?
8.5 向什么地方报告bug?
8.6 需要一个实时的帮助,如何得到啊?

9. 如何使 Gnus 速度快些

9.1 开始 Gnus,真的很慢,如何快些?
9.2 如何加快进入某个组的速度?
9.3 发送邮件变得越来越慢,怎么了?



1. Gnus 的安装

1.1 最新版本的 Gnus 是什么?

Gnus 5.10.0 已经发布了,尽管在版本号上面的变化相当的小,
Gnus 5.10 却有很多很多不容错过的新特性,当然,如果你谨慎得很,或许
宁愿使用 5.8.8 或 5.9(二者基本一样),直到 bugfix 版出来。

1.2 版本 5.10.0 有什么新特性?

当然,先去看看 Gnus 的 tarball 里面的 GNUS-NEWS 文件吧,主要的改变
都列在里面了。这里是一个我认为重要/有趣的简短列表。

* Gnus agent的重写,Gnus agent现在缺省为启动。

* 很多处理格式混乱的邮件的方法。

* 垃圾邮件处理特性。

* 包含了message-utils。

* Summary line的新的格式指定符号,比如 %B 为复杂的trn-style线索树。

1.3 如何、在哪里得到 Gnus?

最新的发行版尚未包含在 Emacs 21 中,到目前为止也不能通过 XEmacs
21.4 的 package system 中得到,因此你需要从
`http://www.gnus.org/dist/gnus.tar.gz' 或匿名ftp
`ftp://ftp.gnus.org/pub/gnus/gnus.tar.gz' 得到。

1.4 得到了 tar 包,又该如何呢?

通过 `tar vzf gnus.tar.gz' 解开然后如通常一样 `./configure; make;
make install'。(在MS-Windows中,可以先从http://www.cygwin.com 得到
Cygwin环境,用tar 解开;或者使用其他的打包程序)如果你不想或者不能
在系统里面安装 Gnus,你还可以把它装在你的home目录里面,并且在你的~
/.xemacs/init.el或者~/.emacs文件里面加入如下的行:

(add-to-list 'load-path "/path/to/gnus/lisp")
(if (featurep 'xemacs)
(add-to-list 'Info-directory-list "/path/to/gnus/texi/")
(add-to-list 'Info-default-directory-list "/path/to/gnus/texi/"))

并确定在这几行之前没有任何和 Gnus 有关的东西,在 MS Windows 上面使
用如 "C:/path/to/lisp" 的路径(没错,是 "/")。

1.5 我需要的是哪个 Emacs 版本?

Gnus 5.10.0 需要的 Emacs 版本要大于或等于 Emacs 20.3 或者 XEmacs
20.1。

1.6 如何使 Gnus 在 Emacs 和 XEmacs 中都能运行?

你不能在两者之间共享一个 Gnus 的拷贝,因为两者的 Lisp 文件的字节码
并不兼容。因此请给 Emacs 和 XEmacs 分别做一个拷贝。



2 启动问题,Group Buffer

2.1 每次启动 Gnus 时,总有一个消息"Gnus auto-save file exists. Do
youwant to read it?",什么意思?如何去掉?

这个提示意味着,上次使用 Gnus 的时候没有恰当的退出,因此没能把一些
信息写入磁盘(例如,哪些消息已读),询问你是否从自动存盘文件中恢复
这些信息。

为防止出现这个提示,每次退出 Gnus 的时候在 Group Buffer 中用`q' 退
出,不要直接 killing Emacs。

2.2 Gnus 没有记住我所订阅的组,怎么回事?

启动 Gnus 的时候有一个上一问题的提示,对吧?基本是同一个问题,看看
上一问的回答吧。

2.3 如何改变 Group buffer 中的行的格式?

你需要调整变量 gnus-group-line-format 的值。参考手册 “Group Line
Specification”节点中相关信息。例如(某个人的 .gnus 文件中:-)):

(setq gnus-group-line-format "%P%M%S[%5t]%5y : %(%g%)\n")

2.4 我的 group buffer 变得有些拥挤,如何分类?

Gnus 提供了主题模式 (topic mode),允许你把组分类。例如所有关于
Linux 的组都放入 Linux 主题下,关于音乐的放入音乐的主题下,关于
scottish 音乐的放入音乐主题下的 scottish 音乐子题目下。

进入主题模式,在 Group buffer 中按 t。这时可以用 `T n' 在point 位置
创建一个主题,`T m' 移动一个组到某个主题下。其他命令参考手册或者菜
单。 可能你的 gnus-group-line-format 变量需要在开始处放一个%P 标记
符来缩进。

2.5 如何在 Group buffer 中用手来排序?如何排序某个主题下的组啊?

把 point 移动到某个组上,按 `C-k',再移动到想放这个组的地方按`C-y'。



3 用 Gnus 读取邮件和新闻

3.1 刚刚装好 Gnus,并且通过 `M-x gnus' 开启了它,却出现了“nntp (news) open error”,如何处理?

你还没有告诉 Gnus 到哪里去取新闻。参考文档中相应内容。首先需要在~
/.gnus 文件中放入如下的行:

(setq gnus-select-method '(nntp "news.yourprovider.net"))
(setq user-mail-address "you@yourprovider.net")
(setq user-full-name "Your Name")

3.2 我在Windows环境中,~/.gnus是什么意思。

~/ 意思是 home 目录,Gnus 和 Emacs 在这里寻找配置文件。其实不用知道
这些,Emacs 知道如何去做,按 `C-x C-f ~/.gnus RET'(没错,即使在
Windows 上,也可以使用斜线字符),并且 Emacs 会为你打开正确的文件。
(很有可能是个新文件,所以是空的。)可是,我并不推荐你这么做,因为
Emacs 所选择的目录很有可能不是你想要的,因此你可以这样:首先,创建
一个合适的目录(目录名中不要有空格),如 C:\myhome;然后设定一个环
境变量HOME 到这个目录。在 Win9x 或 Me 系统中,在你的 autoexe.bat 文
件中放入如下行后重新启动:

SET HOME=C:\myhome

在 NT、2000 和 XP 系统中,按 Winkey+Pause/Break 进入系统选项(不好
使就在控制面板中找到系统)。这里可以找到设定环境变量,新建一个名字
为 HOME 值为 C:\myhome 的变量,不需要重新启动。

现在在 Emacs 中创建~/.gnus,就是 `C-x C-f ~/.gnus RET C-x C-s'。

3.3 我的新闻服务器需要验证,如何保存用户名和密码?

创建一个文件 ~/.authinfo, 文件中每一个服务器对应如下的行:

machine news.yourprovider.net login YourUserName password YourPassword

如果你的操作系统允许,请确保这个文件对于别的用户来说是不可读的(比
如Unix 中,执行 shell 命令:

chmod 600 ~/.authinfo

3.4 Gnus 好像已经运行起来了,但是我不知道如何订阅一个组。

如果你知道那个组的名字,在 Group buffer 区中输入 `U name.of.group
RET'。否则按字符 ^,转到 Server buffer。把光标移动到有你想要的组的
服务器上,回车,再移动光标到你想订阅的组的名字上,按`u',就订阅了该
组。

3.5 Gnus 不能显示所有组/Gnus说我不允许在这个组上发帖子,为什么?

一些服务提供商限制匿名访问的用户,要在验证之后才可以有完全的访问权
限。为了使 Gnus 总是发送验证信息到这些服务器,在 ~/.authinfo 文件中
这个服务器上那行的行尾加入:

force yes

3.6 我想让 Gnus 在多个的服务器上取新闻,可能吗?

当然。你可以在变量 gnus-secondary-select-methods 中指定多个源。在~
/.gnus 文件中加入类似的行:

(add-to-list 'gnus-secondary-select-methods '(nntp "news.yourSecondProvider.net"))
(add-to-list 'gnus-secondary-select-methods '(nntp "news.yourThirdProvider.net"))

3.7 本地缓冲中的文件呢?

没问题,这只多了一个称为 nnspool 的选择方法(select method),比如:

(add-to-list 'gnus-secondary-select-methods '(nnspool ""))

或者,如果你不想让 NNTP 服务器作为一个主要的新闻源,像这样:

(setq gnus-select-method '(nnspool ""))

Gnus 将在 /usr/spool/news 中寻找缓冲文件,如果不想这样,把这行改为:

(add-to-list 'gnus-secondary-select-methods
'(nnspool "" (nnspool-directory "/usr/local/myspoolddir")))

这样只设定了本地的缓冲目录。或许你需要设定更多的东西,比如发帖子的
程序等等,请参考 Gnus 手册。

3.8 OK,能读新闻,可是我也想用 Gnus 读邮件,怎么做到?

这个有一点困难,因为对于邮件来说,会有许多可能的邮件来源,很多保存
邮件的方法以及不同的发送邮件的方法。最通常的情况是:1、你从一个
pop3 服务器读取邮件而且通过一个 SMTP 邮件服务器发送;2、一些程序比
如Fetchmail 将你的邮件取回,保存在本地磁盘上,Gnus 再从那里读取。
即将发出的邮件是由Sendmail、Postfix 或者其他的 MTA 程序发送的。又使,
你可能需要结合上面的这些情况。

然而,首先需要告诉 Gnus 用哪种方式保存邮件,用 Gnus 的术语来说,就
是“使用哪种后端(Back End)”。Gnus 支持多种后端,最普遍的是 nnml。
它把每一个邮件保存在一个文件中,从而速度很快。如果你的文件系统处理
多个小文件有问题,你更喜欢每个组使用一个文件,那么后端 nnfolder 或
许是你的更好的选择。在 ~/.gnus 中加入如下的行,使用 nnml:

(add-to-list 'gnus-secondary-select-methods '(nnml ""))

使用 nnfolder:

(add-to-list 'gnus-secondary-select-methods '(nnfolder ""))

现在告诉 Gnus 到哪里取邮件。如果是 POP3 服务器:

(eval-after-load "mail-source"
'(add-to-list 'mail-sources '(pop :server "pop.YourProvider.net"
:user "yourUserName"
:password "yourPassword")))

不要让其他用户读到你的密码文件。如果想读取本地机器上的传统邮件:

(eval-after-load "mail-source"
'(add-to-list 'mail-sources '(file :path "/path/to/spool/file")))

如果是一个 Maildir, 像 Postfix Qmail 或者 Fetchmail 等使用的一个文
件一条消息的目录中,这样:

(eval-after-load "mail-source"
'(add-to-list 'mail-sources '(maildir :path "/path/to/Maildir/"
:subdirs ("cur" "new"))))

最后,如果你想从一个目录中读取几个文件,例如由于 Procmail 已经把你
的邮件分割了:

(eval-after-load "mail-source"
'(add-to-list 'mail-sources
'(directory :path "/path/to/procmail-dir/"
:suffix ".prcml")))

这里的 :suffix ".prcml" 告诉 Gnus 仅仅使用带有前缀 .prcml 的文件。

现在你只需要告诉 Gnus 如何发送邮件了。如果你想通过 Sendmail (或者
你的系统中任何的和 Sendmail 同样作用的 MTA 程序),你不需要做任何事。
但是,如果使用一个 SMTP 服务器,需要在 ~/.gnus 加入下面的行:

(setq send-mail-function 'smtpmail-send-it)
(setq message-send-mail-function 'smtpmail-send-it)
(setq smtpmail-default-smtp-server "smtp.yourProvider.net")

3.9 IMAP 怎么处理?

用 Gnus 有两种方法使用 IMAP。一个是如同 POP3 一样来使用 IMAP,就是
说Gnus 从 IMAP 服务器取邮件,保存在磁盘上,如果你想这样(不是真想这
样吧)在 ~/.gnus 中加入:

(add-to-list 'mail-sources '(imap :server "mail.mycorp.com"
:user "username"
:pass "password"
:stream network
:authentication login
:mailbox "INBOX"
:fetchflag "\\Seen"))

或许你不得不改变 stream 和(或)验证的变量的值,其他可能值,请参考
Gnus 手册中,节点 "Mail Source Specifiers"。

如果想使用 IMAP 本身的方式,就得用不同的方法。需要在选择方法中放入
nnimap 后端,并且同时给出服务器的信息。

(add-to-list 'gnus-secondary-select-methods
'(nnimap "Give the baby a name"
(nnimap-address "imap.yourProvider.net")
(nnimap-port 143)
(nnimap-list-pattern "archive.*")))

而且,验证的时候如果 Gnus 没能猜测出正确的方法,你不得不指定清楚,
其中细节请参考手册中 "IMAP" 节点。

3.10 我们的办公室中,使用的是一个 MS Exchange Server,我能用 Gnus 读取
上面的邮件吗?

你可以贿赂你的管理员一双新运动鞋,让他在服务器上开通 IMAP 服务,然
后看上一个问题。

3.11 通过 POP3 取信时,能让 Gnus 不删除服务器上面的邮件吗?

首先,这不是 POP3 服务推荐的使用方式,如果有可能,使用 IMAP 协议以
使你的信息保持在服务器上。你可能正处在需要这个特性的境地,可惜,不
幸的是Gnus 本身没有这个功能。

然而,Gnus 的天地里有其他的可以保存你的消息的方法。最简单的方法是用
一个外部程序来取回你的邮件并存储在本地磁盘上,这样 Gnus 可以从那里
读取。 Unix 系统上,你可以使用,比如 Fetchmail 来达到这个目的,在
MS Windows 系统上,你可以使用 Hamster,一个很好的本地新闻邮件服务器。

其他的解决方法,用一个能够把邮件保持在服务器上的方法替换 Gnus 从
POP3 上面读取邮件的方法。如果你使用的是 XEmacs,可以取得 mail-lib
包,其中包含一个增强的 pop3.el 文件,文件中有如何让 Gnus 使用,并且
不删除已经取得的邮件的方法。GNU Emacs,可以参考 epop3.el 文件,可以
达到同样的目的。也可以让 Gnus 使用外部程序(如 Fetchmail)取邮件,
参看 info 节点Mail Source Specifiers"。

4 阅读消息

4.1 当我进入一个组,所有的已读消息都没有了,我如何再看到它们?

当你通过 `RET' 进入一个 Summary buffer 时,只有未读邮件和标记的邮件
被加载。用 `C-u RET' 来取得所有可用邮件。如果只想读最新的300 个,用
`C-u 300 RET'。

如果开启了主题视图,只看未读邮件是令人讨厌的,在 ~/.gnus 里面加如这
行:

(setq gnus-fetch-old-headers 'some)

可以保留同主体中已读邮件,把 'some 改为t可以下载所有文章(注意:当
你进入某个组的时候,这两个设置,都会增大从服务器读取的数据量,从而
使得这个过程变慢)。

如果你用的是 Gnus 5.10.0,可以在 Summary buffer 中通过 `/o N' 来取
得后 N 个消息,版本 5.8.8 的 Gnus 里面没有这个功能。

不想要所有的就消息,只想要正读的这篇的上一篇,可以用 `^' 来取得;如
果想找回当前主题的全部消息,`A T'。

4.2 如何在每次我进入一个组的时候,让 Gnus 总是显示某个重要的消息,即使
即使是已读的。

重要信息做上 tick 标记。 Summary buffer 中按 `u' 做 tick 标记。 按
`d' 去掉标记(去掉标记,并且设为已读),或者按 `M c' (去掉任何标
记)。

4.3 如何看消息的头信息?

按 `t' 显示所有头信息,再按一下 `t' 隐藏头信息。

4.4 如何查看没有格式的原始信息?

用 `C-u g' 显示未经处理的原始信息,`g' 回到正常状态。

4.5 如何改变 Gnus 在 Article buffer 顶部显示的头信息?

变量 gnus-visible-headers 控制显示哪些头信息,变量值是个正则表达式,
匹配的头信息被显示。因此,如果你想要 author,subject,date,以及如
果存在的 Followup-To 和 MUA / NUA,在 ~/.gnus 中加入:

(setq gnus-visible-headers
"^\\(From:\\|Subject:\\|Date:\\|Followup-To:\\|X-Newsreader:\\|User-Agent:\\|X-Mailer:\\)")

4.6 不想让 Gnus 显示 HTML 邮件,但是如果有,则显示文本部分。如何做到?

在 ~/.gnus 中,这样写:

(eval-after-load "mm-decode"
'(progn
(add-to-list 'mm-discouraged-alternatives "text/html")
(add-to-list 'mm-discouraged-alternatives "text/richtext")))

即使没有文本部分,也不想显示转换的部分,加入这行

(setq mm-automatic-display (remove "text/html" mm-automatic-display))

4.7 除 w3 之外可以用其他的的浏览器显示 HTML 邮件吗?

除非使用 Gnus 5.10.0。这样可以在 w3, w3m, links, lynx 和 html2text
几者之间选择。通过变量 mm-text-html-renderer 指定:

(setq mm-text-html-renderer 'links)

4.8 格式糟糕的邮件有办法更易读吗?

Gnus 提供了几个函数来“清洗(Wash)”收到的邮件,可以通过菜单找到他们,
Article->Washing。最有趣的几个可能是“折长行(Wrap long lines)”(`W
w'),“ROT13解码(Decode ROT13)”(`W r')和“Outlook Deuglify”(`W
k') 这个修复被 Microsoft 产品的很多使用者使用的哑引用,不幸的是这个
只存在于 Gnus 5.10.0 中。

4.9 是否有办法自动的忽略由某个人发的文章或者含有某个词的文章呢?以及我
怎样设置组参数?

你想要的可能是得分(Scoring)。得分的意思是,定义一些规则,给每一个消
息赋一个整数值。根据这个值,在 Summary buffer 中来突出显示(如果分
数高,比如+2000)或者自动标记为已读(如果分数低,比如-800),或者用
其他的方法处理。

给消息赋分值,有三种基本的方法。一个最简单的方法是,基于当前正读的
文章设定一个规则。假设你正在读一个总是写些无用的内容的人的消息,以
后想忽略他的消息。按 `L',设定一条规则,降低得分。Gnus 会问你降低到
什么标准。 按两次 `?',看看所有的可能,我们所要的是作者那个(From
头)。 Gnus 需要知道想要哪种匹配方式。精确匹配按 `e',字串匹配按
`s',删除出名字以外的所有内容。然后设定这个规则使用多长时间,例如按
`p',会一直有效。如果想提高帖子的分数,类似的,按 `I'。

也可以手动设定规则。在 Summary buffer 中按 `V f',会提示输入得分文
件名,仅对一个组有效的为 name.of.group.SCORE,对所有组有效的文件名
为all.SCORE。精确的语法规则参照 Gnus 手册,基本上是一个大的列表
(list),其中元素也是列表,这些列表中的第一个元素是给分的邮件头,之
后的一个或多个列表给出匹配内容和赋予的分数以及时间。例如,如果你对
我很感兴趣,可以在你的 all.Score 文件中加入下面这些行:

(("references" ("hschmi22.userfqdn.rz-online.de" 500 nil s))
("message-id" ("hschmi22.userfqdn.rz-online.de" 999 nil s)))

这个会在我写的消息上加上 999 分,在回应我的消息上加 500 分。当然有
一个健全的大脑的任何人,都不会这么做的,:-)

第三种方法是适应性的给分。意思是 Gnus 观察着你并试图发现你所感兴趣
和讨厌的事情,然后设定规则以反映。当你所读的组的流量很高,适应性给
分可能给你很大帮助。如果想使用这种给分方式:

(setq gnus-use-adaptive-scoring t)

4.10 如何在一些组(比如邮件组)里面取消主题显示,或者如何为指定的组设定
变量?

在 Group buffer 中,移动光标到一个组,按 `G c',开启一个Buffer ,设
置那个组的变量。Buffer 底部,可以找到所有为那个组设定的本地变量。
取消主题显示,到 gnus-show-threads 的变量里面,值设为 nil,结束后按
Buffer 底部的done 按纽。

4.11 我能把自己写的文章和所跟的文章高亮显示吗?

不要在问“我能……”的问题了,在 Gnus 的国度里,回答往往都是 yes,
三步:首先,指定如何显示(摘要行看起来什么样子)那些文章。之后给一
些特别的分数,最后告诉 Gnus 使用新的显示方式。可以在
[http://my.gnus.org/Members/dzimmerm/HowTo%2C2002-07-25%2C1027619165012198456/view]
找到具体细节。

4.12 在一个 Group buffer 中的显示的消息是按照序号由小到大的顺序排列的,
特别是在邮件组里面,这是不是一个bug?

不是。这是 Gnus 的设计,如果修改意味着重新实现 Gnus 的后端的主要部
分。Gnus 认为“highest-article-number - lowest-article-number =
total-number-of-articles”。对于新闻组来说这样没什么问题,但是如果
在邮件组里删除和移动了邮件,就不再成立了。为了避免这种情况,使用
`C-u RET' 进入新闻组(这样 Gnus 会取得所有消息),之后敲 `M P b' 来
标记所有消息,再用`B m name.of.group' 把所有消息移动到原来的组里面,
这样所有消息得到了新的序号,计数正确(直到再次的删除或移动到其他
组)。

4.13 不喜欢 Summary buffer 和 Article buffer 的版面,如何改变?或者三个
窗口的显示?

可以通过调用函数 gnus-add-configuration 来控制窗口的配置。语法有点
复杂,不过在手册 "Windows Layout" 中解释得很清楚,一些比较流行的例
子:

用 35% 的 Summary 比 65% 的 Article 替换原来的 25% 比 75%(其中的
1.0 意思是“占满剩余空间”):

(gnus-add-configuration '(article (vertical 1.0 (summary .35 point) (article 1.0))))

三个窗口显示。左边是 Group buffer,右上是 Summary buffer,右下是
Article buffer:

(gnus-add-configuration
'(article
(horizontal 1.0
(vertical 25
(group 1.0))
(vertical 1.0
(summary 0.25 point)
(article 1.0)))))
(gnus-add-configuration
'(summary
(horizontal 1.0
(vertical 25
(group 1.0))
(vertical 1.0
(summary 1.0 point)))))

4.14 不喜欢 Summary buffer 的样子,如何调整?

那么你需要和变量 gnus-summary-line-format 玩一玩,它得值是一个符号
串,比如作者,日期,主题等。手册 "Summary Buffer Lines" 中有可用的
符号列表和常被忘记的节点 "Formatting Variables" 和它的子节点。其中
有很多有用的东西,像指定光标和制表符的位置等。

从 5.10.0 起,Gnus 新提供了一些很不错的标志符,例如,%B 可以形成一
个线索树,%&user-date 根据帖子给出时间细节。例子如下:

(setq gnus-summary-line-format ":%U%R %B %s %-60=|%4L |%-20,20f |%&user-date; \n")

得到:

:O Re: [Richard Stallman] rfc2047.el | 13 |Lars Magne Ingebrigt |Sat 23:06
:O Re: Revival of the ding-patches list | 13 |Lars Magne Ingebrigt |Sat 23:12
:R > Re: Find correct list of articles for a gro| 25 |Lars Magne Ingebrigt |Sat 23:16
:O \-> ... | 21 |Kai Grossjohann | 0:01
:R > Re: Cry for help: deuglify.el - moving stuf| 28 |Lars Magne Ingebrigt |Sat 23:34
:O \-> ... | 115 |Raymond Scholz | 1:24
:O \-> ... | 19 |Lars Magne Ingebrigt |15:33
:O Slow mailing list | 13 |Lars Magne Ingebrigt |Sat 23:49
:O Re: `@' mark not documented | 13 |Lars Magne Ingebrigt |Sat 23:50
:R > Re: Gnus still doesn't count messages prope| 23 |Lars Magne Ingebrigt |Sat 23:57
:O \-> ... | 18 |Kai Grossjohann | 0:35
:O \-> ... | 13 |Lars Magne Ingebrigt | 0:56

4.15 如何把邮件分为几个组?

Gnus 提供了两种分类邮件方法,简单的 nnmail-split-methods 和功能强大
的Fancy Mail Splitting。这里只介绍前者,后者请参考手册中"Fancy
Mail Splitting"一节。

nnmail-split-methods 的值是一个列表,其中每个元素是表示分割的规则。
每个规则的形如 "匹配的邮件的去处", "正则表达式",逐次匹配。最后一条
规则一定总是通用规则(正则表达式 .*),指明如果规则都没有匹配,邮件
应该到哪里。 如果邮件到来是相应目录不存在,会立即创建。几个规则同
时匹配,缺省是放入所有匹配的组里面。如果不想这样:

(setq nnmail-crosspost nil)

放入 ~/.gnus。

举个例子胜过千言,这里是我的 nnmail-split-methods。注意我把复本放入
特殊的组中的,缺省的组是垃圾组(spam),因为此前我滤出一些订阅的列表
或直接发送给我的所有邮件。这些规则去除了大约 80% 垃圾邮件(例子中的
地址已经做了改动,为防止被垃圾邮件爱好者看到):

(setq nnmail-split-methods
'(("duplicates" "^Gnus-Warning:.*duplicate")
("XEmacs-NT" "^\\(To:\\|CC:\\).*localpart@xemacs.bla.*")
("Gnus-Tut" "^\\(To:\\|CC:\\).*localpart@socha.bla.*")
("tcsh" "^\\(To:\\|CC:\\).*localpart@mx.gw.bla.*")
("BAfH" "^\\(To:\\|CC:\\).*localpart@.*uni-muenchen.bla.*")
("Hamster-src" "^\\(CC:\\|To:\\).*hamster-sourcen@yahoogroups.\\(de\\|com\\).*")
("Tagesschau" "^From: tagesschau <localpart@www.tagesschau.bla>$")
("Replies" "^\\(CC:\\|To:\\).*localpart@Frank-Schmitt.bla.*")
("EK" "^From:.*\\(localpart@privateprovider.bla\\|localpart@workplace.bla\\).*")
("Spam" "^Content-Type:.*\\(ks_c_5601-1987\\|EUC-KR\\|big5\\|iso-2022-jp\\).*")
("Spam" "^Subject:.*\\(This really work\\|XINGA\\|ADV:\\|XXX\\|adult\\|sex\\).*")
("Spam" "^Subject:.*\\(\=\?ks_c_5601-1987\?\\|\=\?euc-kr\?\\|\=\?big5\?\\).*")
("Spam" "^X-Mailer:\\(.*BulkMailer.*\\|.*MIME::Lite.*\\|\\)")
("Spam" "^X-Mailer:\\(.*CyberCreek Avalanche\\|.*http\:\/\/GetResponse\.com\\)")
("Spam" "^From:.*\\(verizon\.net\\|prontomail\.com\\|money\\|ConsumerDirect\\).*")
("Spam" "^Delivered-To: GMX delivery to spamtrap@gmx.bla$")
("Spam" "^Received: from link2buy.com")
("Spam" "^CC: .*azzrael@t-online.bla")
("Spam" "^X-Mailer-Version: 1.50 BETA")
("Uni" "^\\(CC:\\|To:\\).*localpart@uni-koblenz.bla.*")
("Inbox" "^\\(CC:\\|To:\\).*\\(my\ name\\|address@one.bla\\|adress@two.bla\\)")
("Spam" "")))

5 写消息

5.1 需要掌握的发送邮件和贴帖子的基本命令都有哪些?

在 Group buffer 或者 Summery buffer 中按 `m' 可以开启一个新的邮件;
按 `a' 开启新帖子,Group buffer 中按 `a' 需要填写组名,Summery
buffer 中则不用。回复邮件时,用 `r' 没有引文回复,用`R' 则引用原文。
跟贴(相应于 `r' 和 `R')为 `f' 和`F'。

写有 "--text follows this line --" 行之上写入头信息,其下写内容。
写完之后按 `C-c C-c' 来发送消息,想过一会儿再写完,按 `C-c C-d' 保
存到草稿组,之后可以到那里用 `D e' 继续编辑。

5.2 写消息时如何打开自动折行 (word-wrap) ?

~/.gnus 中这样写:

(add-hook 'message-mode-hook
(lambda ()
(setq fill-column 72)
(turn-on-auto-fill)))

也可以和通常一样使用 `M-q'。

5.3 如何设定这些东西:From, Organization, Reply-to, signature...?

除了下面这个需要用 posting styles 的方法外,也有其他方法。这个例子
可以做个语法参考:

(setq gnus-posting-styles
'((".*"
(name "Frank Schmitt")
(address "me@there.bla")
(organization "Hamme net, kren mer och nimmi")
(signature-file "~/.signature")
("X-SampleHeader" "foobar")
(eval (setq some-variable "Foo bar")))))

其中的 ".*" 意思是这些设定为缺省值,其后列表中的第一个元素的有效值
有signature,signature-file,organization,address,name 或者body。
属性名也可以是字符串,这时,被作为邮件头的名,其值被写入贴子的头中;
如果值为nil,该头被去掉。也可以是 (eval (foo bar)) 形式,此时,将以
参数 bar 调用函数 foo 并且抛弃其结果。

5.4 可以根据组名来设定不同的 Form, Signature 等等吗?

正是 posting styles 的能力所在。前面,我们用 ".*" 设定了对所有组的
缺省值。你可以通过如 "^gmane" 的正则表达式来和其后的设置来设定投到
gmane 层下的帖子,用 ".*binaries" 设定投到包含有 binaries 的组的帖
子。

也可以用一个将被求值的函数代替正则表达式,仅当返回真时,相应设置有
效。两个有用的候选函数是 message-news-p 和 message-mail-p,分别在发
帖子和邮件时为真。

注意所有匹配的项都会被应用,就是说,下面这个例子中,如果我发了一个
到gmane.mail.spam.spamassassin.generate 的帖子,".*"中的设置、
"^gmane" 中的以及 message-mail-p 和 "^gmane\\.mail\\...."中的设置都
被应用。正因为如此,把一般性的规则放在上面,特别的放在下面。

(setq gnus-posting-styles
'((".*" ;;default
(name "Frank Schmitt")
(organization "Hamme net, kren mer och nimmi")
(signature-file "~/.signature") )
((message-news-p) ;;Usenet news?
(address "mySpamTrap@Frank-Schmitt.bla")
("Reply-To" "hereRealRepliesOnlyPlease@Frank-Schmitt.bla"))
((message-mail-p) ;;mail?
(address "usedForMails@Frank-Schmitt.bla") )
("^gmane" ;;this is mail, too in fact
(address "usedForMails@Frank-Schmitt.net")
("Reply-To" nil) )
("^gmane.mail.spam.spamassassin.general$"
(eval (setq mail-envelope-from "Azzrael@rz-online.de"))
(address "Azzrael@rz-online.de")) ))

5.5 有没有拼写检查器?甚至 on-the-fly 拼写检查?

你可以使用 Emacs 中的 ispell.el 来进行拼写检查。首先确定你已经安装
了二者之一:ispell
(http://fmg-www.cs.ucla.edu/fmg-members/geoff/ispell.html) 或这
aspell (http://aspell.sourceforge.net/) 。其次需要ispell.el
(http://www.kdstevens.com/~stevens/ispell-page.html) 来进行
on-the-fly 拼写检查。 flyspell.el
(http://www-sop.inria.fr/mimosa/personnel/Manuel.Serrano/flyspell/flyspell.html).
Ispell.el 是 Gnus Emacs 的一部分,而且可以从 Emacs 的 package
system 中得到, flyspell.el 也是 Emacs 的一部分,而且是 XEmacs
text-modes package 中的一部分,可以从 package system 中得到。因此,
不需要你自己来手工安装。

Ispell.el 假设你使用 ispell,如果你用的是 aspell,在你的 Emacs 配置
(~/.emacs) 文件中这样写:

(setq ispell-program-name "aspell")

如果你想检查你发出的消息,在你的 ~/.gnus 中这么写:

(add-hook 'message-send-hook 'ispell-message)

如果你喜欢 on-the-fly 拼写检查:

(add-hook 'message-mode-hook (lambda () (flyspell-mode 1)))

5.6 可以设置所投递的组相应的字典吗?

是的,~/.gnus 中差不多这样:

(add-hook 'gnus-select-group-hook
(lambda ()
(cond
((string-match
"^de\\." (gnus-group-real-name gnus-newsgroup-name))
(ispell-change-dictionary "deutsch8"))
(t
(ispell-change-dictionary "english")))))

当然,把 "^de\\." 和 "deutsch8" 改成你想要的。

5.7 有没有类似于地址簿的东西,我就不必记忆太多地址了?

最基本的解决方法,是 mail aliases。把你的地址用如下格式保存到~
/.mailrc 文件:

alias al "Al <al@english-heritage.bla>"

在 message buffer 中 在 To: 或 Cc: 之后按你(所设置)的别名,接着空
格或标点,gnus 则会给你自动插入完全的地址。细节请参考 Message (不
是Gnus )手册,"Mail Alliases"一节。

可是,你真正想要的可能是 Insidious Big Brother Database bbdb. 可以
从XEmacs 的 package system 或bbdb's homepage
(http://bbdb.sourceforge.net/) 得到。之后在~/.gnus 为 Gnus 启动
bbdb:

(require 'bbdb)
(bbdb-initialize 'gnus 'message)

现在,你可能需要一个通用的 bbdb 配置,把这些放入 ~/.emacs 中:

(require 'bbdb)
;;If you don't live in Northern America, you should disable the
;;syntax check for telephone numbers by saying
(setq bbdb-north-american-phone-numbers-p nil)
;;Tell bbdb about your email address:
(setq bbdb-user-mail-names
(regexp-opt '("Your.Email@here.bla"
"Your.other@mail.there.bla")))
;;cycling while completing email addresses
(setq bbdb-complete-name-allow-cycling t)
;;No popup-buffers
(setq bbdb-use-pop-up nil)

你已经准备好了。`M-x bbdb RET RET' 打开一个显示所有记录的缓冲。
`c' 创建新记录,`b' 搜索,`C-o' 在某条记录上添加新域。 Summary
buffer 中,如果想把某个发送者加入到 bbdb,按 `:'就可以。写邮件时,
按 `TAB' 可以在已知的收件人里循环。

5.8 有时候在 Article buffer 顶部有个小小的图片,是什么?我发的帖子如何加上?

那些图片称为 X-Face,是一些 48*48 的黑白图片,被编码为一行邮件头
(header line),如果你也想加一个,需要把图片转换X-Face。用一个图片处
理程序(比如 gimp),打开你想要的图片,剪切相应部分,将颜色降低为
1bit,改变大小到 48*48,另存为位图(bitmap)。从this site
(ftp://ftp.cs.indiana.edu:/pub/faces/) 取来 compface 包,通过如下命
令,创建一个 X-face:

cat file.xbm | xbm2ikon |compface > file.face
cat ./file.face | sed 's/\\/\\\\/g' | sed 's/\"/\\\"/g' > ./file.face.quoted

如果不能使用 compface,还有另一个 X-face 转换器:
http://www.dairiki.org/xface/. 如果在MS Windows 上,也可以用
WinFace 程序:http://www.xs4all.nl/~walterln/winface/. 然后只需要
在 ~/.gnus 中告诉Gnus 在你的帖子里面加入 X-face:

(setq message-default-headers
(with-temp-buffer
(insert "X-Face: ")
(insert-file-contents "~/.xemacs/xface")
(buffer-string)))

5.9 在新闻组中,有时候想按 f 却按了 r。当我在新闻组中的时候通过邮件回复
的时候,Gnus 能否警告一下?

放到 ~/.gnus:

(setq gnus-confirm-mail-reply-to-news t)

不过,这是在 Gnus 5.10 中。如果你用的还是 5.8.8 或 5.9 试试这个:

(defadvice gnus-summary-reply (around reply-in-news activate)
(interactive)
(when (or (not (gnus-news-group-p gnus-newsgroup-name))
(y-or-n-p "Really reply? "))
ad-do-it))

5.10 如何让 Gnus 不要产生 sender header?

Gnus 从 5.10.0 起,缺省不再产生 sender header。对于旧版本的 Gnus,
在~/.gnus 中这样:

(eval-after-load "message"
'(add-to-list 'message-syntax-checks '(sender . disabled)))

5.11 如何在本地保存我发送的邮件和帖子的复本?

通过设置变量 gnus-message-archive-group 来达到目的。可以设为一个保
留复本的组名的字串或如下所示,用一个函数来返回所用的组名。

(setq gnus-message-archive-group
'((if (message-news-p)
"nnml:Send-News"
"nnml:Send-Mail")))

5.12 有人告诉我说,我的 Message-ID 不正确,为什么,如何修改?

Message-ID 是你所发送的消息的唯一的标志符。为了使其唯一,Gnus 需要
知道用来放在 "@" 后的你的机器名。如果运行 Gnus 的机器的名字并不恰当,
你可以告诉 Gnus 用什么名字:

(defun message-make-message-id()
(concat "<"(message-unique-id)"@yourmachine.yourdomain.tld>"))

如果你也不知道 "yourmachine.yourdomain.tld" 这个地方该放什么。有几
个办法,问问你的供应商他是否允许你使用诸如
yourUserName.userfqdn.provider.net 的名字。或者到免费提供 FQDN 的地
方注册一个,例如:
http://www.stura.tu-freiberg.de/~dlx/addfqdn.html。(可惜这个是德文
的,如果你知道那个类似的英文站点,给我丢个条。)

当然,也可以告诉 Gnus 不要产生 Message-ID (让服务器去做吧):

(setq message-required-news-headers
(remove' Message-ID message-required-news-headers))

也可以不让 Gnus 产生邮件的 Message-ID:

(setq message-required-mail-headers
(remove' Message-ID message-required-mail-headers))

然而,一些邮件服务器也不能产生适当的 Message-ID,给自己发个邮件,看
看Message-ID,测试一下你的邮件服务器是否工作良好。

6 处理旧消息

6.1 如何把我的旧邮件引入 Gnus?

最简单的是让你原来的邮件程序把信件导出为 mbox 格式。多数 Unix 邮件
程序都可以做到,如果你来自 MS Windows 世界,或许能在这里找到工具:
http://mbx2mbox.sourceforge.net/ 。

现在需要把 mbox 文件引入 Gnus。因此,需要在 Group buffer 通过`G f
/path/file.mbox RET' 创建一个基于这个 mbox 文件的 nndoc 组。 此时,你
可以只读访问你的邮件。如果想把这些放入通常的 Gnus 邮件组中,用`C-u
RET'进入刚刚建的 nndoc 组(这样可以看到所有邮件),标记所有邮件`M P b',
`B c name.of.group RET',复制到某个邮件组,或者用`B r'通过
nnmail-split-methods (respool) 分类邮件。

6.2 如何存档有趣的消息?

例如在 gnu.emacs.gnus 中,你偶然发现一个有趣的消息,想要存档,有好
几种方法。第一种,也是最简单的,另存为文件`O f'。但是,从 Gnus 访问
这样的存档文件并不方便。把 Frank Haun <pille3003@fhaun.de> 的这个代
码片断放入 ~/.gnus:

(defun my-archive-article (&optional n)
"Copies one or more article(s) to a corresponding `nnml:' group, e.g.
`gnus.ding' goes to `nnml:1.gnus.ding'. And `nnml:List-gnus.ding' goes
to `nnml:1.List-gnus-ding'.

Use process marks or mark a region in the summary buffer to archive
more then one article."
(interactive "P")
(let ((archive-name
(format "nnml:1.%s"
(if (featurep 'xemacs)
(replace-in-string gnus-newsgroup-name "^.*:" "")
(replace-regexp-in-string "^.*:" "" gnus-newsgroup-name)))))
(gnus-summary-copy-article n archive-name)))

此时,可以在 summary buffer 中用 `M-x my-archive-article' 把光标处
的文章存档到一个 nnml 组(当然,可以改为你想要的其他后端)。

当然,也可以使用缓冲:

(setq gnus-use-cache t)

这样,你只需设置 tick 或者 dormant 标记来保存,在缓冲中设置已读标记
可以删除(文章)。

6.3 如何搜索特定的消息?

也是有几种方法。Usenet 上的帖子,最简单的可能是访问
http://groups.google.com,如果在那儿找到了帖子,显示原始内容查看
message-id,之后在 Summary buffer 中 `M-^ the@message.id RET'。
Gnus 5.10.0 之后Gnus 也有了一个 groups.google.com 的界面,Group
buffer 中 `G W' 来启动。

另一种方法,对于 mail 和 news 组都有效,进入一个组中,用 Emacs 的标
准搜索命令 `C-s',也可以查看相应线索。如果想搜索文章内容,不妨试试
`M-s'。还有 gnus-summary-limit-to-foo 系列的函数也可能有用。

你可以用 grep 搜索你的本地邮件,但对于大的存档可能即慢又不方便,
因为不能在 Gnus 中显示找到的邮件。使用 nnir。nnir 是一个 swish-e 或
swish++ 之类的搜索引擎的前端。你可以给你的邮件用那些搜索引擎之一来
建立索引,借助 nnir 来搜索邮件,产生一个暂时的存放被搜索到的邮件的
组。如果挺起来很cool,取 nnir.el 自
ftp://ls6-ftp.cs.uni-dortmund.de/pub/src/emacs/或
ftp://ftp.is.informatik.uni-duisburg.de/pub/src/emacs/。 使用方法
在这个文件的开始处。

6.4 如何删除不想要的邮件?

你当然可以用 `#' 标记上不想要的文件再 `B DEL' 永久删除。 你也可以
用 `B m nnml:trash-bin' 把它们放到一个可以随时删除的垃圾组。 但是,
这两种都不是 Gnus 中建议的方法。

Gnus 中,我们让邮件如同帖子在新闻组服务器上一样过期。这意味着,在
summary buffer中,用 `E',告诉 Gnus 光标处这个消息过期的。当你离开
这个组的时候,Gnus 检查所有的被标记为过期的消息,如果足够 old(缺省
一星期),则删除。

6.5 我想所有已读消息都是过期的(至少一些组里这样),如何做?

如果你想所有已读消息为过期的(例如,在有存档的邮件列表组里),两个
选择:auto-expire和total-expire。Auto-expire意味着,所有的没有标记
并已经阅读了的邮件标记为过期的,Gnus 在你每次阅读一个消息的时候,为
你按一下`E'。Total-expire稍有不同,所有的有已读标记的消息标记为过期。

使用 auto-expire,在组参数(Group parameter)里设置上 auto-expire
(summary buffer 中在这个组上按 `G c')。Total-expire 同样。

选择哪个,只是你的喜好。Auto-expire更快些,但不能配合自适应赋分
(adaptive scoring),如果需要,则要用 total-expire。

如果自动或全部过期已经启用,却需要取消某个消息过期标记,通过设置一
个tick 标记(`u')或 dorman 标记(`?')。如果用的是auto-expire,也
可以通过设已读标记(`d')。

6.6 我不想删除已过期的邮件,只想转移到另一个组。

在 ~/.gnus 中如下写:

(setq nnmail-expiry-target "nnml:expired")

(如果想改变 nnmail-expiry-target 基于组的,参看问题“如何取消一些(例
如邮件的)组,或为这些组设置其他变量?”)

7 拨号时用 Gnus

7.1 我这里不是始终在线的,如何使得我的连接时间最小?

基本上,两种选择:或者使用 Gnus Agent(见下文),或者安装可以取新闻
和邮件到本地磁盘的程序,让 Gnus 在本地读取。

如果想用第二种方法,需要一个能够取的新闻并能够提供给 Gnus 的程序,
一个类似的邮件程序,而且能够在你连线的时候发送你的消息。

先来说说 Unix 系统:新闻部分,最简单的办法是一个小的 nntp 服务器,
比如:Leafnode (http://www.leafnode.org/) 或sn
(http://infa.abo.fi/~patrik/sn/),当然,也可以安装一个功能齐全的新
闻服务器,比如:inn (http://www.isc.org/products/INN/)。 然后,取
邮件,流行的是:fetchmail (http://www.catb.org/~esr/fetchmail/) 和
getmail (http://www.qcc.ca/~charlesc/software/getmail-3.0/). 告诉
他们把邮件送到本地磁盘,Gnus则可以从那里读取。最后,不是必须的,发
送邮件部分:每个MTA 都可以sendmail (http://www.sendmail.org/),
postfix (http://www.qmail.org/),exim (http://www.exim.org/) 或
qmail (http://www.qmail.org/)。

Windows 机器上,我推荐:Hamster (http://www.tglsoft.de/), 这是一个
免费的,开放源码的小软件,可以从远端取邮件和新闻,并通过 nntp 以及POP3
或 IMAP 提供给 Gnus (或者其他任何邮件和/或新闻客户端)。它也包括一个
smtp 服务器,能够从 Gnus 接收邮件。

7.2 那么,Gnus Agent 如何呢?

Gnus Agent 是 Gnus 的一部分,可以把新闻和邮件取到本地,以后离线阅读。
它是像 Fort Agent 一样的离线新闻组客户端的模仿。如果你用的是 5.8.8
或 5.9,在 ~/.gnus 中加下面这行,如果是 5.10.0,这已经是缺省的:

(setq gnus-agent t)

选择哪些服务器可以被存储到本地。在 Group buffer 用 `^' 打开Server
buffer,移动光标选中一个服务器。最后,用代理管理这个服务器,按`J
a'。如果弄错了,或者改变主意了,用 `J r' 来撤销。按 'q' 回到 Group
buffer。下次进入一个代理管理的服务器中的组时,消息头将被存储到本地
磁盘,再下次再进这个组时,将从这里读取。

7.3 如果也想把消息保存在本地呢?

你可以让代理自动的取得满足一定谓词条件的帖子,这些在一个特别的组里
面完成,可以从 Group buffer 中通过 `J c' 转到。哪个谓词合适,如何做
到等内容请参考文档。

还有,可以手动告诉 Gnus 保存那个帖子。两种方法:其一,在 Summary
buffer 中,在需要保存的帖子上做 process 标记(`#')后,按`J s'。其
二,还是在 Summary buffer 中设置 downloadable 标记 (%)(用`@')后,
按 `J u'。有什么不同呢?process 标记在你退出这个组的时候就没了,而
downloadable 标记是永久的。你实际上可以在几个组里面设置
downloadable 标记,然后用取片断(Group buffer 中'J s' )取得所有那
些邮件。唯一的缺点,取片断要取得每个被选中的组的所有消息头。依其组
的大小,第一次或许会很长时间。

7.4 离线时如何不让 Gnus 发送邮件/帖子?

你所需做的只是要告诉 Gnus 你什么时候在线(plugged)和不在线
(unplugged),其他的都是自动的。Group buffer 中用 `J j' 转换
plugged/unplugged 状态。开始 Gnus 时,用 `M-x gnus-unplugged' 代替
`M-x gnus'。 注意,Gnus agent 需要已启用。

8 需要帮助

8.1 如何在 Emacs 中找到信息和帮助?

首先,应该是 Gnus 手册,从 `C-h i d m Gnus RET' 开始。完全的搜索,
用 `s'。其次,通用的以 C-h 开始的 Emacs 帮助命令,按`C-h ? ?' 可
以得到一个命令列表及其含义。最后,`M-x apropos-command' 可以从所有
命令中搜索,`M-x apropos'搜索绑定的变量。

8.2 如何在 Gnus 手册中找到某某内容(例如,附件,PGP,MIME……),没有文档?

不是只有 Gnus 手册,还有 message 手册,emacs-mime 手册,sieve 手册
以及pgg 手册。这些都作为 Gnus 的一部分一并发布,因为不是 Gnus 的核
心部分,所以都被放在不同的文档中,不过,你也应该看看这些文档。

8.3 应该知道哪些网站?

两个最重要的是:official Gnus website (http://www.gnus.org)。 以及
其姐妹站:my.gnus.org (MGO) (http://my.gnus.org)。这里放着lisp 片断
的存档,howtos,一个(并未完成)的tutorial,和这个faq。

告诉我其它有趣的站点。

8.4 有那些邮件列表和新闻组呢?

新闻组 gnu.emacs.gnus 讨论一般问题,ding 邮件列表(ding@gnus.org),
讨论 Gnus 的开发。你可以通过 nntp 阅读这个列表,在 news.gnus.org 上
的gnus.ding 组。

如果你想呆在 big8 中,news.software.newssreaders中也有 Gnus 用户
(但是,上面的组里面得到有用帮助的机会更多)。如果你用德语,还有
de.comm.software.gnus。

8.5 向什么地方报告bug?

`M-x gnus-bug',开启一个到gnus bug mailing list
(mailto:bugs@gnus.org) 的消息,已经包含有你的环境信息,使你报告
bug 变得容易些。。

8.6 如果需要一个实时的帮助,如何得到?

把你的 IRC 客户端设置到 irc.my.gnus.org 上的 #mygnus 频道。不要担心
那些说德语的人,当有人从别处来他们都愿意并且能够转为英语。

9 调整 Gnus

9.1 开始 Gnus,真的很慢,如何快些?

原因可能是 Gnus 读取它的 active 文件的方式,参考 Gnus 手册中 "The
Active File" 一节,你可能能够加快这一过程。还有个方法,编译你的~
/.gnus (`M-x byte-compile-file RET ~/.gnus RET')。还有,如果你在
.gnus 中使用了 require 语句,可以用 eval-after-load 来替换,此时这
些并不在启动时设置,而是在加载相应的文件时。比如,你的 ~/.gnus 中有:

(require 'message)
(add-to-list 'message-syntax-checks '(sender . disabled))

此时,一起动Gnus,message.el便被加载。如果换为:

(eval-after-load "message"
'(add-to-list 'message-syntax-checks '(sender . disabled)))

只在需要的时候加载。

9.2 如何加快进入某个组的速度?

速度的杀手是设置了变量 gnus-fetch-old-headers 为除 nil 以外的任何值。
如果速度是个问题,不要这么设置。加快 summary 可以通过在 ~/.gnus 文
件底部写这行:

(gnus-compile)

这使得 gnus 编译一些东西,比如 gnus-summary-line-format。然后,你还
可以减少 gc-cons-threshold 的值:

(setq gc-cons-threshold 3500000)

如果不介意 CJK 字符的宽度,或者用 Gnus 5.10.0 和新的 GNU Emacs:

(setq gnus-use-correct-string-widths nil)

(感谢Jesper后两个建议)。如果你是仍然使用 5.8.8 或 5.9 的,并且体验
到了产生 summary buffer 时速度的问题,还是升级到 5.10 吧,因为在这
个上面却有一些改进。

9.3 发送邮件变得越来越慢,怎么了?

可能因为你通过 gnus-message-archive-group 让 Gnus 存档消息了。 试
试用一个 nnml 组代替存档组,这样就会回到正常速度的。


术语表
~/.gnus
~/.gnus 是你的 Gnus 的配置文件,你可以称其为 ~/.gnus.el,或其
他的名字。

后端(Back End)
Gnus 的术语中,一个后端就是一个虚拟服务器,介于 Gnus 核心和实
际的提供给Gnus 标准的界面函数之,如 "get message" 或 "get
Header" 等的NNTP, POP3, IMAP 或任何服务器之间的一层。。

Emacs
这份 FAQ 中所提到的 Emacs,都指 GNU Emacs 或 XEmacs.

消息(Message)
这份 FAQ 中的一个消息(message)意味着一个邮件或者发送(张贴)到
Usenet 新闻组上或某些后端的帖子,无所谓什么后端。

MUA
MUA 是 Mail User Agent 的缩写,用来读写邮件的程序。

NUA
NUA 是 News User Agent 的缩写,用来读写新闻组的程序。

0 0
原创粉丝点击