使用 Gmail API 下载附件失败
Downloading attachments with the Gmail API fails
使用类似于 API 参考站点的代码,我在 for 循环开始时遇到空异常错误。我检查过 message
是否有附件,但它似乎是内联的。对于附件不是内联的其他邮件,它确实有效。
我需要做什么才能获得内联附件?
public List<Attachment> getAttachments(String messageId) throws IOException
{
List<Attachment> attachments = new ArrayList<>();
Message message = SERVICE.users().messages().get(USER, messageId).execute();
List<MessagePart> parts = message.getPayload().getParts();
if (parts != null)
{
for (MessagePart part : parts)
{
if (part.getFilename() != null && part.getFilename().length() > 0)
{
String attId = part.getBody().getAttachmentId();
MessagePartBody attachPart = SERVICE.users().messages().attachments().
get(USER, messageId, attId).execute();
byte[] fileByteArray = Base64.decodeBase64(attachPart.getData());
Attachment attachment = new Attachment(part, attachPart, fileByteArray);
attachments.add(attachment);
}
}
}
return attachments;
}
您可以通过 message.getPayload().getBody()
详细说明内联附件。
我建议你先测试一下:
if (message.getPayload().getBody().size() > 0) {
// do your work with:
// message.getPayload().getBody()
} else {
// do your work with:
// message.getPayload().getParts()
}
更多信息请参考Gmail官方API文档:
特别是这条线:
"body": users.messages.attachments Resource
希望对您有所帮助。
使用类似于 API 参考站点的代码,我在 for 循环开始时遇到空异常错误。我检查过 message
是否有附件,但它似乎是内联的。对于附件不是内联的其他邮件,它确实有效。
我需要做什么才能获得内联附件?
public List<Attachment> getAttachments(String messageId) throws IOException
{
List<Attachment> attachments = new ArrayList<>();
Message message = SERVICE.users().messages().get(USER, messageId).execute();
List<MessagePart> parts = message.getPayload().getParts();
if (parts != null)
{
for (MessagePart part : parts)
{
if (part.getFilename() != null && part.getFilename().length() > 0)
{
String attId = part.getBody().getAttachmentId();
MessagePartBody attachPart = SERVICE.users().messages().attachments().
get(USER, messageId, attId).execute();
byte[] fileByteArray = Base64.decodeBase64(attachPart.getData());
Attachment attachment = new Attachment(part, attachPart, fileByteArray);
attachments.add(attachment);
}
}
}
return attachments;
}
您可以通过 message.getPayload().getBody()
详细说明内联附件。
我建议你先测试一下:
if (message.getPayload().getBody().size() > 0) {
// do your work with:
// message.getPayload().getBody()
} else {
// do your work with:
// message.getPayload().getParts()
}
更多信息请参考Gmail官方API文档:
特别是这条线:
"body": users.messages.attachments Resource
希望对您有所帮助。