UID値の上限に達していたときの非対応メーラーの動きとその対応方法について

IMAP4使用時において、メッセージが管理されるUID値は、メールボックスフォルダのフォルダごとに管理されていますが、UID値が上限値である(UID値=4294967295)に達してしまっているとき、非対応のメーラーを使っているときには、サーバ側の操作対応が必要なことがあります。メッセージが管理されるUID値に関する説明と、E-Post側の動作と非対応のメーラーであるOutlook側の動き、そして対応方法の提示をします。
  1. UID値の上限値および、E-Post側とOutlook側の動きの推測について

  2. IMAP4プロトコルでは、メッセージがUID値によって管理されます。E-PostシリーズのIMAP4用メールボックスでは、INBOXフォルダ下にできる "uid" ファイルにその連番情報が書き換えられていきます。サブフォルダにもそれぞれ "uid" ファイルができ、連番情報が管理されることになります。このうち、いちばん問題になる可能性があるのは、受信トレイにあたるINBOXフォルダ下のUID値です。

    あるユーザー様から、メールが届いても、Outlook2013側がメールを認識できず、処理ができないというサポート案件がありました。IMAP4ログを調べたところ、UID FETCHの命令でUIDの上限値である32bitの値(4294967295)いっぱいで要求している次のような記録が見つかりました。

    [31/Jan/2016:08:55:55] abcdef from 192.168.xxx.xxx UID FETCH
    97316:4294967295 (UID FLAGS RFC822.SIZE BODY.PEEK[] INTERNALDATE)

    このUID値については、IMAP4プロトコルを規定したRFCのひとつ、RFC2060に規定があります。RFC2060では「2.3.1.1. ユニーク識別子(UID)メッセージ属性」項目では、"A 32-bit value assigned to each message,"=「各メッセージに割り当てられた32ビット値で...」とされています。32ビット値ですから、最大値 4294967295 となります。ちなみに、RFCの規定では、上限値に達したあとのルールは一切決められておりません。

    E-Postシリーズでは、この上限値に達したあとは、最初に戻って "1" から発番していく動きをするように開発されています。しかし、Outlook2013などのIMAP4クライアントソフト(メーラー)では、UID値が上限に達した際の動きがどのようになっているかは、おそらく対応はまちまちであろうと推測され、中にはその処理もまったく想定されていないものがあると推測されます。

    報告された現象は、UIDの上限値に達したためそれ以上メールが届いても、Outlook2013側が認識できない、あるいは処理ができない状態なのではないかと推測されました。ちなみに、UIDの上限値 4294967295 に達してしまったことについて、このような値になってしまうことは、通常の使い方をする限り、あまり考えられないことではあるのですが、この値になっている現状から、次のような対応策を提示いたしました。

  3. 対応策方法について

  4. 受信トレイにあたるE-PostのIMAP4用メールボックスである inbox フォルダのリネームを行います。

    (1) クライアント側のメーラーを閉じておく。
    (2) SSHなどでコンソールにログインする。
    (3) IMAP4用メールボックスフォルダのルートのフォルダ=POP3用に用意されているメールボックスフォルダにアクセスする。
     例)cd /var/spool/epms/inbox/[ドメイン名]/[ユーザー名]
    (4) その中に inbox フォルダがあることを確認。表示された inbox フォルダがE-PostのIMAP4用メールボックスであるので、inbox フォルダのフォルダ名を別名にリネームする。
     例)mv index old_inbox
     ※半角英数字の文字でのリネームを推奨。全角文字にしたいときは "UTF-7の拡張版" でエンコードしなくてはならないため煩雑になる。
    (5) クライアント側のメーラーを起動し、メールの再同期を行う。新しいメールを受信してみて、受信トレイに表示されるか確認する。
    (6) このとき、自動的に新しい inbox フォルダが生成される。"uid" ファイルも、新しく "1" から自動的にふり直される。新着したメールは、新しい inbox フォルダに入る。

    なお、受信トレイに利用してきたフォルダ名を上記例で "old_inbox" にリネームしましたが、そのフォルダがメーラーの画面からそのまま表示されていて、メッセージも読めることを確認してください。念のため、作業はバックアップを取った上で行ってください。なお、サービスの停止・開始などの操作は必要ありません。
IMAP4使用時のメールボックスフォルダの位置は、次の記事を参考にしてください。

(関連FAQ)
方式の違いによるメールボックスフォルダの作成位置について