25

ウェブ インターフェース、Google の Android クライアント、または IMAP を使用して、gmail にアクセスできます。私が知る限り、Web インターフェースと Android アプリは IMAP とはまったく異なるプロトコルを使用しています。それらは単なるインターフェースではありません。私が確信している理由は、Android アプリが 1m のメールを含むフォルダを 3 秒未満で問題なく開くことができるためです。普通の IMAP クライアントではそれができません。

では、私の質問は、この秘密のプロトコルについて何が知られているのでしょうか? その参照ドキュメントはどこにありますか? リバースエンジニアリングされていますか?Google はその使用を許可していますか?

arnt の回答は、gmail の生の imap 速度をテストするための優れた方法を提供します。

$ openssl s_client -host imap.gmail.com -port 993 -crlf 
...
* OK Gimap ready for requests from 12.34.56.78
$ a LOGIN ***@*** ***
a OK
$ c SELECT "[Gmail]/All mail" !!!!
* FLAGS (\Answered \Flagged \Draft \Deleted \Seen)
* OK [PERMANENTFLAGS (\Answered \Flagged \Draft \Deleted \Seen \*)] Flags permitted.
* OK [UIDVALIDITY 673376278] UIDs valid.
* 1142417 EXISTS
* 0 RECENT
* OK [UIDNEXT 1159771] Predicted next UID.
* OK [HIGHESTMODSEQ 8670601]
c OK [READ-WRITE] [Gmail]/All mail selected. (Success)

マークしたコマンドは、完了するまでにc SELECT "[Gmail]/All mail"20 秒かかります。その時間は、私の比較的能力の低い Android フォンの GMail アプリが起動して [すべてのメール] ラベルを読み込むのにかかる時間よりも長いため、キャッシュを削除した後でも 6 秒以内に実行されます。Web クライアントはさらに高速です。

何か基本的なことが抜けていない限り、SELECT コマンドが完了するまで 20 秒待つ必要がないため、Google の GMail クライアントが IMAP を使用していないことは「合理的な疑いを超えて」証明されます。

4

4 に答える 4

11

さらに調査した結果、GMail 用の API が存在することがわかりました: https://developers.google.com/gmail/api/ 2013 年にこの質問を投稿したときに API がリリースされたとは思いません。

その API を使用して、ラベルの最後の 100 通のメールを取得するデモ プログラムを作成しました

プログラムの関連部分は次のとおりです。

resource = service.users().messages()
result = resource.list(userId = 'me', labelIds = [label]).execute()
mail_ids = [m['id'] for m in result['messages']]

start = time()
mails = []
batch = BatchHttpRequest()
cb = lambda req, res, exc: mails.append(to_mail(res))
for mail_id in mail_ids:
    get_request = resource.get(**headers_params(mail_id))
    batch.add(get_request, callback = cb)
result = batch.execute()
print('Took %.2f seconds' % (time() - start))

570,000 件を超えるメッセージを含むラベル (IMAP 用語ではフォルダー) に、日付順に並べ替えられた最後の 100 件のメッセージが一覧表示されます。

私のマシンでは、このループには約 0.5 ~ 0.8 秒かかります。純粋な IMAP クライアントは地球上に存在しないと自信を持って断言できます。IMAP は、Google が内部的にメールを保存する方法にはあまり適していないため、今後も高速化されることはありません。

だから私は自分の質問に答えます。これは彼らが使用している API であり、以前は公開されていませんでした。

于 2016-10-16T19:52:11.703 に答える
11

Android アプリ (少なくとも私が使用したもの) は IMAP を使用します。これは、サーバーで Wireshark を実行することで確認できます。

Android アプリが非常に高速な理由について、私が知っているのは、SEARCH コマンドを使用して最新のnメッセージを選択することです。Thunderbird や Outlook などのデスクトップ クライアントははるかに重量があり、ダウンロードしないように推奨されていますが、フォルダー内のすべてのメッセージのヘッダーとメタデータをダウンロードします。

スマートフォンには、何百万通ものメールを保存して処理するためのリソースがありません (ただし、最新のメールはそこに到達している可能性があります)。そのため、SEARCH アプローチにより、ハンドヘルド デバイスからすばやくメールにアクセスできるようになりました。

とにかく、Wireshark は、IMAP クライアントとサーバーの動作について多くのことを明らかにすることができます。本当に気になる方は是非挑戦してみてください。サーバーが Gmail の場合、これを行うことはできませんが、別のサーバー (hMailServer など) で試すことができます。

于 2013-09-05T14:50:30.997 に答える
1

「これができる IMAP クライアントは他にない」というのはかなり大胆な表現ですが、100 万通のメッセージもかなりの数です。ここでTrojitáを試してみることをお勧めします。最初の同期はかなり遅くなる可能性があります (IMAP フラグ 、SELECTSEARCHおよびSTATUSの指定方法に関連するさまざまな技術的な理由によりESEARCH、数百万のメッセージのフラグが転送さCONDSTOREれます)。 QRESYNC. Trojitá があなたのセットアップでどのように機能するかを知りたいです。連絡先情報はホームページに記載されています。

あなたの質問に -- 最近のほとんどのウェブメールは、独自に使用するためのプライベート API を提供しています。典型的なアーキテクチャは、JSON を介して更新された状態に関するメッセージを転送することですが、これには標準がなく、インターフェイスは独自のものです。GMail の「アプリ」が同じ (または同様の) メソッドを使用している可能性があります。TLS を使用している可能性が高いため、これを確認するオプションはあまりありません。Web インターフェイスでは、適切なブラウザ プラグインを使用してトラフィックを確認するのは簡単ですが、スタンドアロンの Android アプリケーションではそれほど多くはありません。

于 2013-09-02T11:44:34.677 に答える