我正在开发可以确定电子邮件位于哪个 Gmail 选项卡下的应用程序(即Social
、Promotions
等)。有没有办法确定使用 Javamail API 将电子邮件放入哪个 Gmail 选项卡?还是有其他一些应用程序可以确定这一点?
提前致谢。
我正在开发可以确定电子邮件位于哪个 Gmail 选项卡下的应用程序(即Social
、Promotions
等)。有没有办法确定使用 Javamail API 将电子邮件放入哪个 Gmail 选项卡?还是有其他一些应用程序可以确定这一点?
提前致谢。
无法使用 Javamail API 确定类别/选项卡,因为 Google 不会将信息与 IMAP 协议集成。类别/选项卡只能通过 Google 专有的 GMail API 获得。
在标签下的 GMail 设置中,我可以通过单击类别旁边的“显示”来让类别显示为 GMail Web 客户端中的文件夹,但是它们没有出现在 IMAP 请求中。它必须是设计使然,因为没有为类别提供“在 IMAP 中显示”选项。
在现有答案中提到 GMail IMAP 扩展可用于访问 X-GM-THRID 和 X-GM-LABELS
这些扩展在 Google 的 GMail IMAP 文档中进行了解释: https ://developers.google.com/gmail/imap/imap-extensions
X-GM-LABELS ->“出于 IMAP 的目的,Gmail 将标签视为文件夹。”
a010 提取 1:4(X-GM-标签)
X-GM-THRID -> “Gmail 提供了一个线程 ID,以与在 Gmail 网络界面中相同的方式关联消息组。”
a008 提取 1:4 (X-GM-THRID)
但是这些扩展都没有指定电子邮件所属的类别。
然而,有两种替代解决方案可以让 Javamail 间接处理类别:
将类别更改为标签/IMAP 文件夹的过程:
该过程的屏幕截图:
跳过收件箱的过程
要过滤的可能类别列表:
JavaMail API 和 Gmail API 的标准 IMAP/SMTP 功能已经足够,甚至可以处理标签。但要获取自定义 Gmail 属性 X-GM-THRID 和 X-GM-LABELS,请查看Gmail Imap Extensions。
为了从 Gmail 中获取邮件列表,您必须实现标准的 javamail 配置文件获取:
folder.fetch(msgs, stdFetchProfile);
现在要从 Gmail 中获取标签/标签/标签列表,请使用以下方法调用自定义方法IMAPFolder’s doCommand()
final MessageSet[] mSets = MessageSet.createMessageSets(mns);
((IMAPFolder) folder).doCommand(new IMAPFolder.ProtocolCommand() {
@Override
public Object doCommand(IMAPProtocol p) throws ProtocolException {
try {
Response[] r = p.fetch(mSets, "X-GM-LABELS X-GM-THRID");
for (int i = 0; i < r.length; i++) {
if (!FetchResponse.class.isInstance(r[i]))
continue;
// Got a FetchResponse.
GmailFetchResponse gfr = new GmailFetchResponse(
((FetchResponse) r[i]).toString());
// Use gfr.getNumber() to get the msg number
for (int j = 0; j < gfr.getItemCount(); j++) {
Item item = gfr.getItem(j);
if (X_GM_LABELS.class.isInstance(item))
// get the labels
((X_GM_LABELS) item).x_gm_labels);
}
}
} catch (ProtocolException e) {
logError(e.getMessage(), e);
}
return null;
}
});
然后您需要使用java-gmail-imap ' parse() 方法进行重新解析。
上面的实现在以下链接中得到了很好的解释。
施希尔