平衡点
2011/07/04
_ 快適なメール環境の構築(2/n): offlineimap の設定, again
尊也さんに「Google Contacts 使うなら日本語の方が快適だよ」と唆されたので, 試しに変えてみたら(案の定) Gmail の規定のラベルが全て日本語になってしまい, offlineimap で幸せになれなくなってしまったので, メモ.
IMAP4 でのフォルダ名に「日本語」を使う話
本来ならそんな事する気はなかったのですが.
"[Gmail]/All Mail" とかは Gmail を日本語にすると "[Gmail]/すべてのメール" となる. この状況で IMAP 接続すると, modified UTF-7(RFC 2060(日本語訳)) でエンコードされたフォルダ名が取得される. wanderlust なんかでは
;; 日本語フォルダ対策 (setq elmo-imap4-use-modified-utf7 t)
などと設定しておけば良いわけだが, offlineimap の場合は folderfilter とか nametrans などで困ってしまった.
- 安直にやるなら, utf-7 のフォルダ名を(読み難いけれど)使うのかな?
- Get offlineimap working with non ASCII characters. にある様に, utf-7 <-> utf-8 変換をする python ファイルを読み込んで, nametrans や folderfilter で使用する, という手もある.
というわけで, 安直にやってみた.
# source: python # すべてのメール: '[Gmail].&MFkweTBmMG4w4TD8MOs-' # スター付き: '[Gmail].&MLkwvzD8TtgwTQ-' # ゴミ箱: '[Gmail].&MLQw33ux-' # 迷惑メール: '[Gmail].&j,dg0TDhMPww6w-' # 送信済みメール: '[Gmail].&kAFP4W4IMH8w4TD8MOs-' # 下書き:'[Gmail].&Tgtm+DBN- nametrans = lambda foldername: re.sub('^\[Gmail\].&MFkweTBmMG4w4TD8MOs-', 'Archives', re.sub('^\[Gmail\].&MLkwvzD8TtgwTQ-', 'Starred', re.sub('^\[Gmail\].&MLQw33ux-', 'Trash', re.sub('^\[Gmail\].&j,dg0TDhMPww6w-', 'Spam', re.sub('^\[Gmail\].&kAFP4W4IMH8w4TD8MOs-', 'Sent', re.sub('^\[Gmail\].&Tgtm+DBN-', 'Drafts', foldername)))))) folderfilter = lambda foldername: foldername not in ['[Gmail]/&kAFP4W4IMH8w4TD8MOs-', '[Gmail]/&MLQw33ux-', '[Gmail]/&kAFP4W4IMH8w4TD8MOs-', '[Gmail]/&Tgtm+DBN-']
とりあえずコレで行ってみる.
offlineimap を cron から呼ぶために
offlineimap のパスワードを gpg 暗号化した別ファイルから読み込むようにしているので, cron で動かすと gpg の複合ではまる. 鍵の管理は gpg-agent 任せなので, pinentry-gtk-2 が表示できる X 環境を cron に渡すようにすれば良い. 例えば, 以下の様なスクリプトを cron でまわすようにしてみる
# source: sh #!/bin/sh # -*- mode:sh; coding: utf-8-unix; indent-tabs-mode: nil -*- # offlineimap-cron.sh # # Copyright(C) Youhei SASAKI All rights reserved. # $Lastupdate: 2011/07/12 21:20:57$ # Author: Youhei SASAKI <uwabami@gfd-dennou.org> # License: GPL-3+ # # Code: ######################################################################### # for personal settings OFFLINEIMAP_PID=~/Mail/.offlineimap/pid OFFLINEIMAP_CONF=~/.offlineimaprc UI=quiet # access for current session ck_pid=$(ps -C ck-launch-session -o pid --no-heading | sed 's/^ //g') [ $(ps -p `cat $OFFLINEIMAP_PID` -o pid --no-heading) ] && exit 0 [ -z $ck_pid ] && exit 0 local DBUS_SESSION_BUS_ADDRESS XDG_SESSION_COOKIE GPG_AGENT_INFO for var in DBUS_SESSION_BUS_ADDRESS XDG_SESSION_COOKIE GPG_AGENT_INFO; do VAL=$(sed 's/\x00/\n/g' /proc/$ck_pid/environ | grep $var) var=$VAL ; export $var done [ $(ps -p `cat $OFFLINEIMAP_PID` -o pid --no-heading) ] \ || nice -n 19 offlineimap -c $OFFLINEIMAP_CONF -u $UI -o &
console-kit を使ってない時には ck_pid の所を適宜弄ると良いかと.