绑定Emacs和mutt,以IMAP方式访问Gmail

Written by simon on September 6, 2008 – 5:25 pm

本文的目的:在Emacs下利用Mutt,以IMAP方式完成Gmail邮箱的绑定。

简单的介绍一下情况:作为一个超级伪Emacs狂热者,我希望打开计算机的一切活动都在Emacs下完成,当然也包括收发Email了。今天的笔记主要涉及到在Emacs-unicode-2下使用mutt,以IMAP的方式完成gmail邮件的相关操作。不用pop3的原因是,imap要比pop3的方式更好更强大。

(为什么不用GUI格式的程序,比如evolution或者thunderbird?evolution我没使用过,基本上此前一直是在用thunderbird的,在debian下它被起名为icedove──关于debian下将firefox thunderbird等mozilla program的程序改名的比较详细的介绍,请参阅wikipedia的Mozilla Software Rebranding辞条──Icedove第一个问题是速度比较慢,配置中文字体和不同的字符编码又比较麻烦,更让人不爽的是,它的imap功能很慢,经常是点选了一封邮件之后程序就会处于较长时间的假死状态,不知道到底是在读取gmail服务器的数据呢,还是什么都没有干。时间长了就颇有些不爽。第三,我需要经常更换计算机,在教研室使用一台,在宿舍使用另一台,而至少从我目前的观点来看,thunderbird程序的配置文件很不方便迁移,要是可以像mutt这样仅仅将一个~/.mutt带走拷贝到别的机器上就能使用,就会方便得多)。

主要分为以下几个步骤来进行。
注1,本文是基于Debian/Ubuntu操作系统的,如果使用其他操作系统,请作出相应的调整。
注2,这只是初步的准备工作,目的仅仅是让mutt跑起来,将mutt和emacs整合起来。更多功能还是要各位自己看文档自己总结和试验,比如邮件分类,等等。

1.前期准备工作:在emacs中配置emacsclient

Mutt是个字符终端的邮件处理程序,如果我们希望用emacs作为处理信件内容的文本编辑器,需要在emacs中设置emacsclient。它的基本工作机理是:将emacs程序设置为emacs server,这样比如mutt等程序在emacsclient模式中需要调用emacs时,以client身份向作为server的emacs发送请求,emacs接受这个client请求,并做出相应处理。

说起来似乎很复杂,做起来一行代码就可以了。在~/.emacs文件中加入

  (server-start)

这一行,保存,退出,重新启动emacs即可。另一个解决方案是可以在emacs中运行M-x start,在每次需要进入emacs server模式的时候运行一遍该命令。

2.mutt的安装和配置

没有mutt?安装一下就可以了

sudo apt-get install mutt

mutt文件主要放置在根目录下的.mutt中。可以自己创建之,并进入该目录下。

mkdir ~/.mutt/
cd ~/.mutt

然后就是~/.mutt/muttrc文件的配置工作了,主要是围绕imap模式访问gmail邮箱而展开。

emacs ~/.mutt/muttrc

加入如下代码:

    ## ~/.mutt/muttrc
    set from=yourusername@gmail.com
# 你在gmail.com的邮箱地址
    set realname="Simon"
# 比如,王小二
    set reverse_name=yes
    set reverse_realname=no
    set imap_user = 'yourusername@gmail.com'
#gmail邮箱的IMAP用户名嗯
    set spoolfile = imaps://imap.gmail.com:993/INBOX
    #set sendmail="/usr/sbin/ssmtp -C$HOME/.mutt/ssmtp.conf"
    set smtp_url="smtp://yourusername@smtp.gmail.com:587/"
#也是要把yourusername替换成相应的你的用户名
    set folder = "imaps://imap.gmail.com:993"
    #set record=+sent-mail-`date +%Y`
    set record="+[Gmail]/Sent Mail"
    set postponed="+[Gmail]/Drafts"
    # previously do:  mkdir -p ~/.mutt/cache/{headers,bodies}
    set header_cache="~/.mutt/cache/headers"
    set message_cachedir="~/.mutt/cache/bodies"
    set certificate_file=~/.mutt/certificates
    set move=no
    set delete=yes
    set edit_hdrs
    set include
    set reply_to
    set abort_nosubject=no
    alternates '(username|altusername)([-+].*)?@.*'
    set hdr_format="%4C %Z %{%m/%d} %-15.15F (%4c) %s" # format of the index

    hdr_order From: Date: User-Agent: X-Mailer To: Cc: Reply-To: Subject:
    ignore *
    unignore From: Date: User-Agent: X-Mailer To: Cc: Reply-To: Subject:
    my_hdr Reply-To:

    # setup gmail filters to apply the corresp. labels:
    mailboxes ! =ml-lug-list =ml-lug-org =[Gmail]/Drafts "=[Gmail]/All Mail"

    set editor="emacsclient %s"
	#在这行设置mutt使用的文本编辑器。我是使用的emacs,所以利用emacsclient来调用emacs,当然,也可以切换成别的:)
  	set alias_file=~/.mutt/mail_aliases
    source ~/.mutt/mail_aliases
    send-hook . 'set realname="Yanyuan Zhu"'
#换成相应的名字
    ## hack to make  $reverse_name and 'my_hdr From:' work ok (eg mlists)
    send-hook . 'set from=yourusername@gmail.com'
    send-hook . 'unmy_hdr From:'
    ###
    send-hook . 'set signature=~/Documents/.email_end'
#这行是email末尾的签名。在你的根目录某个位置下创建一个,并将地址填在上栏即可。或者如果你不需要这个签名,将该行用#注释掉。

以及,在.mutt目录下创建这个文件,是muttrc中需要的。留空即可,因为我暂时还没搞懂它是干什么用的:)

touch ~/.mutt/mail_aliases

3.mutt试验

在一个已经调配好了中文字体支持的字符终端下(比如urxvt, gnome-terminal),输入mutt,回车
mutt会提示输入密码,按照要求照做,imap读取了邮件列表之后,就进入mutt的页面了。
本文假定您已经掌握了基本的mutt操作,如果没有,请阅读mutt文档

是时候检测mutt和emacs的绑定是否成功了。首先确定两点:
1.Emacs和mutt均打开。
2.Emacs的server mode打开。

在mutt窗口下按m,写封信吧。输入对方的邮箱地址(To:),邮件标题(Subject:),回车。看看如果配置正确的话,emacs会出现反应,同时mutt程序窗口里会出现如下字样:

simon@simon:~/.mutt$ mutt
Waiting for Emacs...
Waiting for Emacs...

表示此时mutt在等待文本编辑器Emacs结束工作。

回到Emacs窗口中来,输入邮件正文后,怎么将Emacs中的文件传递回mutt中去呢?
两个方法,第一个很愚蠢,C-x C-c关闭emacs即可(不幸的是,这是我开始一直使用的方法...);第二个是用C-x #来将该buffer传递回给mutt。

现在再回到mutt窗口中,可以看到Attachments部分中有这个文件了。如果还要继续添加其他的附件,比如图片等,还可以用a命令进行后续操作。否则的话,按y发送即可──还需要输入smtp的用户名密码。

补充:mutt以emacsclient方式传递请求给文本编辑器emacs,emacs打开一个新的buffer后,会将该buffer保存在/tmp目录下。可以在/tmp中寻找相应标题的“草稿”来恢复该文档,在没有重新启动的前提下──重启后/tmp中的文件将被删除。

Share/Save/Bookmark

Tags: , , , , , , ,
Posted under linux |

Leave a Comment

You must be logged in to post a comment.