gpt4 book ai didi

java - EWS Java API 获取附件

转载 作者:太空宇宙 更新时间:2023-11-04 06:13:12 34 4
gpt4 key购买 nike

我在使用 ews java API 1.3 SNAPSHOT 获取一些附件时遇到一些问题,我想在我的电子邮件中获取附件,这里是我的代码:

try {
ExchangeService service;
service.setUrl(new URI("https://" + myserver + "/ews/Exchange.asmx"));
ExchangeCredentials credentials = new WebCredentials(username, password);
service.setCredentials(credentials);
ItemView view = new ItemView(Integer.MAX_VALUE);
view.getOrderBy().add(ItemSchema.DateTimeReceived, SortDirection.Ascending);
Folder folder = Folder.bind(service, WellKnownFolderName.Inbox);
FindItemsResults<Item> results = service.findItems(folder.getId(),view);
service.loadPropertiesForItems(results, new PropertySet(BasePropertySet.FirstClassProperties, EmailMessageSchema.Attachments));

for (Item item : results) {
Item itm = Item.bind(service, item.getId(), new PropertySet(BasePropertySet.FirstClassProperties, EmailMessageSchema.Attachments));
EmailMessage emailMessage = EmailMessage.bind(service, itm.getId(), new PropertySet(BasePropertySet.FirstClassProperties, EmailMessageSchema.Attachments));
if (emailMessage.getHasAttachments()) {
for (Attachment attachment : emailMessage.getAttachments()) {
String FileExtension = getFileExtension(attachment.getName());
File TempFile = File.createTempFile(attachment.getName(), FileExtension);
attachment.load(TempFile.getAbsolutePath());
}
}
}
} catch (Exception e) {
logger.error("Error ", e.getMessage());
}

我的问题是它可以获取另一封没有附件的电子邮件,并且总是跳过有附件的电子邮件,示例如下,我的收件箱中有此电子邮件列表

  • 发件人:a@gmail.com(有附件)
  • 发件人:b@mycompany.com(无附件)
  • 发件人:c@hiscompany.com(有附件)
  • 发件人:d@mycompany.com(无附件)

当我运行我的代码时,它总是收到没有附件的电子邮件,如下所示:

  • 发件人:b@mycompany.com(无附件)
  • 发件人:d@mycompany.com(无附件)

并跳过其他带有附件的电子邮件,我不知道怎么会发生这种情况。有人可以帮我吗?

最佳答案

HashMap<String, HashMap<String, String>> attachments = new HashMap<String, HashMap<String, String>>();    

if (emailMessage.getHasAttachments() || emailMessage.getAttachments().getItems().size() > 0) {

//get all the attachments
AttachmentCollection attachmentsCol = emailMessage.getAttachments();

log.info("File Count: " +attachmentsCol.getCount());

//loop over the attachments
for (int i = 0; i < attachmentsCol.getCount(); i++) {
Attachment attachment = attachmentsCol.getPropertyAtIndex(i);
//log.debug("Starting to process attachment "+ attachment.getName());

//FileAttachment - Represents a file that is attached to an email item
if (attachment instanceof FileAttachment || attachment.getIsInline()) {

attachments.putAll(extractFileAttachments(attachment, properties));

} else if (attachment instanceof ItemAttachment) { //ItemAttachment - Represents an Exchange item that is attached to another Exchange item.

attachments.putAll(extractItemAttachments(service, attachment, properties, appendedBody));
}
}
}
} else {
log.debug("Email message does not have any attachments.");
}


//Extract File Attachments
try {
FileAttachment fileAttachment = (FileAttachment) attachment;
// if we don't call this, the Content property may be null.
fileAttachment.load();

//extract the attachment content, it's not base64 encoded.
attachmentContent = fileAttachment.getContent();

if (attachmentContent != null && attachmentContent.length > 0) {

//check the size
int attachmentSize = attachmentContent.length;

//check if the attachment is valid
ValidateEmail.validateAttachment(fileAttachment, properties,
emailIdentifier, attachmentSize);

fileAttachments.put(UtilConstants.ATTACHMENT_SIZE, String.valueOf(attachmentSize));

//get attachment name
String fileName = fileAttachment.getName();
fileAttachments.put(UtilConstants.ATTACHMENT_NAME, fileName);

String mimeType = fileAttachment.getContentType();
fileAttachments.put(UtilConstants.ATTACHMENT_MIME_TYPE, mimeType);

log.info("File Name: " + fileName + " File Size: " + attachmentSize);


if (attachmentContent != null && attachmentContent.length > 0) {
//convert the content to base64 encoded string and add to the collection.
String base64Encoded = UtilFunctions.encodeToBase64(attachmentContent);
fileAttachments.put(UtilConstants.ATTACHMENT_CONTENT, base64Encoded);
}



//Extract Item Attachment
try {
ItemAttachment itemAttachment = (ItemAttachment) attachment;

PropertySet propertySet = new PropertySet(
BasePropertySet.FirstClassProperties, ItemSchema.Attachments,
ItemSchema.Body, ItemSchema.Id, ItemSchema.DateTimeReceived,
EmailMessageSchema.DateTimeReceived, EmailMessageSchema.Body);

itemAttachment.load();
propertySet.setRequestedBodyType(BodyType.Text);

Item item = itemAttachment.getItem();

eBody = appendItemBody(item, appendedBody.get(UtilConstants.BODY_CONTENT));

appendedBody.put(UtilConstants.BODY_CONTENT, eBody);

/*
* We need to check if Item attachment has further more
* attachments like .msg attachment, which is an outlook email
* as attachment. Yes, we can attach an email chain as
* attachment and that email chain can have multiple
* attachments.
*/
AttachmentCollection childAttachments = item.getAttachments();
//check if not empty collection. move on
if (childAttachments != null && !childAttachments.getItems().isEmpty() && childAttachments.getCount() > 0) {

for (Attachment childAttachment : childAttachments) {

if (childAttachment instanceof FileAttachment) {

itemAttachments.putAll(extractFileAttachments(childAttachment, properties, emailIdentifier));

} else if (childAttachment instanceof ItemAttachment) {

itemAttachments = extractItemAttachments(service, childAttachment, properties, appendedBody, emailIdentifier);
}
}
}
} catch (Exception e) {
throw new Exception("Exception while extracting Item Attachments: " + e.getMessage());
}

关于java - EWS Java API 获取附件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28450984/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com