Подтвердить что ты не робот

Найти 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

4b9b3361

Ответ 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