Gmailのアドレス帳をbbdbにインポート


Gmailって便利ですね。Androidを使うようになって連絡先も同期されるようになったので、さらに便利になった気がします。
便利は便利なんですが、いざ文章を書くとなるとブラウザではなかなか書きにくいもので、メールを送る時にはEmacsでWanderlustを起動させて書いてます。
この使い方で結構満足していたのですが、Wanderlustのアドレス帳はとても貧弱でいちいち自分で入力しないといけないのが不満でした。
Gmailのアドレス帳を取りこめないもんかなーと思ってたら、なかなか便利なものがあったので紹介します。

bbdbをインストール

bbdbとは、Emacsで動作するアドレス帳管理ツール。Gnus、WanderlustなどEmacsのMUAと協調して動作します。メールを読めば,そのメールの送信者などを勝手にアドレス帳に追加してくれる便利なツールです。

The Insidious Big Brother DataBase @ SourceForge

インストールについては次のサイトで詳しく書かれていました。要はいつもの ./configure > make で良いわけですが ファイルの配置、info追加に伴うdirの修正などは自前でする必要があります。

インストール: BBDB – Computer

Wanderlustと併用する場合は次のようなコードを.emacsとかに入れとくと良いようです。

(require 'bbdb-wl)

(bbdb-wl-setup)
;; メールを開いた時にbbdbバッファをポップアップ表示
(setq bbdb-use-pop-up t)
;; 自動収集させる
(setq bbdb/mail-auto-create-p t)
;; 自動収集しないフォルダの指定
(setq bbdb-wl-ignore-folder-regexp "^@")
(setq signature-use-bbdb t)
(setq bbdb-north-american-phone-numbers-p nil)
;; サマリに bbdb の名前を表示
(setq wl-summary-from-function 'bbdb-wl-from-func)
;; 自動的に ML フィールドを加える
(add-hook 'bbdb-notice-hook 'bbdb-auto-notes-hook)
(setq bbdb-auto-notes-alist '(("X-ML-Name" (".*$" ML 0))))

(setq bbdb-complete-name-allow-cycling t)

(setq bbdb-auto-notes-alist 
      '(("X-Mailer" ("\(xcite[^>]+> \|\)\(.*\)" mua 2))
        ("X-ML-Name" (".*$" ML 0))
        ("User-Agent" ("\(xcite[^>]+> \|\)\(.*\)" mua 2))
        ("X-Newsreader" ("\(xcite[^>]+> \|\)\(.*\)" mua 2))
        ("X-Emacs"  (".*" emacs 0))
        ("X-Url"    (".*" www 0))
        ("X-Uri"    (".*" www 0))
        ("To"       ("kose@" ml "direct"))
        ("X-Ml-Name" (".*" ml 0))
        ("reply-to" ("^\([^@]+\)@" ml 1))))


;; 問い合わせなしでセーブ
(setq bbdb-offer-save nil)

Gmailのアドレス帳をbbdbにインポート

これで、新しく来るメールはアドレス帳に取りこむことができるわけですが、Gmailのアドレス帳にあってメールが来ない人たちのアドレスが取りこまれません。
もう二度とメールが来ないような人たちもたくさんいますが、世の中何が起こるかわかりませんので、この際取りこんでおきます。
これには、google-contacts.elというelispを使わせてもらいました。

GNU Emacs | Tools and Hacks

使い方は簡単。リンク先にもありますが、まずファイルを読みこんでおいて、

;; Load library
(load-file "/path/to/google-contacts.el")

Gmailのアドレスとパスワードを設定しておきます。

;; Configure username/password to GMail
(setq google-contacts-email "my-email@gmail.com")
(setq google-contacts-passwd "secret")

そして、次のような関数を定義。

;; Here's an interactive function that retrieves Google contacts and updates
;; BBDB:
(defun google-contacts-update-bbdb()
  "Fetch contacts from Google and merge them into local BBDB."
  (interactive)
  (google-contacts-merge-with-bbdb (google-contacts-retrieve)))

後は、定義した関数を実行すれば、bbdbにGmailのアドレス帳が取りこまれます。つか、Gmailのアドレス帳ってこんな簡単に抜けていいんだろうか。。。