电子邮件
阅读邮件我使用的软件主要有
- offlineimap 使用 imap 协议,以 Maildir 格式来同步邮件;类似的软件有 Mbsync
- mu4e mu 的 Emacs 插件,mu 可以对 Maildir 格式的邮件建索引,便于搜索;类似的软件有 Gnus
在 macOS 上,这两个软件都可以直接使用 brew 安装。
|
|
mu4e 在 mu 的安装目录内,可以通过 brew ls mu
查看,把它添加到 Emacs 的 load-path
中:
|
|
这样 mu4e 就算安装成功了。
offlineimap 配置
配置文件推荐使用 xdg 标准的 ~/.config/offlineimap/config
,尽量避免直接在家目录创建 ~/.offlineimaprc
。
|
|
上面的配置比较直观,也有相应注释,这里重点介绍如何设置 remotepasseval
与 nametrans
。
GPG Auth Source 配置密码
Emacs 中使用 Auth Source 来管理密码,它相当于一个接口层,可以对接多个存储后端,netrc 是最常见的后端,除此之外,还支持 JSON、Secret Service API、pass。很多命令,比如 wget、curl、git 等都支持从 netrc 读取密码,因此这里只介绍它的用法:
machine mymachine login myloginname password mypassword port myport
上面是 netrc 文件的通用格式,下面是我邮箱的相关配置:
# cat ~/.authinfo machine imap.exmail.qq.com login [email protected] password 123456 port 993 machine smtp.exmail.qq.com login [email protected] password 123456 port 465
993 是 imap 端口,接受邮件用;465 是 smtp 端口,发送邮件用。为了安全,还可以对 netrc 使用 GPG 加密,Emacs 会自动解密读取。
(setq auth-sources '("~/.authinfo.gpg" "~/.authinfo" "~/.netrc"))
Emacs 默认从上面几个地方找文件,读者可按需修改。
我上面对配置中使用了 get_password_emacs 这个函数来获取密码,其实现如下:
|
|
nametrans 文件名转换
配置好密码后,就可以进行邮件同步了。但是在同步前,可以通过 offlineimap --info
命令查看邮件服务器中的内容,确认下需要同步哪些目录
|
|
在 Folderlist 下面就是需要同步的目录,腾讯企业邮箱比较奇葩,自定义文件夹前会有一串字母 &UXZO1mWHTvZZOQ-
,为了保证同步下来的目录中没有这一串字母,这里使用 nametrans
配置把它转化为了 =
符号。其他邮箱(比如:Gmail、Yandex)的目录都是比较规整的,这时则不需要设置 namestrans
。
由于 IMAP 的同步是双向的,本地的状态也需要返回给远端,因此在 LocalLJC 中又使用 nametrans
把 =
转成了那串字母,这样两边就能正确同步邮件状态了,下面是本地的状态:
|
|
确认好目录同步无误后,直接运行 offlineimap
就可以同步邮件了。
定期同步
推荐使用 crontab 进行定期同步,虽然说 mu4e 中也提供了 mu4e-get-mail-command
用来配置同步的命令,
但在 Emacs 外同步更安全些,可以防止 Emacs 卡住。这是目前我使用的同步脚本:
|
|
|
|
mu4e 配置
使用 offlineimap 将同步邮件到本地后,在使用前需要使用 mu 建索引,参考命令:
|
|
XAPIAN_CJK_NGRAM
环境变量主要是开启对 CJK 的分词,方便用中文搜索邮件。不过 mu 使用的 Xapian 对中文支持比较弱,只能搜索两个字的词,比如搜「雷峰塔」就不行,可参考这里的解决方案。
下面是我用的配置:
|
|
核心配置主要有以下几个:
mu4e-contexts
配置多账户mu4e-update-interval
配置自动同步邮件与建索引间隔mu4e-get-mail-command
配置同步邮件的命令mu4e-view-actions
增加mu4e-action-view-in-browser
,这样在阅读邮件时,按a b
在浏览器打开邮件,这对那些只有 HTML 格式的邮件来说比较重要message-citation-line-format
定义符合 Gmail 的引用格式,Gmail 会用...
将引用隐藏起来gnus-article-time-format
设置邮件时间显示格式,具体可参见这里。
mu4e 查询语法
查询语句 | 含义 |
---|---|
date:today..now | 今天的邮件 |
from:jim and not flag:attach | 来自 jim 且没有附件的邮件 |
"maildir:/Sent Items" and rupert | 发送目录内,包含 rupert 的邮件 |
subject:wombat and date:20170601..20170630 | 指定时间内,主题中包含 wombat 的邮件 |
macOS 默认客户端
在网页中点击含有 mailto:[email protected] 的链接时,会调用操作系统默认邮件客户端来处理,这里介绍一种方式来把 mu4e 设置为 macOS 上的默认客户端。
首先把 mu4e 设置为 Emacs 中的默认客户端
1
(setq mail-user-agent 'mu4e-user-agent)
打开 Script Editor,输入以下代码后,导出为「应用」
1 2 3 4 5
on open location myurl set text item delimiters to {":"} display notification text item 2 of myurl with title "Emacs Compose" do shell script "/usr/local/bin/emacsclient -c -n --eval '(browse-url-mail \"" & myurl & "\")'" end open location
上面代码中,
-c
表示创建一个新 frame,-n
表示不等待 Emacs Server 的返回,不加这个选项的话,执行这个应用时,会一直驻留在 Dock 内,处于假死的状态。打开 Mail.app 应用,进入设置,将上面创建的应用设置为默认邮件阅读器
完成上面三步操作配置就好了,之后点击含有 mailto 的链接时,会自动在当前 active 的 buffer 中打开 mu4e-compose 界面,同时右上角会跳出提示框。