无法使用EWS Java API获取发件人邮箱地址

11

我正在使用 EWS Java API 1.1.5。我尝试按以下方式获取电子邮件发件人:

ItemView view = new ItemView(10);
FindItemsResults<Item> findResults = service.findItems(
    WellKnownFolderName.Inbox, view);
    for (Item item : findResults.getItems()) {
        if (item instanceof EmailMessage) {
            String senderEmail = ((EmailMessage) item).getSender().getAddress();
            System.out.println("Sender Email: " + senderEmail);
        }
    }
);

但它总是返回null。我还尝试了以下代码:

String senderEmail = ((EmailMessage) item).getFrom().getAddress();

但它也返回了null。我可以看到这封电子邮件包含发件人,如:

Test User <testuser@testdomain.com> 

这个问题出现在邮件信息里,也会在回复邮件时出现。

请建议如何解决这个问题。


使用.NET API,如果您不调用Load(如答案所述),则内部电子邮件的From和Sender是交换地址(RoutingType =“EX”)。但是,如果您调用Load,则它们是SMTP地址 - 棒极了。 - user2000095-tim
2个回答

14

我找到了解决方案,我需要在获取发件人电子邮件地址之前使用item.load();


0

虽然上述方法运作良好,但是作为替代方案,如果是以属性视图的方式进行搜索,则无需加载,可以考虑以下代码片段:

    ItemView view = new ItemView(100);
    view.getOrderBy().add(ItemSchema.DateTimeReceived, SortDirection.Descending);
    view.setPropertySet(new PropertySet(BasePropertySet.IdOnly, 
                                        ItemSchema.Subject,
                                        ItemSchema.DateTimeReceived, 
                                        EmailMessageSchema.From));
    
    SearchFilterCollection searchCollection=new SearchFilter.SearchFilterCollection();
    searchCollection.add(new SearchFilter.IsEqualTo(EmailMessageSchema.IsRead, !unreadEmailOnly));
    
    FindItemsResults<Item> result=exchangeService.findItems(WellKnownFolderName.Inbox, 
                                                            searchCollection, 
                                                            view);

随后,可以调用EmailMessage.getFrom().getAddress()。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接