从gmail线程中提取单个消息(Objective-c)

时间:2014-05-23 05:47:03

标签: objective-c parsing gmail imap

我正在尝试使用IMAP(在objective-c中)获取gmail电子邮件,并且我想为每个线程分离在会话中发送的每条消息。为了让自己更清楚,想象一下像这样的对话:

约翰说:嗨迈克,这是第一封电子邮件 迈克回答:嘿约翰,你好吗? 约翰回答:伟大的迈克,谢谢。

如果我通过IMAP收到John的电子邮件,我只会收到一封电子邮件,即:      嘿约翰,你好吗?      5月21日星期三,        嗨,迈克,这是第一封电子邮件

我想从我提取的一个电子邮件中收到两条不同的消息。 第一条消息是“嗨麦克,那是第一封电子邮件” 第二个信息是“嘿约翰,你好吗?”

我查看了标题中的message-id字段,但我无法弄清楚如何将其链接回实际消息。

有什么想法吗? 谢谢!

[编辑]:到目前为止,我可以在John的收件箱中解析电子邮件并提取包含该邮件的相关字符串。但我想要的是实际的消息(带有标题和所有),而不仅仅是包含消息的字符串。

1 个答案:

答案 0 :(得分:0)

Gmail有一个非常好的IMAP扩展程序来执行此操作。不过,我从未尝试过使用objective-c库。

如果您想为一个对话执行此操作,则需要一条消息开头。会话中的任何消息都可以。首先,检索该消息的X-GM-THRID:a uid fetch 23451345 x-gm-thrid,它为您提供64位数字,可能是9876543876543444423.接下来,您在同一个对话中查找其他消息:b uid search x-gm-thrid 9876543876543444423 ,它为您提供该对话中所有消息的UID,并且您已完成。

如果您想对收件箱中的所有会话执行此操作,请发出c uid fetch 1:* x-gm-thrid,它会为您提供一组消息对话元组:"消息123属于对话9876543876543"。

如果您想在每个对话中订购消息,最简单的方法可能是检索internaldate项并按此排序。 Gmail还有一个x-gm-msgid,但我还没有看到它对排序是否有用。