Найти Gmail URL-идентификаторы через IMAP
Одна из моих любимых функций Gmail - возможность добавлять ссылки на определенные сообщения, например, так:
Я хотел бы написать скрипт, который обращается к моей учетной записи 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