通过IMAP查找Gmail网址ID

时间:2009-11-06 12:59:21

标签: gmail imap

我最喜欢的Gmail功能之一是能够将网址添加到某些邮件中,例如:

https://mail.google.com/mail/#all/124c8f386d41fd3a

我想要做的是编写一个脚本,通过IMAP访问我的Gmail帐户,并为我感兴趣的每条消息创建一个包含上述链接的HTML页面。

但是,似乎无法从IMAP信封或UUID属性中找到“124c8f386d41fd3a”ID。我发现的所有message-id和uuids都有不同的格式,不能用于生成有关我收件箱的有效链接。

有人知道如何在IMAP中找到这些网址ID吗?

- FelixGeisendörfer又名the_undefined

PS:我正在使用Ruby,之前的尝试包括:

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

我在ruby imap docs

中尝试了为FetchData列出的所有属性

9 个答案:

答案 0 :(得分:18)

Gmail为线程ID提供了一个属性:X-GM-THRID

您可以使用imap fetch函数获取线程ID。

另见文档here

答案 1 :(得分:11)

找到了一些东西。可能是有需要的人。我不知道如何使用ruby,我想使用php,但不知道如何在php中扩展标准的imap函数。

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

答案 2 :(得分:6)

似乎Google链接(https://mail.google.com/mail/#all/124c8f386d41fd3a)指向整个对话。

IMAP本身没有此类功能(分组​​对话)

[更新]

可以使用 X-GM-THRID Gmail的IMAP扩展程序。

124c8f386d41fd3a是Gmail的十六进制的线程ID

您可以在这里阅读更多内容: http://www.limilabs.com/blog/create-gmail-url-id-via-imap

答案 3 :(得分:3)

这似乎是GMail网络用户界面内部的东西。我可以想象这样的解决方法:

  • 使用基本HTML模式登录GMail,并获取会话cookie
  • 使用curl,wget或与此会话cookie类似的任何东西来获取页面

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

'q ='部分之后的东西是来自IMAP的电子邮件的消息ID。

现在,您可以从HTML中抓取所需消息的“GMail ID”,搜索包含以下内容的目标网址的链接:

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

'th'之后的部分是你需要的部分。

讨厌,可能非常低效,但这可能是你得到解决方案的最接近的。

如果你不是那么绝望,你可以使用搜索网址,它以最简单的形式,使用标准用户界面,如下所示:

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

最后一部分是Message-ID标头字段的值。这样,您可以获得单个搜索结果,但仍需单击它才能查看。

答案 4 :(得分:2)

我认为接受的答案是不正确的(此时,也许当时正确)。

如果您查看原子Feed(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。您可以通过IMAP检索X-GM-MSGID,因此您应该能够通过IMAP构建所需的URL,而无需使用原子Feed。

答案 5 :(得分:1)

我使用名为Notify的Mac菜单栏应用程序向我显示新的GMail消息,我可以在GMail网站上双击它们。我的GMail设置中禁用了IMAP和POP,因此可能就是解决方案。

带我到该消息的URL如下所示:

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

(如果是个人的话会有所修改)

我想知道source=atom是否对您有所帮助,因为此应用程序似乎可以访问您要查找的ID。

答案 6 :(得分:1)

已经有一段时间了但发现自己正在寻找这些信息的任何人都应该阅读:

  
    

Gmail为每封电子邮件提供唯一的邮件ID,以便在多个文件夹中识别唯一邮件。检索这个     通过FETCH上的X-GM-MSGID属性支持消息ID     命令。消息ID是64位无符号整数,是     Web界面中使用的ID十六进制字符串的十进制等效值     Gmail API。

  
     

以下是检索调用的示例脚本   带有FETCH命令的消息的X-GM-MSGID:

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

X-GM-MSGID属性也可用于SEARCH或UID SEARCH   用于查找给定消息的序列号或UID的命令   Gmail的消息ID。以下是呼叫的示例脚本   使用UID SEARCH命令检索消息的UID:

 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

答案 7 :(得分:0)

我也在努力解决这个问题,然后我发现UID与Google Message ID实际上是一样的。

UID是一个整数,Google Message ID是十六进制版本。

不确定ruby中的转换,但请尝试以下操作:Converting an integer to a hexadecimal string in Ruby

答案 8 :(得分:-2)

实际上,获取消息直接链接的唯一官方方法是通过atom feed gmail提供未读消息(https://gmail.google.com/gmail/feed/atom)... 唯一的困难是你必须进行身份验证,这在使用Feed时并不常见,而且目前有15条新消息的限制,因此任何较新的消息都会“踢出”最老的消息! 我希望他们很快能以其他方式提供它,无论是通过IMAP还是API ......