Skip to content

Commit a59787e

Browse files
authored
Merge pull request #8 from LdBeth/master
Add WanderLust
2 parents 76db44a + ade0351 commit a59787e

File tree

1 file changed

+358
-0
lines changed

1 file changed

+358
-0
lines changed
+358
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,358 @@
1+
#+TITLE: WanderLust
2+
#+AUTHOR: LdBeth
3+
#+STARTUP: showall
4+
5+
#+begin_quote
6+
All mail clients suck. -cira, the author of another mail client, mutt
7+
#+end_quote
8+
9+
#+begin_quote
10+
但是后来我发现其它 email 程序都有某种我不喜欢的怪毛病。-- 《Mutt 使用指南》
11+
#+end_quote
12+
13+
* 目录 :TOC:
14+
- [[#简介][简介]]
15+
- [[#wanderlust-的特点][WanderLust 的特点]]
16+
- [[#超强的信件分类功能][超强的信件分类功能]]
17+
- [[#信件打分排序功能][信件打分排序功能]]
18+
- [[#几乎任意条件的彩色设置][几乎任意条件的彩色设置]]
19+
- [[#可以随意绑定热键][可以随意绑定热键]]
20+
- [[#设置条件挂钩][设置条件挂钩]]
21+
- [[#批量邮件处理][批量邮件处理]]
22+
- [[#_任选编辑器_][_任选编辑器_]]
23+
- [[#高级的-mime-支持][高级的 MIME 支持]]
24+
- [[#支持-pgp-加密][支持 PGP 加密]]
25+
- [[#_mutt_-wanderlust-是免费的][_Mutt_ WanderLust 是免费的]]
26+
- [[#开始][开始]]
27+
- [[#配置收信方式][配置收信方式]]
28+
- [[#一个相对复杂的范例][一个相对复杂的范例]]
29+
- [[#举例][举例]]
30+
- [[#配置发信方式][配置发信方式]]
31+
- [[#使用内置-smtp-发信][使用内置 SMTP 发信]]
32+
- [[#使用-sendmailmsmtp][使用 =sendmail/msmtp=]]
33+
- [[#maildir-设置][MailDir 设置]]
34+
- [[#faq][FAQ]]
35+
- [[#密码][密码]]
36+
- [[#邮件头显示了一大堆乱七八糟的东西][邮件头显示了一大堆乱七八糟的东西]]
37+
- [[#如何在读信时显示邮件列表][如何在读信时显示邮件列表]]
38+
- [[#自动删除邮件和自动归类邮件][自动删除邮件和自动归类邮件]]
39+
- [[#如何插入附件][如何插入附件]]
40+
- [[#如何利用-org-mode-发送-html-邮件][如何利用 Org-mode 发送 html 邮件]]
41+
42+
* 简介
43+
WanderLust 是一个完全用 Emacs Lisp 实现的一个不需要在 Emacs 之外进行配置的邮件客
44+
户端。难能可贵的是,即使作为和 GNUS 同样的一个单线程应用,IMAP 收信速度仍然碾压
45+
绝大部分其它客户端。
46+
47+
和 Mew 一样,这个包最早是由日本人构建的,所以不需要额外配置字体就能正常显示中文。
48+
同时 WanderLust 也支持 NNTP,MailDir,POP,RSS 等多种协议。
49+
50+
兼顾了 GNUS 的纯 Emacs Lisp 实现和 Mew 的 IMAP 优化、强大的邮件分类功能,同时
51+
还具备一个优秀的邮箱界面,这就是 WanderLust。
52+
53+
为了向《Mutt 使用指南》致敬,我在这里列出了一些不错的特性。
54+
55+
** WanderLust 的特点
56+
WanderLust 具有以下特点:
57+
58+
*** 超强的信件分类功能
59+
这也是和 Mew/Mutt 相似的地方。
60+
61+
*** 信件打分排序功能
62+
令人惊讶的是,和 Mutt 一样,它也有这种功能。
63+
64+
*** 几乎任意条件的彩色设置
65+
是的。
66+
67+
*** 可以随意绑定热键
68+
因为你在用 Emacs!
69+
70+
*** 设置条件挂钩
71+
同样这也仰仗于 Emacs。
72+
73+
*** 批量邮件处理
74+
当然可以了!
75+
76+
*** _任选编辑器_
77+
额,这个好像做不到。不过你用的 Emacs 已经是最好的编辑器(为了防止被打我得加个
78+
“之一”)了,而且你也可以用 Evil。
79+
80+
*** 高级的 MIME 支持
81+
WangderLust 依赖于用 Emacs Lisp 实现的 MIME,能够很好地处理各种文件。
82+
83+
*** 支持 PGP 加密
84+
我得说 Emacs 本来就支持。你可以用 =mailcrypt= 来用 GPG 加密邮件。
85+
86+
*** _Mutt_ WanderLust 是免费的
87+
听了上面那么多好处之后,还有比这更好的消息吗?
88+
89+
90+
* 开始
91+
好吧,实际上这个插件极度缺少说明,你几乎无法找到任何介绍这个包的中文资料,甚至
92+
英文资料也几乎仅限于 EmacsWiki 上模糊不清的几段说明。
93+
94+
但是至少有自带的 Emacs Manual 可以看。据说日文版的使用手册比英文版的还要详细一
95+
点。
96+
97+
因为这个包可以直接在 melpa 上找到,安装部分就略过。唯一值得注意的是因为依赖包
98+
比较多,可能要重启几次 Emacs 才能保证安装成功。
99+
100+
然后,和 Mew 一样,记得在 =init.el= 里面加几行:
101+
102+
#+begin_src emacs-lisp
103+
(if (boundp 'mail-user-agent)
104+
(setq mail-user-agent 'wl-user-agent))
105+
(if (fboundp 'define-mail-user-agent)
106+
(define-mail-user-agent
107+
'wl-user-agent
108+
'wl-user-agent-compose
109+
'wl-draft-send
110+
'wl-draft-kill
111+
'mail-send-hook))
112+
#+end_src
113+
114+
115+
* 配置收信方式
116+
WanderLust 用 =~/.folders= 来配置收信方式。非常令人无语的是,这个文件是
117+
unix-rc 格式的。但是不要被吓退,其实这是很容易弄懂的。
118+
119+
#+begin_src conf-unix
120+
%INBOX:johndoe/[email protected]:993! "收件箱"
121+
INBOX {
122+
%INBOX/Family:johndoe/[email protected]:993! "家庭"
123+
%INBOX/Work:johndoe/[email protected]:993! "工作"
124+
Work {
125+
.inbox "Bug Reports"
126+
}
127+
}
128+
#+end_src
129+
130+
明白了吗?这就是一个邮箱入口列表了,用不同的标记来告诉 WanderLust 到哪里取邮件。
131+
=%= 表示 IMAP 信箱, =.= 表示本地 MailDir 格式的信箱, =&= 表示 POP 信箱。这甚
132+
至比用 Emacs Lisp 配置还要直观,让我想起了用 Org-mode 来配置 RSS Feeds 的
133+
=org-elfeed= 。(说实话我觉得 elfeed 的中文支持差爆了,甚至还不如那个性能比较
134+
低的 newsticker。)具体格式参照 Manual。
135+
136+
生成的邮件列表结构是这样的:
137+
138+
#+begin_example
139+
总邮箱
140+
|-收件箱(一个实际邮件文件夹)
141+
`-INBOX(这个则是用来分类的一个文件夹)
142+
|-家庭
143+
|-工作
144+
`-Work
145+
`-Bug Reports(本地 MailDir)
146+
#+end_example
147+
148+
你应该可以看出来,通过这种方式很容易就能同时收取多个邮箱。
149+
150+
** 一个相对复杂的范例
151+
(来自 Emacs Wiki)
152+
#+begin_src conf-unix
153+
# -*- conf-unix -*-
154+
GMAIL{
155+
%INBOX:myname/[email protected]:993! "In"
156+
%[Gmail]/Sent:myname/[email protected]:993! "Sent"
157+
%[Gmail]/Draft:myname/[email protected]:993! "Draft"
158+
%[Gmail]/Trash:myname/[email protected]:993! "Trash"
159+
%[Gmail]/Spam:myname/[email protected]:993! "Spam"
160+
161+
Buy{
162+
%buy/ebay:myname/[email protected]:993! "E-bay"
163+
%buy/records:myname/[email protected]:993! "Records"
164+
%buy/books:myname/[email protected]:993! "Books"
165+
}
166+
167+
Friends{
168+
%friends/work:myname/[email protected]:993! "work friends"
169+
%friends/university:myname/[email protected]:993! "university friends"
170+
%friends/college:myname/[email protected]:993! "old friends"
171+
%friends/highschool:myname/[email protected]:993! "very old friends"
172+
}
173+
}
174+
175+
#Note: usernames with "strange" characters (like "@") must be written
176+
#like: "[email protected]". Folders at my work are delimited by dot '.'.
177+
WORK{
178+
179+
180+
%INBOX.Drafts:"[email protected]"/[email protected] "Draft"
181+
%INBOX.Trash:"[email protected]"/[email protected] "Trash"
182+
183+
Projects{
184+
%INBOX.Project1:"[email protected]"/[email protected] "Project 1"
185+
%INBOX.Project2:"[email protected]"/[email protected] "Project 2"
186+
}
187+
}
188+
189+
#+end_src
190+
191+
虽然其实也可以直接用 WanderLust 的文件夹管理器来设置,但在第一次启动时最好还是
192+
了解一下如何配置。
193+
194+
** 举例
195+
如果你需要马上上手的话,我就用比较常见的 QQ 邮箱举例了。
196+
197+
#+BEGIN_SRC conf-unix
198+
%inbox:7XXXXXXX9/[email protected]:993! "QQ Mail"
199+
路径:用户名/验证方式(QQ 邮箱需要设为 login)@服务器:端口!加上感叹号表示要使用 SSL "用于显示的名称,可以不设"
200+
#+END_SRC
201+
202+
需要注意的是,用户名用 [email protected]= 之类的,也就是中间有@符号的,会导致
203+
无法正确连接到服务器。这时候你需要用 =""= 把用户名包起来。
204+
205+
下面是一个 Gmail 的例子。(注意:中国大陆地区 Gmail 服务已经不可用,包括网页和
206+
POP、IMAP、SMTP 服务。)
207+
208+
#+BEGIN_SRC conf-unix
209+
%inbox:"[email protected]"/[email protected]:993! "Gmail"
210+
#+END_SRC
211+
212+
当然你也可以用 Emacs Lisp 来配置,不过一般不推荐这样做。
213+
214+
#+BEGIN_SRC emacs-lisp
215+
(setq elmo-imap4-default-server "imap.gmail.com"
216+
elmo-imap4-default-user "<accountname>@gmail.com"
217+
elmo-imap4-default-authenticate-type 'clear
218+
elmo-imap4-default-port '993
219+
elmo-imap4-default-stream-type 'ssl)
220+
#+END_SRC
221+
222+
* 配置发信方式
223+
** 使用内置 SMTP 发信
224+
下方是一个 SMTP 配置的范例,你应该放在 =.wl= 里,或者其它合适的地方。
225+
226+
#+begin_src emacs-lisp
227+
(setq wl-smtp-connection-type 'starttls
228+
wl-smtp-posting-port 587
229+
wl-smtp-authenticate-type "plain"
230+
wl-smtp-posting-user "myname"
231+
wl-smtp-posting-server "smtp.gmail.com"
232+
wl-local-domain "gmail.com"
233+
wl-message-id-domain "smtp.gmail.com")
234+
235+
236+
237+
;; 更加复杂的多账号设置
238+
(setq wl-user-mail-address-list (quote ("[email protected]" "[email protected]")))
239+
240+
;;(NOTE: "M-: wl-draft-parent-folder" => %INBOX:myname/[email protected]:993)
241+
(setq wl-draft-config-alist
242+
'(((string-match "company.com" wl-draft-parent-folder)
243+
(template . "work"))
244+
((string-match "gmail.com" wl-draft-parent-folder)
245+
(template . "gmail"))
246+
;; automatic for replies
247+
(reply "\\(To\\|Cc\\|Delivered-To\\): .*company.com.*"
248+
(template . "work"))
249+
(reply "\\(To\\|Cc\\|Delivered-To\\): .*gmail.com.*"
250+
(template . "gmail"))))
251+
252+
;;choose template with C-c C-j
253+
(setq wl-template-alist
254+
'(("gmail"
255+
(wl-from . "My Name <[email protected]>")
256+
(wl-smtp-posting-user . "myname")
257+
(wl-smtp-posting-server . "smtp.gmail.com")
258+
(wl-smtp-authenticate-type ."plain")
259+
(wl-smtp-connection-type . 'starttls)
260+
(wl-smtp-posting-port . 587)
261+
(wl-local-domain . "gmail.com")
262+
(wl-message-id-domain . "smtp.gmail.com"))
263+
("work"
264+
("Fcc" . "%INBOX.Sent:\"[email protected]\"/[email protected]")
265+
(wl-from . "My Name <[email protected]>")
266+
(wl-smtp-posting-user . "[email protected]")
267+
(wl-smtp-posting-server . "mail.company.com")
268+
(wl-local-domain . "mail.company.com"))
269+
("From" . wl-from)))
270+
#+end_src
271+
272+
** 使用 =sendmail/msmtp=
273+
如果你已经安装并设置过 =sendmail= 或者 =msmtp= ,你当然也可以用这两个 MUA 来发件。
274+
275+
#+BEGIN_SRC emacs-lisp
276+
(setq wl-draft-send-mail-function 'wl-draft-send-mail-with-sendmail)
277+
#+END_SRC
278+
279+
如果用的是 =msmtp= ,还需要一些额外配置,详见 [[https://www.emacswiki.org/emacs/GnusMSMTP][EmacsWiki]] 。
280+
281+
* MailDir 设置
282+
尽管 WanderLust 是一个 IMAP 客户端,它也支持用 MailDir。而且不像 GNUS 是把邮件
283+
全部导入到本地文件夹,WanderLust 是直接对 MailDir 进行读写操作,这使得它可以和
284+
我很喜欢的 CLT 邮件客户端 Mutt 共存。我使用 WanderLust 其中之一的原因也是我至
285+
今还没找到 Mew 如何使用 MailDir(后来发现其实和 WanderLust 差不多)。
286+
287+
* FAQ
288+
在这里我会对几个常见的问题进行说明。
289+
290+
** 密码
291+
不像 Mew 那样需要用那种奇怪的方式来避免每次进入邮箱都要输入密码,WanderLust 支
292+
持用 =elmo-passwd-alist-save= 来在第一次登陆输入密码后保存密码。密码通常被保存
293+
在 =~/.elmo/passwd= 。不用担心安全问题,因为密码当然不是明文,而是被加密处理后
294+
保存的。
295+
296+
** 邮件头显示了一大堆乱七八糟的东西
297+
#+BEGIN_SRC emacs-lisp
298+
(setq wl-message-ignored-field-list
299+
'(".")
300+
wl-message-visible-field-list
301+
'("^\\(To\\|Cc\\):"
302+
"^Subject:"
303+
"^\\(From\\|Reply-To\\):"
304+
"^\\(Posted\\|Date\\):"
305+
"^Organization:"
306+
"^X-\\(Face\\(-[0-9]+\\)?\\|Weather\\|Fortune\\|Now-Playing\\):")
307+
wl-message-sort-field-list
308+
(append wl-message-sort-field-list
309+
'("^Reply-To" "^Posted" "^Date" "^Organization")))
310+
#+END_SRC
311+
312+
** 如何在读信时显示邮件列表
313+
#+BEGIN_SRC emacs-lisp
314+
(setq wl-stay-folder-window t)
315+
#+END_SRC
316+
317+
** 自动删除邮件和自动归类邮件
318+
#+BEGIN_SRC emacs-lisp
319+
;; Refile rule
320+
(setq wl-refile-rule-alist
321+
'(("to"
322+
("[email protected]" . "+ml/splab")
323+
("[email protected]" . "+ml/linux-jp/doluc")
324+
("[email protected]" . "+ml/linux-jp/debian-users")
325+
("[email protected]" . "+ml/emacsen/mule-ja")
326+
("[email protected]" . "+ml/emacsen/emacs-mime-ja")
327+
("[email protected]" . "+ml/emacsen/wl")
328+
("[email protected]" . "+ml/emacsen/skk")
329+
("[email protected]" . "+ml/emacsen/emacs-w3m")
330+
("[email protected]" . "+ml/emacsen/bbdb")
331+
("[email protected]" . "+ml/emacsen/yatex"))))
332+
333+
;; Expire
334+
(setq wl-expire-alist
335+
`((,(concat "^\\" wl-trash-folder "$") (date 7) remove)
336+
("^\\+mag/" (date 30) remove)
337+
("^\\.ads$" (date 15) remove)
338+
;;("^@" (date 30) remove)
339+
("^\\+ml/linux-jp/doluc$" (number 300 500) hide)
340+
("^\\+ml/splab$" (number 300 500) hide)
341+
))
342+
(add-hook 'wl-summary-prepared-hook 'wl-summary-expire)
343+
#+END_SRC
344+
345+
** 如何插入附件
346+
WandeLust 用 =SEMI= 这个包处理 MIME。如果你对 MIME 没有概念的话,简单来说就是
347+
附件处理。你只要在 =wl-draft-mode= 下按 ~C-c C-x TAB~ =mime-edit-insert-file=
348+
就可以插入附件了。
349+
350+
** 如何利用 Org-mode 发送 html 邮件
351+
先做如下配置:
352+
353+
#+BEGIN_SRC emacs-lisp
354+
(setq org-mime-library 'semi)
355+
#+END_SRC
356+
357+
然后只需要在 =org-mode= 中写好邮件内容后运行 ~M-x~
358+
=org-mime-org-buffer-htmlize= ,就会新建一封 html 格式的邮件。

0 commit comments

Comments
 (0)