我正在制作应用程序,可以确定电子邮件所在的Gmail标签页(即社交,促销等)。有没有办法确定使用javamail api将电子邮件放入哪个Gmail标签?或者是否有其他一些应用程序可以确定这个?
提前致谢。
答案 0 :(得分:1)
由于Google不会将信息与IMAP协议集成在一起,因此无法使用Javamail API确定类别/标签。类别/标签只能通过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->“ Gmail出于IMAP的目的将标签视为文件夹。”
a010 FETCH 1:4(X-GM-LABELS)
X-GM-THRID->“ Gmail提供了线程ID,以与Gmail网络界面相同的方式关联邮件组。”
a008 FETCH 1:4(X-GM-THRID)
但是这些扩展名均未指定电子邮件所属的类别。
但是,有两种替代解决方案将允许Javamail间接处理类别:
将类别更改为标签/ IMAP文件夹的步骤:
该过程的屏幕截图:
跳过收件箱的过程
要过滤的可能类别的列表:
答案 1 :(得分:0)
JavaMail API的标准IMAP / SMTP功能&即使处理标签,Gmail API也足够了。但要获取自定义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()方法进行重新解析。
以上链接极好地解释了以上实施。
Getting Gmail labels using javamail
Shishir