|
| 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 | + |
| 181 | + |
| 182 | + |
| 183 | + Projects{ |
| 184 | + |
| 185 | + |
| 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 | + |
| 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 | + |
| 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