Найти URL-адреса Gmail через IMAP
Одна из моих любимых функций Gmail - возможность закладки URL-адресов для определенных сообщений, таких как:
https://mail.google.com/mail/#all/124c8f386d41fd3a
Что мне нужно сделать, это написать script, который обращается к моей учетной записи Gmail через IMAP и создает HTML-страницу со ссылками, подобными приведенным выше, каждому интересующему вас сообщению.
Однако, похоже, нет способа найти идентификатор "124c8f386d41fd3a" из конвертов IMAP или свойств UUID. Все идентификаторы сообщений и uuids, которые я нахожу, имеют другой формат и не могут использоваться для создания допустимых ссылок на мой почтовый ящик.
Кто-нибудь знает, как найти эти URL-адреса в IMAP?
- Феликс Гейзендорфер aka the_undefined
PS: Я использую Ruby и мои предыдущие попытки:
imap.fetch(message_id, "UID")
imap.fetch(message_id, "ENVELOPE")
imap.fetch(message_id, ...)
Я попробовал все свойства, перечисленные для FetchData, в ruby imap docs
Ответы
Ответ 1
На самом деле, единственный официальный метод получения прямой ссылки на сообщение - через подачу атома gmail предоставляет непрочитанные сообщения (https://gmail.google.com/gmail/feed/atom)...
Единственная трудность заключается в том, что вы должны аутентифицироваться, что не так часто встречается с помощью фидов, и в настоящее время существует ограничение на 15 новых сообщений, поэтому любое новое сообщение "выкинет" самое старое!
Я надеюсь, что они скоро предоставят его каким-то другим способом, будь то через IMAP или API...
Ответ 2
Gmail предоставляет атрибут: X-GM-THRID
для идентификатора потока.
Вы можете использовать функцию imap fetch
для получения идентификатора потока.
Также см. документацию здесь.
Ответ 3
Нашел что-то. Может быть кому-то нужно. Я не знаю, как использовать 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
Ответ 4
Кажется, что ссылка google (https://mail.google.com/mail/#all/124c8f386d41fd3a) указывает на весь разговор.
Сам IMAP не имеет такой функции (группировка разговоров)
[Обновление]
Возможно с расширением X-GM-THRID Gmail IMAP.
124c8f386d41fd3a - это Gmail thread-id в hex.
Вы можете прочитать больше здесь:
http://www.limilabs.com/blog/create-gmail-url-id-via-imap
Ответ 5
Это, кажется, нечто внутреннее для веб-интерфейса GMail. Я могу представить себе обходное решение, подобное этому:
- войдите в GMail с использованием основного режима HTML и возьмите файл cookie сеанса
-
используйте curl, wget или что-то подобное с этим cookie сеанса, чтобы получить страницу
https://mail.google.com/mail/h?s=q&[email protected]
где вещь после части "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/[email protected]
Последняя часть - это поле заголовка Message-ID. Таким образом, вы получаете единственный результат поиска, но вам все равно нужно щелкнуть по нему для просмотра.
Ответ 6
Я думаю, что принятый ответ неверен (на данный момент, возможно, это было правильно в то время).
Если вы посмотрите на подачу атома (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.
Ответ 7
Я использую приложение панели меню Mac под названием Notify, которое показывает мне новые сообщения GMail, которые я могу дважды щелкнуть к ним на веб-сайте GMail. Как IMAP, так и POP отключены в моих настройках GMail, поэтому в этом может быть решение.
URL-адрес, который возвращает меня к сообщению, выглядит следующим образом:
http://mail.google.com/mail/?fs=1&source=atom#all/124fb7xxxxx06752
(несколько отредактировано в случае его личного)
Интересно, может ли source=atom
быть полезным для вас, так как это приложение, похоже, имеет доступ к ID, который вы ищете.
Ответ 8
Это было время, но каждый, кто ищет эту информацию, должен прочитать следующее:
Gmail предоставляет уникальный идентификатор сообщения для каждого электронного письма, так что уникальное сообщение может быть идентифицировано в нескольких папках. Получение этого Идентификатор сообщения поддерживается с помощью атрибута X-GM-MSGID на FETCH команда. Идентификатор сообщения - это 64-разрядное целое без знака и является десятичный эквивалент для шестнадцатеричной строки ID, используемой в веб-интерфейсе, и 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 также может быть использован в ПОИСКЕ или ПОИСКИ UID команды для поиска порядковых номеров или 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#access_to_the_gmail_unique_message_id_x-gm-msgid
Ответ 9
Я тоже боролся с этим, и тогда я нашел, что UID на самом деле то же самое, что и идентификатор сообщения Google.
UID - это целое число, а идентификатор сообщения Google - это шестнадцатеричная версия.
Не уверены в конверсии в ruby, но попробуйте следующее: Преобразование целого в шестнадцатеричную строку в Ruby