3

私は電子メールクライアントアプリに取り組んでおり、GMAIL IMAP condstore 機能を使用してラベル、既読、および未読の変更を同期しています。

私のアプリケーションフローは以下のようになります。

1) 最初に「Gmail/All Mail」を選択
2) FETCH 1:* (X-GM-LABELS) (CHANGEDSINCE maximummodseq) のような最後の modseq との最後の同期以降のサーバーからの変更の取得

ここで、IMAP サーバーは、最後の同期以降に検出されたラベル、既読、および未読の変更のメッセージを返します。

ラベル「A」があり、100通のメールがあるとします。ラベル A が削除された場合、サーバーは変更として 100 件のメッセージを返しますが、期待どおりに機能します。

ただし、ラベル「A」の名前がラベル「B」に変更された場合、サーバーは変更として 100 件のメッセージを返す必要がありますが、返されません。

以前にラベル A にあり、ラベル B に名前が変更されたメッセージを同期する方法を教えてください。

PS: IMAP サーバー標準によると、ラベルの一意性は、ラベル名と uid の有効性に基づいて識別されます。

Gmail のラベルは「LIST "" "*"」で取得しています。

ラベルの名前が別のものに変更された場合、それが新しく作成されたラベルなのか、名前が変更されたラベルなのかを調べる方法を考えてみましょう

ありがとうサブビレディ

4

3 に答える 3

3

PS: IMAP サーバー標準によると、ラベルの一意性は、ラベル名と uid の有効性に基づいて識別されます。

本当じゃない。IMAP プロトコルは「ラベル」を定義しません。「メールボックス」とは何か、各メッセージには一連の「フラグ」または「キーワード」があることを定義します。

GMail が IMAP の実装を決定したとき、既存のフラグ メタデータを再利用する代わりに、ラベルの概念をメールボックスの上に押し付けるという不幸な選択をしました。(それにはいくつかの理由があり、有効なものもあれば、そうでないものもあり、その議論は stackoverflow の範囲外です。)

ただし、ラベル「A」の名前がラベル「B」に変更された場合、サーバーは変更として 100 件のメッセージを返す必要がありますが、返されません。

この理解は確かに理にかなっています。GMail の動作が異なるという事実は、IMAP クライアントの観点からは残念です。これを GMail の開発者に報告することをお勧めします。彼らは ietf-imapext メーリング リストを読んでいます。

于 2013-10-30T15:29:34.497 に答える
-2

いいえ、IMAP 言語ではできません。Gmail のラベルは、Google が作成した http(s) API でのみ処理されます。
IMAP は、TCP ポート 143 経由で送信される一連のコマンドを使用するように設計されています。

利用可能なコマンドの一覧を確認できます。

于 2013-10-29T12:25:18.347 に答える