Какой протокол Google использует для Gmail? (не IMAP или POP)

вы можете получить доступ к gmail либо с помощью веб-интерфейса, Android клиента Google или с помощью IMAP. Насколько я могу судить, веб-интерфейс и приложение для Android используют совершенно другой протокол, чем IMAP - это не просто интерфейсы поверх него. Причина, по которой я уверен в этом, заключается в том, что приложение Android может без проблем открыть папку с 1M mail за

Итак, мой вопрос в том, что известно об этом секретном протоколе? Где справочная документация для него? Он был спроектирован наоборот? Google санкционирует его использование?

ответ arnt обеспечивает отличный метод для проверки сырой скорости imap gmail:

$ 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 секунд завершить. Поскольку это время больше, чем требуется для приложения GMail на моем относительно маломощном телефоне Android для запуска и загрузки всей почтовой метки, которая делает это менее чем за 6 секунд даже после того, как я очистил кэши. Веб-клиент работает еще быстрее.

Если я не пропустил что-то основное, это доказывает "вне разумных сомнений", что клиенты GMail Google не используют IMAP, так как вам никогда не придется ждать 20 секунд для завершения любой команды SELECT.

4 ответов


приложение для Android (по крайней мере, те, которые я использовал) использует IMAP. Вы можете проверить это, запустив Wireshark на сервер.

Что касается того, почему приложение для Android так быстро - я знаю, что он использует команду поиска, чтобы выбрать самый последний n сообщения. Настольные клиенты, такие как Thunderbird или Outlook, намного тяжелее и загружают заголовки и метаданные для каждого сообщения в папке, несмотря на рекомендации для них не делать этого.

смартфон не не иметь ресурсов для хранения и обработки миллионов писем (хотя более современные могут попасть туда), поэтому поисковый подход позволил быстрый доступ к почте для портативных устройств.

во всяком случае, Wireshark может многое рассказать о поведении клиентов и серверов IMAP. Если тебе действительно интересно, попробуй. Вы не можете сделать это, если сервер Gmail, но вы можете попробовать его на другом сервере (например, hMailServer).


после дополнительных исследований я обнаружил, что существует API для GMail:https://developers.google.com/gmail/api/ я не думаю, что API был выпущен, когда я опубликовал этот вопрос еще в 2013 году.

используя этот 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))

в нем перечислены последние 100 сообщений, отсортированных по дате в метке (папка в терминологии IMAP), содержащей более 570k сообщений.

на моей машине, этот цикл занимает около 0,5 - 0,8 секунды. Я могу с уверенностью утверждать, что нет чистого клиента IMAP на планете подходит еще ближе. Вероятно, IMAP никогда не будет быстрее, потому что он плохо подходит для того, как Google хранит почту внутри.

поэтому я отвечу на свой вопрос. Это API, который они используют, и он не был представлен ранее.


"ни один другой клиент IMAP не может сделать это" - довольно смелое заявление, но миллион сообщений-это довольно большое число. Я бы посоветовал вам дать Trojitá попробуйте здесь. Скорее всего, начальная синхронизация будет довольно медленной (она передаст флаги для этого миллиона сообщений по различным техническим причинам, связанным с тем, как флаги IMAP,SELECT, SEARCH и ), но последующие resynchronizaiton должна быть молниеносной спасибо к ESEARCH, CONDSTORE и QRESYNC. Мне было бы интересно узнать, насколько хорошо Trojitá работает с вашей настройкой-контактная информация находится на главной странице.

на ваш вопрос-большинство webmails сегодня предоставить собственным API для собственных нужд. Типичной архитектурой является передача сообщений об обновленном состоянии через JSON, но для этого нет стандарта, и интерфейс является prioprietary. Скорее всего, "приложение" GMail использует тот же (или аналогичный) метод. У вас не так много вариантов проверьте это, как это, вероятно, с помощью TLS. С веб-интерфейсом тривиально видеть трафик с соответствующим плагином браузера, но не так много с автономным приложением для Android.


вы можете легко проверить производительность IMAP gmail (если у вас есть почтовый ящик с миллионом сообщений). Откройте соединение IMAP с

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

затем войдите в систему и откройте папку "Входящие".

a login yourname@gmail.com yourpassword
b select inbox

или откройте окно allmail, если почтовый ящик недостаточно большой (имя может варьироваться в зависимости от языка пользовательского интерфейса):

c select "[Gmail]/All Mail"

если SELECT быстро, но клиент IMAP медленно, то это потому, что клиент отправляет дополнительные/ненужные медленные команды. Многие выбирают заполнение или обновление структуры данных для весь миллион сообщений, даже если они будут отображать только 40 сообщений. Это выбор клиента, а не медлительность IMAP.