【问题标题】:Find Gmail url-IDs via IMAP通过 IMAP 查找 Gmail url-ID
【发布时间】:2010-12-13 19:59:37
【问题描述】:

我最喜欢的 Gmail 功能之一是能够为某些邮件的网址添加书签,如下所示:

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

我想做的是编写一个脚本,通过 IMAP 访问我的 Gmail 帐户,并创建一个 HTML 页面,其中包含指向我感兴趣的每封邮件的链接。

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

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

-- Felix Geisendörfer aka the_undefined

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

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

我尝试了ruby imap docs 中为 FetchData 列出的所有属性

【问题讨论】:

  • 更新:我将赠送 25 美元的亚马逊礼券给任何知道答案的人! 贿赂>
  • 嗨,我想知道您是否找到了解决此问题的方法 - 我也遇到了类似的情况,希望您有任何想法。基本上我需要某种方法来唯一地识别来自一个应用程序,并能够根据该方法查询它们。
  • 不,我没有进一步了解这个 - 抱歉。
  • 嘿,如果您仍在寻找答案,请在下面发布答案。我花了两天时间盯着这些数字,直到它击中我:)
  • 我认为可以通过 IMAP 做到这一点(并且接受的答案不正确)。请参阅下面的答案。

标签: gmail imap


【解决方案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

【讨论】:

    【解决方案2】:

    似乎 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

    【讨论】:

    • 我没有与 IMAP 结婚,但我确实需要某种方式来自动搜索整个收件箱并链接到匹配的项目。
    • 你会认为也许所有的邮件都可能有相同的线程ID。
    • OP 提到尝试 Ruby,不幸的是 Ruby Net::IMAP 在解析包含此属性的响应时抛出异常。我通过修补 Ruby 的 NET::Imap 库来解决这个问题:gist.github.com/1404434
    【解决方案3】:

    我认为接受的答案是不正确的(在这一点上,也许当时是正确的)。

    如果您查看 atom 提要 (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,而无需使用 atom 提要。

    【讨论】:

    • 不幸的是,我认为这个 URL 中的 message_id 实际上是 X-GM-MSGID 而不是 IMAP/RFC822 ID。
    • @studgeek:是的,我就是这么说的。
    【解决方案4】:

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

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

    另请参阅文档here

    【讨论】:

    • 您似乎有使用 IMAP 的经验,想联系一个项目,您有空吗?
    • @3zzy 检查您的电子邮件。
    【解决方案5】:

    我也在为此苦苦挣扎,然后我发现 UID 实际上与 Google Message ID 相同。

    UID 是一个整数,而 Google 消息 ID 是它的十六进制版本。

    不确定 ruby​​ 中的转换,但试试这个:Converting an integer to a hexadecimal string in Ruby

    【讨论】:

      【解决方案6】:

      发现了一些东西。可能有人需要。我不知道怎么用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
      

      【讨论】:

      【解决方案7】:

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

      【讨论】:

      • 我想这是正确的答案,不幸的是:)。我希望通过 IMAP 找到一种方法。
      【解决方案8】:

      我使用一个名为Notify 的 Mac 菜单栏应用程序,它向我显示新的 GMail 消息,我可以双击这些消息以在 GMail 网站上找到它们。在我的 GMail 设置中,IMAP 和 POP 都被禁用了,所以这可能是解决方案。

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

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

      (有些编辑,以防它是个人的)

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

      【讨论】:

        【解决方案9】:

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

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

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

        “q=”部分之后的内容是来自 IMAP 的电子邮件的 Message-ID。

        现在您可以从 HTML 中抓取所需邮件的“GMail ID”,搜索带有如下目标 URL 的链接:

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

        “th”之后的部分是你需要的。

        讨厌,可能效率很低,但这很可能是您最接近解决方案的地方。

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

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

        最后一部分是Message-ID头域的值。这样,您会得到一个搜索结果,但您仍然需要单击它才能查看。

        【讨论】:

        • 好的,对于 message-id 的搜索是可以接受的。给我发电子邮件/PM,我会送你一张 15 美元的礼券,以获得最干净的部分解决方案,好吗?
        • 请注意,您实际上需要在搜索中使用rfc822msgid: 关键字。所以实际的 URL 是https://mail.google.com/mail/u/0/#search/rfc822msgid%3A2AE41111.1234123@gmail.com
        猜你喜欢
        • 2014-07-04
        • 2012-08-17
        • 1970-01-01
        • 2013-02-06
        • 1970-01-01
        • 2014-12-28
        • 1970-01-01
        • 2011-12-26
        • 2020-05-21
        相关资源
        最近更新 更多