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

そして、設定画面の中で最難関なのがIMAPの挙動の設定ではないでしょうか。はっきりいって、普通に読んだだけでは何を言ってるのかさっぱりわけが分かりません。
まず、そもそものIMAPの設定画面ですが、Gmailの設定タブ「メール転送と POP/IMAP」の中にあります。そして以前に「Labs」の一分の機能として用意されていたAdvanced IMAP Controlsが標準になっていて、これが設定の複雑さを増しています。
というわけで今回は、この設定をひとつずつ意味を理解しながら見ていきたいと思います。

IMAP を有効にする、IMAP を無効にする
IMAPを使うか、使わないか。これはわかる。
フォルダ サイズの制限
順番逆ですが、これは簡単なので先に。 これで1つのIMAPのフォルダに現れるメールの最大件数を指定できます。
ご存知の通り[Gmail]/All Mail
フォルダには抹消されていない過去の全メールが現れます。ですので、頑張る系のメーラーでこのフォルダに触れた途端、過去のン万件のメールをダウンロードし出します。これはその挙動をなんとかするための設定で、多分、時間順で新しい方から1000件までしか現れないようにする、みたいなことができます。最低1000件なので、それは我慢しましょう。
IMAP のメールを削除するようマークを付けた場合(自動消去をオン/オフ)と、最後に表示された IMAP フォルダからメールを削除/消去するようマークを付けた場合
これが難解。この2つの設定、パッと見では意味不明ですね。実は日本語では難解度が上がるっていうかちゃんと翻訳されていないので、英語の設定画面を見てみます。それぞれ、
- When I mark a message in IMAP as deleted: Auto-Expunge on/off
- When a message is marked as deleted and expunged from the last visible IMAP folder
となっています。一部太字にしました。これらの単語は日本語訳では意味が失われているか、意味を取り違えて翻訳されています。しかし、英語にしてもやっぱり意味不明なんですね。 そこで、この挙動を理解するにはIMAPのフォルダとGmailのラベルの関係と、IMAPのプロトコルでの削除の挙動を理解する必要があります。
まず、GmailのIMAPでは、GmailのラベルはIMAPのフォルダとして機能します。つまりあるメールがUrgent
とBug
という2つのラベルを持っていた場合、同じメールがUrgent
とBug
と[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 で表示しないようにしている場合)
に、次の中から挙動を選べます。
-
メールをアーカイブする デフォルトの挙動です。結果的に何もしません。
[Gmail]/All Mail
を見えるようにしていてもいなくても、あるいは[Gmail]/All Mail
でEXPUNGE
を実行したとしても消えません。 -
メッセージをゴミ箱に移動 そのメールを
[Gmail]/Trash
に移動します。つまりGmail上のゴミ箱です。[Gmail]/All Mail
からも消えます。30日ほど放置するとGmailから消されます。 -
メールを今すぐ完全に削除する そのメールをその時点で抹消します(「今すぐ」って… これも設定画面の誤訳)。
[Gmail]/Trash
にすら残りません。つまりGmail上でそのメールを削除してさらにゴミ箱から削除を選んだ挙動です。
難解ですね。これは様々なIMAPのメーラーがそれぞれ異なった挙動をすることと、GmailのラベルがIMAPの概念にまったく合ってないことに起因していると思います。
ユーザーはこれらの挙動と利用するメーラーがメールをメーラー上で削除したときに発行するIMAPコマンドの挙動とを照らしあわせて、最適なIMAP環境を構築することになります。
で、こんな解説どこに載ってんねんって話ですが、いちおう、ここでGmailのエンジニアが書いてます… こんな挙動わかるかいな!!!
まとめ。このIMAPの設定を使いこなすにはIMAPのプロトコルを知る必要があります。仕様はRFC3501(といくつかのRFCで構成されている)なので読んでみることとおすすめします。
また、これらの挙動を踏まえて、最も普通のIMAPサーバーと同じ挙動にするには、
- 「IMAP のメールを削除するようマークを付けた場合」は「自動消去オフ」
- 「メールを今すぐ完全に削除する」にする
- 「ラベル」の設定で、「すべてのメール(All Mail)」の「IMAPに表示」のチェック外す
とかでなんとなくうまく行くんじゃないかなーって気がしますがこの設定だとメールを消すと本気で消えるのでご利用は計画的に。
あと、一応、今回このブログを書くのには実際にGmailのIMAPサーバとIMAPでおしゃべりして挙動を確認しています。ですがあくまでもこれが書かれた時点での挙動ですので今後変わるかもしれませんね。
というわけで、快適なGmailライフを!