configurar - Encuentra Gmail url-IDs a través de IMAP
servidor pop3 gmail (9)
Una de mis características favoritas de Gmail es la capacidad de marcar direcciones URL de ciertos mensajes como este:
https://mail.google.com/mail/#all/124c8f386d41fd3a
Lo que me gustaría hacer es escribir un script que acceda a mi cuenta de Gmail a través de IMAP y cree una página HTML con enlaces como el anterior a cada mensaje que me interesa.
Sin embargo, parece que no hay manera de encontrar el ID "124c8f386d41fd3a" desde el sobre IMAP o las propiedades UUID. Todos los identificadores de mensajes y las uuids que estoy encontrando tienen un formato diferente y no se pueden usar para generar enlaces válidos a mi bandeja de entrada.
¿Alguien sabe cómo encontrar esas url-IDs en IMAP?
- Felix Geisendörfer alias the_undefined
PD: Estoy usando Ruby y mis intentos anteriores incluyeron:
imap.fetch(message_id, "UID")
imap.fetch(message_id, "ENVELOPE")
imap.fetch(message_id, ...)
Probé todas las propiedades enumeradas para FetchData en los documentos Ruby Imap
Creo que la respuesta aceptada es incorrecta (en este punto, tal vez fue correcta en ese momento).
Si miras el canal de información atom (https://gmail.google.com/gmail/feed/atom), verás que las entradas se ven así:
http://mail.google.com/mail?account_id=[EMAIL_ADDRESS]&message_id=1353f6fb621714da&view=conv&extsrc=atom
El message_id es probablemente el X-GM-MSGID en hexadecimal. Puede recuperar el X-GM-MSGID a través de IMAP, por lo que debería poder construir las URL que desee a través de IMAP, sin usar la alimentación de átomos.
En realidad, el único método oficial para obtener un enlace directo a un mensaje es a través de la fuente atómica que gmail proporciona para los mensajes no leídos ( https://gmail.google.com/gmail/feed/atom ) ... La única dificultad es que tiene que autenticarse, lo cual no es tan común con feeds, y actualmente hay una limitación de como 15 mensajes nuevos, por lo que cualquier mensaje nuevo "expulsará" al más antiguo. Espero que pronto lo proporcionen de alguna otra manera, ya sea a través de IMAP o API ...
Encontre algo. Puede ser que alguien lo necesite. No sé cómo usar ruby, quiero usar php, pero no sé cómo extender las funciones de standap imap en php.
openssl s_client -crlf -connect imap.gmail.com:993
. login username password
. select inbox
. FETCH 1 (X-GM-THRID)
obtendrá algo como esto * 1 FETCH (X-GM-THRID 1327644190303473294)
debe convertirlo de decimal a valor hexadecimal:
<?php echo dechex(1327644190303473294); ?> //return 126cbd5b5f264e8e
Esto parece ser algo interno de la interfaz de usuario web de GMail. Puedo imaginar una solución como esta:
- inicie sesión en GMail utilizando el modo HTML básico y capture la cookie de sesión
use curl, wget o algo similar con esta cookie de sesión para obtener la página
https://mail.google.com/mail/h?s=q&[email protected]
donde lo que está después de la parte ''q ='' es el ID de mensaje del correo electrónico de IMAP.
Ahora puede borrar el "ID de correo electrónico de GMail" del mensaje que necesita del HTML, busque un enlace con una URL de destino que tenga este aspecto:
?v=c&s=q&q=2AE41111.1234123%40gmail.com&th=124ae57b77769275
La parte posterior a la ''th'' es lo que necesitas.
Desagradable, probablemente muy ineficiente, pero esto puede ser lo más cercano a una solución.
Si no estás tan desesperado, puedes usar la URL de búsqueda, que, en su forma más simple, y usando la interfaz de usuario estándar, se ve así:
https://mail.google.com/mail/#search/[email protected]
La última parte es el valor del campo de encabezado de ID de mensaje de nuevo. De esta manera, obtiene un solo resultado de búsqueda, pero aún tiene que hacer clic en él para verlo.
Gmail proporciona un atributo: X-GM-THRID
para la identificación del hilo.
Puedes usar la función imap fetch
para obtener el ID de hilo.
También vea la documentación here .
Ha pasado un tiempo, pero cualquiera que se encuentre buscando esta información debería leer esto:
Gmail proporciona un ID de mensaje único para cada correo electrónico, de modo que se pueda identificar un mensaje único en varias carpetas. La recuperación de este ID de mensaje se admite a través del atributo X-GM-MSGID en el comando FETCH. El ID de mensaje es un entero sin signo de 64 bits y es el equivalente decimal de la cadena hexadecimal de ID utilizada en la interfaz web y la API de Gmail.
El siguiente es un ejemplo de transcripción de una llamada para recuperar el X-GM-MSGID de un mensaje con el comando FETCH:
a006 FETCH 1 (X-GM-MSGID) * 1 FETCH (X-GM-MSGID 1278455344230334865) a006 OK FETCH (Success)
El atributo X-GM-MSGID también se puede usar en los comandos SEARCH o UID SEARCH para encontrar los números de secuencia o UID de un mensaje dado el ID de mensaje de Gmail. El siguiente es un ejemplo de transcripción de una llamada para recuperar el UID de un mensaje usando el comando UID SEARCH:
a007 UID SEARCH X-GM-MSGID 1278455344230334865 * SEARCH 1 a007 OK SEARCH (Success)
lo anterior es un extracto de la siguiente fuente: https://developers.google.com/gmail/imap_extensions?csw=1#access_to_the_gmail_unique_message_id_x-gm-msgid
Parece que el enlace de google ( https://mail.google.com/mail/#all/124c8f386d41fd3a ) apunta a toda la conversación.
El propio IMAP no tiene esa característica (agrupar conversaciones)
[Actualizar]
Es posible con la extensión IMAP de X-GM-THRID Gmail.
124c8f386d41fd3a es el ID de hilo de Gmail en hexadecimal .
Puedes leer más aquí: http://www.limilabs.com/blog/create-gmail-url-id-via-imap
Utilizo una aplicación de la barra de menú de Mac llamada Notify que me muestra los nuevos mensajes de GMail, y puedo hacer doble clic para acceder a ellos en el sitio web de GMail. Tanto IMAP como POP están deshabilitados en mi configuración de GMail, por lo que en este caso puede estar la solución.
La URL que me lleva al mensaje se ve así:
http://mail.google.com/mail/?fs=1&source=atom#all/124fb7xxxxx06752
(algo redactado en caso de que sea personal)
Me pregunto si source=atom
podría ser útil para usted, ya que esta aplicación parece tener acceso a la ID que está buscando.
Yo también estaba luchando con esto, y luego descubrí que el UID es en realidad lo mismo que el ID de mensaje de Google.
El UID es un entero y el ID de mensaje de Google es la versión hexadecimal de ese.
No está seguro acerca de la conversión en ruby, pero intente esto: convertir un número entero en una cadena hexadecimal en Ruby