簡體   English   中英

Google使用什么協議用於Gmail? (不是IMAP或POP)

[英]What protocol does Google use for Gmail? (not IMAP or POP)

您可以使用網絡界面,Google的Android客戶端或使用IMAP訪問Gmail。 據我所知,網絡界面和Android應用程序使用的協議與IMAP完全不同 - 它們不僅僅是接口。 我之所以確定這一點,是因為Android應用程序可以毫無問題地在<3秒內打開1m郵件的文件夾。 沒有普通的IMAP客戶端可以做到這一點。

所以我的問題是這個秘密協議的知識是什么? 它的參考文檔在哪里? 是否進行了逆向工程? 谷歌是否批准其使用?

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客戶端甚至更快。

除非我遺漏了一些基本內容,否則這證明“無可置疑”Google的GMail客戶端不使用IMAP,因為您永遠不需要等待20秒才能完成任何SELECT命令。

Android應用程序(至少是我使用的應用程序)使用IMAP。 您可以通過在服務器上運行Wireshark來驗證這一點。

至於為什么Android應用程序如此之快 - 我所知道的是它使用SEARCH命令來選擇最近的n個消息。 桌面客戶端(如Thunderbird或Outlook)的重量更輕,下載文件夾中每條消息的標題和元數據,盡管建議他們不要這樣做。

智能手機沒有足夠的資源來存儲和處理數百萬封電子郵件(盡管更多現代電子郵件可能會到達那里),因此SEARCH方法允許手持設備快速訪問郵件。

無論如何,Wireshark可以揭示有關IMAP客戶端和服務器行為的大量信息。 如果你真的很好奇,那就試一試吧。 如果服務器是Gmail,則無法執行此操作,但您可以在其他服務器(例如hMailServer)上進行嘗試。

經過更多研究后,我發現GMail有一個API: https//developers.google.com/gmail/api/我不認為我在2013年發布此問題后發布了API。

使用該API,我創建了一個演示程序,用於獲取標簽的最后100封郵件: https//gist.github.com/bjourne/37a9d15b03862003008a1b0169190dbe

該計划的相關部分是:

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))

它列出了包含超過570k消息的標簽(IMAP術語中的文件夾)中按日期排序的最后100條消息。

在我的機器上,此循環大約需要0.5 - 0.8秒。 我可以自信地宣稱,這個星球上沒有純粹的IMAP客戶端 可能,IMAP不會變得更快,因為它不適合Google內部存儲郵件的方式。

所以我會回答我自己的問題。 這是他們正在使用的API,並且之前沒有公開過。

“沒有其他IMAP客戶端可以做到這一點”是一個非常大膽的聲明,但是數百萬條消息也是一個相當大的數字。 我鼓勵你在這里試試Trojitá 有可能初始同步將相當緩慢(它會因為與指定IMAP標志, SELECTSEARCHSTATUS方式有關的各種技術原因而傳輸數百萬條消息的標志),但隨后的重新同步應該是閃電般的快速謝謝到ESEARCHCONDSTOREQRESYNC 我很想知道Trojitá如何與您的設置一起工作 - 聯系信息在主頁上。

對於您的問題 - 現在大多數網絡郵件都提供了一個供自己使用的私有API。 典型的體系結構是通過JSON傳輸有關更新狀態的消息,但是沒有標准,接口是專有的。 有可能GMail“app”使用相同(或類似)的方法。 您沒有太多選項可以驗證這一點,因為它可能使用TLS。 使用Web界面,使用適當的瀏覽器插件查看流量是微不足道的,但使用獨立的Android應用程序則不是這么簡單。

您可以輕松測試gmail的IMAP性能(如果您有一個百萬郵件郵箱)。 打開IMAP連接

openssl s_client -connect imap.gmail.com:993 -crlf

然后登錄並打開您的收件箱。

a login yourname@gmail.com yourpassword
b select inbox

如果收件箱不夠大,請打開您的郵箱(名稱可能因UI語言而異):

c select "[Gmail]/All Mail"

如果SELECT很快但IMAP客戶端速度很慢,那么這是因為客戶端發送了額外/不需要的慢命令。 許多人選擇填寫或更新整個百萬條消息的數據結構,即使它們只顯示40條消息。 這是客戶的選擇,而不是IMAP的緩慢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM