Exchange Web Services (EWS) Java API是微软提供的一套用于与Exchange Server交互的Java库,允许开发者通过编程方式访问Exchange邮箱中的邮件、日历、联系人等数据,包括附件下载功能。
<dependency>
<groupId>com.microsoft.ews-java-api</groupId>
<artifactId>ews-java-api</artifactId>
<version>2.0</version>
</dependency>
import microsoft.exchange.webservices.data.core.ExchangeService;
import microsoft.exchange.webservices.data.core.enumeration.misc.ExchangeVersion;
import microsoft.exchange.webservices.data.core.enumeration.property.WellKnownFolderName;
import microsoft.exchange.webservices.data.core.service.item.EmailMessage;
import microsoft.exchange.webservices.data.core.service.item.Item;
import microsoft.exchange.webservices.data.credential.WebCredentials;
import microsoft.exchange.webservices.data.property.complex.Attachment;
import microsoft.exchange.webservices.data.property.complex.FileAttachment;
import microsoft.exchange.webservices.data.search.FindItemsResults;
import microsoft.exchange.webservices.data.search.ItemView;
import java.io.File;
import java.net.URI;
public class EWSAttachmentDownloader {
public static void main(String[] args) {
try {
// 1. 创建Exchange服务连接
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP2);
// 2. 设置凭据
service.setCredentials(new WebCredentials("username", "password"));
// 3. 设置Exchange服务器URL
service.setUrl(new URI("https://outlook.office365.com/EWS/Exchange.asmx"));
// 4. 设置要搜索的邮件数量
ItemView view = new ItemView(10); // 获取前10封邮件
// 5. 查找收件箱中的邮件
FindItemsResults<Item> findResults = service.findItems(
WellKnownFolderName.Inbox,
view
);
// 6. 遍历邮件并下载附件
for (Item item : findResults.getItems()) {
if (item instanceof EmailMessage) {
EmailMessage message = (EmailMessage) item;
// 加载邮件的附件
message.load(new PropertySet(ItemSchema.Attachments));
// 检查是否有附件
if (message.getHasAttachments()) {
System.out.println("邮件主题: " + message.getSubject());
// 遍历所有附件
for (Attachment attachment : message.getAttachments()) {
if (attachment instanceof FileAttachment) {
FileAttachment fileAttachment = (FileAttachment) attachment;
// 加载附件内容
fileAttachment.load();
// 设置保存路径
String fileName = fileAttachment.getName();
String savePath = "C:\\temp\\" + fileName;
// 保存附件到本地
fileAttachment.load(new File(savePath));
System.out.println("下载附件: " + fileName + " 到 " + savePath);
}
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
原因: 错误的凭据或服务器URL 解决:
原因:
解决:
原因:
解决:
SearchFilter sf = new SearchFilter.IsEqualTo(EmailMessageSchema.IsRead, false);
FindItemsResults<Item> findResults = service.findItems(
WellKnownFolderName.Inbox,
sf,
view
);
if (fileName.endsWith(".pdf")) {
// 只处理PDF附件
}
// 设置分块大小(字节)
service.setRequestedServerVersion(ExchangeVersion.Exchange2010_SP2);
FileAttachment fileAttachment = (FileAttachment) attachment;
fileAttachment.setRequestedServerVersion(ExchangeVersion.Exchange2010_SP2);
fileAttachment.load("C:\\temp\\" + fileName);
通过以上方法和代码示例,您可以有效地使用EWS Java API下载Exchange邮件中的附件。
没有搜到相关的文章