Найти Gmail URL-идентификаторы через IMAP

Одна из моих любимых функций Gmail - возможность добавлять ссылки на определенные сообщения, например, так:

https://mail.google.com/mail/

Я хотел бы написать скрипт, который обращается к моей учетной записи Gmail через IMAP и создает HTML-страницу со ссылками, подобными приведенным выше, на каждое интересующее меня сообщение.

Однако кажется, что нет способа найти идентификатор "124c8f386d41fd3a" из конверта IMAP или свойств UUID. Все идентификаторы и идентификаторы сообщений, которые я нахожу, имеют другой формат и не могут использоваться для создания действительных ссылок на мой почтовый ящик.

Кто-нибудь знает, как найти эти URL-адреса в IMAP?

- Феликс Гейзендёрфер aka the_undefined

PS: я использую Ruby, и мои предыдущие попытки включали:

imap.fetch(message_id, "UID")
imap.fetch(message_id, "ENVELOPE")
imap.fetch(message_id, ...)

Я перепробовал все свойства, перечисленные для FetchData в документах ruby ​​imap

9 ответов

Решение

На самом деле, единственный официальный метод получения прямой ссылки на сообщение - через атомную ленту, которую gmail предоставляет непрочитанным сообщениям ( https://gmail.google.com/gmail/feed/atom)... Единственная сложность заключается в том, что вы приходится проходить проверку подлинности, что не так часто встречается при использовании фидов, и в настоящее время существует ограничение, равное примерно 15 новым сообщениям, поэтому любое более новое сообщение "удалит" самое старое! Я надеюсь, что они скоро предоставят это другим способом, будь то через IMAP или API...

Gmail предоставляет атрибут: X-GM-THRID для идентификатора потока.

Ты можешь использовать imap fetch функция для получения идентификатора потока.

Также см. Документацию здесь.

Нашел что-то. Может быть, кому-то нужно. Я не знаю, как использовать ruby, я хочу использовать php, но не знаю, как расширить стандартные функции imap в php.

openssl s_client -crlf -connect imap.gmail.com:993
. login username password
. select inbox
. FETCH 1 (X-GM-THRID)

вы получите что-то вроде этого * 1 FETCH (X-GM-THRID 1327644190303473294)Далее вам нужно преобразовать его из десятичного в шестнадцатеричное значение:

<?php echo dechex(1327644190303473294); ?> //return 126cbd5b5f264e8e

Похоже, что ссылка Google ( https://mail.google.com/mail/) указывает на весь разговор.

Сам IMAP не имеет такой функции (группировка разговоров)

[Обновить]

Это возможно с расширением IMAP X-GM-THRID Gmail.

124c8f386d41fd3a - это идентификатор потока Gmail в шестнадцатеричном формате.

Вы можете прочитать больше здесь: http://www.limilabs.com/blog/create-gmail-url-id-via-imap

Кажется, это что-то внутреннее в веб-интерфейсе GMail. Я могу представить обходной путь, как это:

  • войдите в GMail, используя основной режим HTML, и получите куки сеанса
  • используйте curl, wget или что-то подобное с этим файлом cookie сессии, чтобы получить страницу

    https://mail.google.com/mail/h?s=q&q=2AE41111.1234123@gmail.com

где вещь после части 'q=' - это идентификатор сообщения электронной почты из IMAP.

Теперь вы можете очистить "GMail ID" нужного вам сообщения из HTML, найти ссылку с целевым URL, который выглядит следующим образом:

?v=c&s=q&q=2AE41111.1234123%40gmail.com&th=124ae57b77769275

Часть после 'th' - это то, что вам нужно.

Неприятно, возможно, очень неэффективно, но это может быть очень близко к решению.

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

https://mail.google.com/mail/#search/2AE41111.1234123@gmail.com

Последняя часть является значением поля заголовка Message-ID еще раз. Таким образом, вы получите один результат поиска, но вам все равно придется щелкнуть по нему для просмотра.

Я думаю, что принятый ответ неверен (на данный момент, возможно, это было правильно в то время).

Если вы посмотрите на атомную ленту (https://gmail.google.com/gmail/feed/atom), вы увидите, что записи выглядят так:

http://mail.google.com/mail?account_id=[EMAIL_ADDRESS]&message_id=1353f6fb621714da&view=conv&extsrc=atom

Message_id - это, вероятно, X-GM-MSGID в шестнадцатеричном формате. Вы можете получить X-GM-MSGID через IMAP, так что вы должны иметь возможность создавать URL-адреса, которые вы хотите через IMAP, без использования канала Atom.

Прошло много времени, но любой, кто ищет эту информацию, должен прочитать это:

Gmail предоставляет уникальный идентификатор сообщения для каждого электронного письма, так что уникальное сообщение может быть идентифицировано в нескольких папках. Получение этого идентификатора сообщения поддерживается с помощью атрибута X-GM-MSGID в команде FETCH. Идентификатор сообщения представляет собой 64-разрядное целое число без знака и является десятичным эквивалентом для шестнадцатеричной строки идентификатора, используемой в веб-интерфейсе и API Gmail.

Ниже приведен пример стенограммы вызова для получения X-GM-MSGID сообщения с помощью команды FETCH:

a006 FETCH 1 (X-GM-MSGID)
* 1 FETCH (X-GM-MSGID 1278455344230334865) a006 OK FETCH (Success)

Атрибут X-GM-MSGID также может использоваться в командах SEARCH или UID SEARCH, чтобы найти порядковые номера или UID сообщения с указанным идентификатором сообщения Gmail. Ниже приведен пример стенограммы вызова для получения UID сообщения с помощью команды UID SEARCH:

 a007 UID SEARCH X-GM-MSGID 1278455344230334865
 * SEARCH 1 a007 OK SEARCH (Success)

Выше приведен отрывок из следующего источника: https://developers.google.com/gmail/imap_extensions?csw=1

Я использую приложение панели меню Mac под названием Notify, которое показывает мне новые сообщения GMail, которые я могу дважды щелкнуть, чтобы перейти к ним на веб-сайте GMail. И IMAP, и POP отключены в моих настройках GMail, поэтому в этом может быть решение.

URL, который приводит меня к сообщению, выглядит следующим образом:

http://mail.google.com/mail/?fs=1&source=atom#all/124fb7xxxxx06752

(несколько отредактировано на случай, если это личное)

Интересно, если source=atom может быть полезным для вас, так как это приложение, похоже, имеет доступ к нужному идентификатору.

Я тоже боролся с этим, а потом обнаружил, что UID на самом деле совпадает с идентификатором сообщения Google.

UID - это целое число, а идентификатор сообщения Google - это шестнадцатеричная версия этого.

Не уверены насчет преобразования в ruby, но попробуйте следующее: преобразование целого числа в шестнадцатеричную строку в Ruby

Другие вопросы по тегам