GmailのIMAP設定画面が難解すぎて生きるのが辛い

Gmail使ってますよね。もうメール = Gmailなのではないでしょうか。 メールそれ自体はとても古い技術に基づいており、これだけ分散してまともに動いている仕組みは他にDNSくらいなんじゃないかなと思いますが、どちらも問題を抱えていて、特にメールはスパムやらとの戦いの場となっていて多分当面この状況は変わらないんじゃないかなと思います。 しかし、メール = Gmailを意味する世界になっているのだとしたら、もうあまり深いこと考えなくてもそういうもんだと思って使っていけるんじゃないかなあと思いつつ、いい加減代替手段が出てきてもいいよねと思っている次第です。

さて、そんなGmailですが、メールの仕組みの上に乗っかっているサービスなので、とんでもない複雑な設定画面がくっついています。いや、結果的にそうなってしまいました。

新しいデザインになったりしたね

そして、設定画面の中で最難関なのがIMAPの挙動の設定ではないでしょうか。はっきりいって、普通に読んだだけでは何を言ってるのかさっぱりわけが分かりません。

まず、そもそものIMAPの設定画面ですが、Gmailの設定タブ「メール転送と POP/IMAP」の中にあります。そして以前に「Labs」の一分の機能として用意されていたAdvanced IMAP Controlsが標準になっていて、これが設定の複雑さを増しています。

というわけで今回は、この設定をひとつずつ意味を理解しながら見ていきたいと思います。

メール転送と POP/IMAP

IMAP を有効にする、IMAP を無効にする

IMAPを使うか、使わないか。これはわかる。

フォルダ サイズの制限

順番逆ですが、これは簡単なので先に。 これで1つのIMAPのフォルダに現れるメールの最大件数を指定できます。

ご存知の通り[Gmail]/All Mailフォルダには抹消されていない過去の全メールが現れます。ですので、頑張る系のメーラーでこのフォルダに触れた途端、過去のン万件のメールをダウンロードし出します。これはその挙動をなんとかするための設定で、多分、時間順で新しい方から1000件までしか現れないようにする、みたいなことができます。最低1000件なので、それは我慢しましょう。

IMAP のメールを削除するようマークを付けた場合(自動消去をオン/オフ)と、最後に表示された IMAP フォルダからメールを削除/消去するようマークを付けた場合

これが難解。この2つの設定、パッと見では意味不明ですね。実は日本語では難解度が上がるっていうかちゃんと翻訳されていないので、英語の設定画面を見てみます。それぞれ、

となっています。一部太字にしました。これらの単語は日本語訳では意味が失われているか、意味を取り違えて翻訳されています。しかし、英語にしてもやっぱり意味不明なんですね。 そこで、この挙動を理解するにはIMAPのフォルダとGmailのラベルの関係と、IMAPのプロトコルでの削除の挙動を理解する必要があります。

まず、GmailのIMAPでは、GmailのラベルはIMAPのフォルダとして機能します。つまりあるメールがUrgentBugという2つのラベルを持っていた場合、同じメールがUrgentBug[Gmail]/All Mailの3つのフォルダに登場します。でも実態は1つです。 もしすべてのラベルがなくなった場合でも、[Gmail]/All Mailには残ります。

次にIMAPのプロトコルですが、IMAPでのメーラーがメールを削除する時には次のようにコマンドを発行します。EXPUNGEではなくてCLOSEを使ったほうが行儀がいいという話もあるようですが、後述の理解を深めるためにEXPUNGEにしておきます。

# INBOXフォルダを開く
SELECT "INBOX"

# Deletedフラグを立てる
STORE 1 +FLAGS (\Deleted)

# Deletedフラグを立てたメールを抹消する
EXPUNGE

IMAPは状態のあるプロトコルで、メールを削除するときには、特定のフォルダを開いてそのフォルダのメール対して削除フラグを立ててそして最後に実際に削除するという流れになります。Gmailの設定でいうところの英語「Expunge」はこのIMAPのEXPUNGEコマンドを意味していて、最初のオプションは、このコマンドを自動でサーバ側で発行するかしないかを選択するオプションになっています。

デフォルトではAuto-Expungeは、つまり自動消去はオンになっています。つまり、GmailではメーラーがDeletedフラグをSTOREコマンド立てると、裏でEXPUNGEが走る仕組みになっていて、その瞬間に「そのフォルダが表すラベルがメールから消される」という挙動をします。 ポイントは、ラベルが消されるというだけでメールが本当に消されるわけではない、という点です。この自動消去の挙動では、メールは[Gmail]/Trashには移動しません。[Gmail]/All Mailには依然表示されます。[Gmail]/All Mailで削除を実行した場合EXPUNGEしても削除されません。

自動消去をオフにするとDeletedフラグをSTOREコマンドで追加しただけでは何もしないようになります。つまり、よりメーラーが期待するIMAPサーバの振る舞いに近いものになると言えます。ちなみに、Deletedフラグを立てただけでEXPUNGEしないとそのメールはDeletedフラグが立ったまま残ります。この状態はウェブからは全く見えません。

そして、自動消去をオフにすることで、次のオプションが有効になり、メーラーからEXPUNGEコマンドが発行された際に、Gmailがどのように振る舞うのかを選ぶことができます。

まずEXPUNGEを実行したフォルダが表すラベルがある場合は、そのラベルがメールから削除されます。次に、もし、そのメールがどのIMAPプロトコルから見えるフォルダにも登場しない場合(この太字にした部分が設定画面の日本語訳では誤って訳されています)、つまり「ラベル」の設定タブで「IMAP で表示」としたもののうち、どのフォルダにも登場しない場合、つまり条件式として書くと、

EXPUNGE を実行したときに:
すべてのラベルが削除されていて &&
([Gmail]/All Mail 上で EXPUNGE を実行した ||
 [Gmail]/All Mail を IMAP で表示しないようにしている場合)

に、次の中から挙動を選べます。

難解ですね。これは様々なIMAPのメーラーがそれぞれ異なった挙動をすることと、GmailのラベルがIMAPの概念にまったく合ってないことに起因していると思います。

ユーザーはこれらの挙動と利用するメーラーがメールをメーラー上で削除したときに発行するIMAPコマンドの挙動とを照らしあわせて、最適なIMAP環境を構築することになります。

で、こんな解説どこに載ってんねんって話ですが、いちおう、ここでGmailのエンジニアが書いてます… こんな挙動わかるかいな!!!


まとめ。このIMAPの設定を使いこなすにはIMAPのプロトコルを知る必要があります。仕様はRFC3501(といくつかのRFCで構成されている)なので読んでみることとおすすめします。

また、これらの挙動を踏まえて、最も普通のIMAPサーバーと同じ挙動にするには、

とかでなんとなくうまく行くんじゃないかなーって気がしますがこの設定だとメールを消すと本気で消えるのでご利用は計画的に。

あと、一応、今回このブログを書くのには実際にGmailのIMAPサーバとIMAPでおしゃべりして挙動を確認しています。ですがあくまでもこれが書かれた時点での挙動ですので今後変わるかもしれませんね。

というわけで、快適なGmailライフを!