emacs中的email客户端mu4e

emacs中的邮件客户端有不少,知道的有gnus,notmuch和mu4e。看了下网络上的评论,选择了mu4e。

mu4e的全称是(mu for emacs)。 mu不负责邮件的发送和收取。它只是负责邮件的浏览,搜索等。 因此要使用mu4e需要安装额外的邮件收取程序。

1 收取邮件

1.1 offlineimap

offlineimap用于获取邮件。

  • 安装

    $ sudo apt-get install offlineimap

  • 配置实例

    安装完成,要进行配置,需要创建一个~/.offlineimaprc文件进行配置。详细的配置过程如下:

    • 单帐户
      [general]
      accounts = Gmail
      maxsyncaccounts = 3
      
      [Account Gmail]
      localrepository = Local
      remoterepository = Remote
      
      [Repository Local]
      type = Maildir
      localfolders = ~/Maildir
      
      [Repository Remote]
      type = IMAP
      remotehost = imap.gmail.com
      remoteuser = USERNAME@gmail.com
      remotepass = PASSWORD
      ssl = yes
      maxconnections = 1
      realdelete = no
      

      注意,不要修改前面 accounts=Gmail , 只需修改 remotehost|user|Pass 就可以了。如果要修改 Gmail , 需要连带修改第二个中括号中的名字,这二者保持 一致就可以了。

    • 多帐户

      对于多帐户的情况,需要在最上面的 general 行添加其他帐户,各帐户的名字用逗号 分割。如果要新增一个网易的帐户就是这样的,

      accounts=Gmail, netease

      然后对后面的各帐户,继续配置 [Account netease] 。以及localrepository和 remoterepository。以下是一个实例:

      [general]
      accounts = Gmail, xhyang
      maxsyncaccounts = 3
      
      [Account Gmail]
      localrepository = Local
      remoterepository = Remote
      
      [Repository Local]
      type = Maildir
      localfolders = ~/Maildir
      
      [Repository Remote]
      type = IMAP
      remotehost = imap.ym.163.com
      remoteuser = jianghang@bagualu.net
      remotepass = passwordforjianghang
      ssl = yes
      maxconnections = 1
      realdelete = no
      
      [Account xhyang]
      localrepository = LocalXhyang
      remoterepository = RemoteXhyang
      
      [Repository LocalXhyang]
      type = Maildir
      localfolders = ~/MaildirXhyang
      
      [Repository RemoteXhyang]
      type = IMAP
      remotehost = imap.ym.163.com
      remoteuser = xhyang@bagualu.net
      remotepass = passwordforxhyang
      ssl = yes
      maxconnections = 1
      realdelete = no
      
  • 收邮件

    offlineimap , 收到的邮件会在本地的 ~/Maildir 中。如果已经配置了多个帐户,那么

各帐户的邮件都会被收取。分别放在指定的localfolders。

1.2 fetchmail

问题

用fetchmail有一个问题,就是不方便指定本地邮件的存放目录。在mu中使用的本地邮件格式是 maildir, fetchmail本身收到邮件后放在本地也不是这个格式的。因此用起来不方便, 建议用offlineimap。

fetchmail的安装比较直接,直接使用 sudo apt-get install fetchmail 就可以了。

使用fetchmail收取邮件的命令是

fetchmail -p POP3 -u <username> -k <pop3server>

其中-k要求不删除服务器上的版本 , -p 指定传输协议为POP3 。 以上命令以后,输入密码即 可。收下来的email会投递到本地的用户信箱。然后可以用mail来阅读。

2 安装mu

在安装之前,需要首先安装以下的库

$ sudo apt-get install libgmime-2.6-dev libxapian-dev
# if libgmime-2.6-dev is not available, try libgmime-2.4-dev

安装mu的推荐方法是使用源码直接安装。步骤如下:

# get from git (alternatively, use a github tarball)
$ git clone git://github.com/djcb/mu.git

$ cd mu
$ autoreconf -i && ./configure && make
# On the BSDs: use gmake instead of make
$ sudo make install

其中,如果 autoreconf 没有安装的话,可以使用

sudo apt-get install autoconf automake libtool

来安装。

3 配置

安装完成之后,首先要建立索引,命令如下:

mu index

这个命令中,缺省会认为邮件目录的地址位于 ~/Maildir 。如果不是这个位置,需要用 -m 参数来指定位置。

3.1 单帐户配置

然后,在.emacs中添加下面的配置

;; the exact path may differ -- check it
(add-to-list 'load-path "/usr/local/share/emacs/site-lisp/mu4e")
(require 'mu4e)

(setq mu4e-drafts-folder "/[Gmail].Drafts")
(setq mu4e-sent-folder   "/[Gmail].Sent Mail")
(setq mu4e-trash-folder  "/[Gmail].Trash")

;; don't save message to Sent Messages, Gmail/IMAP takes care of this
(setq mu4e-sent-messages-behavior 'delete)

;; (See the documentation for `mu4e-sent-messages-behavior' if you have
;; additional non-Gmail addresses and want assign them different
;; behavior.)

;; setup some handy shortcuts
;; you can quickly switch to your Inbox -- press ``ji''
;; then, when you want archive some messages, move them to
;; the 'All Mail' folder by pressing ``ma''.

(setq mu4e-maildir-shortcuts
    '( ("/INBOX"               . ?i)
       ("/[Gmail].Sent Mail"   . ?s)
       ("/[Gmail].Trash"       . ?t)
       ("/[Gmail].All Mail"    . ?a)))

;; allow for updating mail using 'U' in the main view:
(setq mu4e-get-mail-command "offlineimap")

;; something about ourselves
(setq
   user-mail-address "jianghang@bagualu.net"
   user-full-name  "杨学辉"
   mu4e-compose-signature
    (concat
      "杨学辉\n"
      "http://www.bagualu.net\n"))

;; sending mail -- replace USERNAME with your gmail username
;; also, make sure the gnutls command line utils are installed
;; package 'gnutls-bin' in Debian/Ubuntu

(require 'smtpmail)
;; alternatively, for emacs-24 you can use:
(setq message-send-mail-function 'smtpmail-send-it
     smtpmail-stream-type 'ssl
     smtpmail-default-smtp-server "smtp.ym.163.com"
     smtpmail-smtp-server "smtp.ym.163.com"
     smtpmail-smtp-service 994)

;; don't keep message buffers around
(setq message-kill-buffer-on-exit t)

在这个配置中,把mu4e的一些变量和当前的配置联系起来。邮件的发送使用的是smtpmail,但是这里并没有指定 发送邮件的密码,而这个密码需要在 ~/.authinfo 文件中指定。这个文件的格式如下:

machine smtp.ym.163.com login jianghang@bagualu.net password yourpassword

有了这些设置之后,就可以使用 C-x m 来写邮件并使用 C-c C-c 来发送邮件了。

3.2 多帐户配置

另外关于mu的多帐户设置,在上面的设置中,mu4e只能用于一个帐户,但是仔细观察上面的设置,只要把mu4e中 各个变量的值设为另一个帐户的值,就可以对另一个帐户工作了。针对前面offlineimap的双帐户设置,这里也 把mu4e设置成两个帐户。其中的代码如下:

(defvar my-mu4e-account-alist
  '(("Gmail"
     (mu4e-maildir "~/Maildir")
     (user-mail-address "jianghang@bagualu.net")
     (smtpmail-smtp-user "jianghang@bagualu.net")
     )   
    ("xhyang"
     (mu4e-maildir "~/MaildirXhyang")
     (user-mail-address "xhyang@bagualu.net")
     (smtpmail-smtp-user "xhyang@bagualu.net")
     ))) 

(defun my-mu4e-set-account ()
  "Set the account for composing a message."
  (interactive)
  (let* ((account
          (if mu4e-compose-parent-message
              (let ((maildir (mu4e-message-field mu4e-compose-parent-message :maildir)))
                (string-match "/\\(.*?\\)/" maildir)
                (match-string 1 maildir))
            (completing-read (format "Compose with account: (%s) "
                                     (mapconcat #'(lambda (var) (car var))
                                                my-mu4e-account-alist "/"))
                             (mapcar #'(lambda (var) (car var)) my-mu4e-account-alist)
                             nil t nil nil (caar my-mu4e-account-alist))))
         (account-vars (cdr (assoc account my-mu4e-account-alist))))
    (if account-vars
        (mapc #'(lambda (var)
                  (set (car var) (cadr var)))
              account-vars)
      (error "No email account found"))))

(add-hook 'mu4e-main-mode-hook 'my-mu4e-set-account)

可以基于以上的代码,为不同的帐户设置不同的变量,只需要按照需求修改my-mu4e-account-alist中 的变量就可以了。最后,通过一个hook,在每次进入mu4e-main-mode的时候,选择一个帐户。

4 邮件管理

配置好以后,通过 M-x mu4e 进入mu4e的主界面,然后使用 j i 进入收件箱。

要删除一封邮件,可以使用 D 先进行标记,然后使用 x 来执行删除。这里的 x 是执行命令的 意思,基本顺序是先标记,再执行。

要进行邮件搜索,键入 s 即可进行。



本文地址: http://www.bagualu.net/wordpress/archives/6555 转载请注明




发表评论

电子邮件地址不会被公开。 必填项已用*标注