将Emacs作为邮件处理软件
Why
在 Linux 下也有比较多的邮件客户端软件,而我只用过雷鸟,功能非常完善,常见的日历功能如事件、任务等都有。
但是为什么我还要配置 Emacs 的邮件收发功能呢。
一是喜欢折腾,二是为了方便。毕竟其它软件需要鼠标的配合才能完成工作,而 Emacs 作为编辑器,可以使用快捷键完成所有工作。而且不脱离 Emacs ,处理完邮件就可以继续专注于编码工作了,不必因软件切换导致分心。
好了,废话不多说,撸起袖子就是干!
基础软件安装
Emacs 需要借助其它软件才能完成邮件处理工作,配置也比较简单。
邮件下载
邮件下载软件有目前也有好几个,根据接收邮件协议的不同,可以分为两类:
- IMAP 协议: offlineimap, mbsync ..
- POP 协议: getmail …
这里使用 IMAP 协议相关软件,两个都可以用。这里以 mbsync 为例。在 Arch Linux 下安装:
sudo pacman -S isync
接着就是配置并下载邮件,这里以 qq 邮箱为例。
生成授权码
处于安全考虑,QQ 邮箱使用授权码来允许第三方软件代收邮件,具体操作可以网上搜一下。其它邮箱系统应该可以直接使用。
mbsync 配置文件
主要是指定账户、密码以及要下载的邮件等。为了安全,这里使用 unix pass 存储授权码。
########################################
# qq.com
########################################
IMAPAccount qq
Host imap.qq.com
User linjieli001@qq.com
PassCmd "pass Email/qq"
Port 993
AuthMechs LOGIN
SSLType IMAPS
CertificateFile /etc/ssl/certs/ca-certificates.crt
# CertificateFile /usr/local/etc/openssl/cert.pem # MacOS
##
# Remote
IMAPStore qq-remote
Account qq
# Local
MaildirStore qq-local
Path ~/.mail/qq.com/
Inbox ~/.mail/qq.com/Inbox
## Connections
Channel qq-inbox
Master :qq-remote:"INBOX"
Slave :qq-local:"Inbox"
Create Slave
Expunge Both
SyncState *
Channel qq-drafts
Master :qq-remote:"Drafts"
Slave :qq-local:"Drafts"
Create Slave
Expunge Both
SyncState *
Channel qq-sent
Master :qq-remote:"Sent Messages"
Slave :qq-local:"Sent Mail"
Create Slave
Expunge Both
SyncState *
Channel qq-trash
Master :qq-remote:"Deleted Messages"
Slave :qq-local:"Trash"
Create Slave
Expunge Both
SyncState *
## Groups
Group qq
Channel qq-inbox
Channel qq-drafts
Channel qq-sent
Channel qq-trash
下载邮件
只要前面配置正确,这里基本不会出问题了,而且一条命令即可:
mbsync --all
建立索引
这里使用 mu 软件,Emacs 中可以直接使用 mu4e 进行邮件管理。
在 Arch Linux 的 pacman 源中不存在这个软件。因此,只能从 AUR 中安装。比如以 AUR 包管理工具 pakku 为例:
pakku -S mu
mu 的使用比 mbsync 简单得多。但是要注意版本的差别 (mu --version
):
> 1.4
:mu init --maildir ~/.mail --my-address email@example.com; mu index
< 1.4
:mu index --maildir ~/.mail
配置 Emacs
这里以 Doom Emacs 配置文件为例。
读邮件
(set-email-account! "qq.com"
'((mu4e-sent-folder . "/qq.com/Sent Mail")
(mu4e-drafts-folder . "/qq.com/Drafts")
(mu4e-trash-folder . "/qq.com/Trash")
(mu4e-refile-folder . "/qq.com/All Email")
(smtpmail-smtp-user . "linjieli001@qq.com")
;; (user-mail-address . "linjieli001@qq.com") ;; only needed for mu < 1.4
(mu4e-compose-signature . "---\nLinjie Li"))
t)
效果:
发邮件
读邮件只需要以上配置即可,但是发邮件就稍微复杂一些。不过这里有部分是因为 Doom Emacs 的原因吧。首先在 Emacs 中配置默认发邮件帐号、发送方式、 smtp 服务地圵以及端口等信息:
(setq message-send-mail-function 'smtpmail-send-it)
(setq smtpmail-debug-info t)
(setq smtpmail-debug-verb t)
(setq user-mail-address "linjieli001@qq.com")
(setq user-full-name "linjieli001")
(setq smtpmail-smtp-user "linjieli001@qq.com"
smtpmail-smtp-server "smtp.qq.com"
smtpmail-smtp-service 465
smtpmail-stream-type 'ssl)
到这里还不算完,因为 mu4e 是基于 gnus 的,因此需要在主目录下新建一个文件, 命名为 .authinfo
。否则会出现以下错误:
Sending via mail...
smtpmail-send-it: Sending failed: 503 Error: need EHLO and AUTH first !
~/.authinfo
内容具体如下:
machine smtp.qq.com login linjieli001@qq.com password 授权码
然而,走到这里。对于 Emacs 来说,其实配置已经完了,但 Doom Emacs 用户还是会报同样的错误。Doom emacs 出于安全考虑,默认使用 PGP 加密文件进行密码的传输。因此, 首先得将 ~/.authinfo
文件通过 gpg2
命令加密为 ~/.authinfo.gpg
文件。这里就不再说明了,具体操作可以网上搜一下。
写邮件效果如下:
编辑完邮件之后,按 C-c C-s
即可发送。因为是测试,发给自己的,因此,在 mu4e 中按 C-c C-u
更新邮件,就可以看到刚刚发送的邮件:
总结
总的来说,效果还可以,但是毕竟不是专用于邮件处理的,所有说功能可能不及其它客户端软件。但是自用的话绰绰有余了。
在配置的过程中,需要了解一些基本软件的使用,比如 mbsync,mu,gpg,pass 等,虽然过程有点坎坷,但收获也蛮大的。
mu4e 模式中提供了丰富的快捷键,具体可以参考:http://wenshanren.org/?p=111
参考
https://github.com/hlissner/doom-emacs/tree/develop/modules/email/mu4e
https://emacs-china.org/t/sending-mail-from-qq-com/11661/5
https://blog.csdn.net/sheismylife/article/details/41411429
https://linuxtoy.org/archives/pass.html