在mutt中使用Gmail地址簿

这又是关于mutt的记事。公司的IT着实非常落后,至今我们仍在使用微软的Office outlook作邮件客户端。没有gmail,没有webmail,倒是直到上周才为每位员工购买了一款叫做Good的Android软件来查看邮件。可是无论怎样,mutt一直是我钟爱的一款邮件客户端。它已经长在我的手指上。现在在公司的开发机器上我已经可以使用IMAP和SMTP收发邮件,也可以在mutt中使用全公司的LDAP来查找地址,所以,整个功能跟低效的Outlook没有区别,处理邮件的速度却比使用Outlook提高了至少两倍。特别是遇到跟工程师之间通信需要贴代码或者发git patch的时候尤其如此。当通过mutt使用自己的gmail的时候,我遇到了一问题,就是Gmail本身并没有提供LDAP接口用来查询地址,于是我无法套用使用公司邮件的配置来查找地址了。昨天在github上发现了一个perl脚本可以解决这个问题。

Gmail提供了API可以帮助外部应用程序取得地址簿中的数据。Ajnasz的这个脚本可以取得地址簿数据并且用查询字符串匹配,从而找到联系人的邮件地址。但是,但是原来的脚本有一个小问题——无法使用中文或者日语姓名作为查询字符串。自己动手,丰衣足食。我在原代码的基础只添加了两行代码,现在查询中文姓名也没有问题了。如果你有兴趣可以从这里拿到代码。

git clone git://github.com/jcadam/Google-Contacts-for-Mutt.git gc-mutt

这个脚本需要一个简单的配置文件用来取得Gmail数据的访问权限。你可以仿照下面这个例子做自己的配置文件。

$ vi ~/.google.ini
[account]
email = 'youraccount@gmail.com'
password = 'Passw0rd'

为了防止其他用户访问你的文件增强安全,你可将文件的属性设置成所有者只读。

$ chmod 400 ~/.google.ini

进入contacts.pl脚本所在目录,然后不带任何参数运行这个脚本,你就可以得到整个Gmail联系人名簿。可以先测试一下。

$ cd 
$ ./contacts.pl

接着,在PATH变量中的任何一个目录中,通常是/usr/local/bin/或者~/bin,建立一个Shell helper了查询数据。

$ vi ~/bin/contracts
#!/usr/bin/env bash
${HOME}/github/gc-mutt/contacts.pl ${1}

然后告诉mutt查询联系人时使用这个helper脚本查询。在~/.muttrc中添加如下一行即可。

set query_command="~/bin/contacts '%s'"

测试一下。在mutt中新建邮件(m),在To:栏中直接输入联系人的名字,比如”Mark Brown”,

然后按”ctrl-t”查找地址簿。

mutt会自动查询地址布并且取回Mark的邮件地址。

Gmail证书变更导致的msmtp错误

大约一年前我写了《通过mutt使用gmail》,之后因为更换新机器有没有时间再将

mutt等工具配置起来;今天重新在新的gentoo系统上配置Mutt使用gmail却发现原
来的方法出错了。

错误消息如下

msmtp: TLS certificate verification failed: the certificate hasn’t got a
known issuer.

很显然,google将gmail的cert变更了。单纯的使用msmtp确认一下:

% msmtp --serverinfo --host=smtp.gmail.com --tls=on --port=587 --tls-certcheck=off
SMTP server at smtp.gmail.com ([74.125.53.109]), port 587:
    mx.google.com ESMTP r20sm18086225wam.17
TLS certificate information:
    Owner:
        Common Name: smtp.gmail.com
        Organization: Google Inc
        Locality: Mountain View
        State or Province: California
        Country: US
    Issuer:
        Common Name: Google Internet Authority
        Organization: Google Inc
        Country: US
    Validity:
        Activation time: 2010年04月23日 05時02分45秒
        Expiration time: 2011年04月23日 05時12分45秒
    Fingerprints:
        SHA1: 1A:6F:48:8F:BE:5B:FD:92:D8:12:30:F9:22:CE:84:49:B3:43:BD:2C
        MD5:  60:39:DE:FB:0A:D9:9E:43:26:E7:75:AC:60:48:A1:B0
Capabilities:
    SIZE 35651584:
        Maximum message size is 35651584 bytes = 34.00 MB
    STARTTLS:
        Support for TLS encryption via the STARTTLS command
    AUTH:
        Supported authentication methods:
        PLAIN LOGIN

之前使用过的Thwate Server已经过期了,Issuer字段变成了由google之间给
cert。:(

幸好,修复这个错误非常容易,在debain或者ubuntu系统上可以安装
ca-certificates包来修复这个错误。

# sudo apt-get install ca-certificates
# dpkg -s ca-certificates | grep Version
Version: 20090814

然后,只要更改~/.msmtprc文件就可以了,将tls_trust_file改正为

tls_trust_file /usr/share/ca-certificates/mozilla/Equifax_Secure_CA.crt

gentoo用户需要将这个文件download下来,并且重新指定tls的位置:


http://sysinf0.klabs.be/usr/share/ca-certificates/mozilla/Equifax_Secure_CA.crt?f=download;dist=etch;component=main;arch=i386;pkg=ca-certificates;ver=20070303

P.S. 博客并不适合用来记录这样内容,但是,前一篇gmail相关文章已经贴到了博
客,照例还是帖一篇上来吧,各位见谅。