如何从交换服务器获取联系人的照片

How to get contact's photo from exchange server

基于此tutorial,我正在尝试获取联系人照片

private String createPhoto() {
    try {
        AttachmentCollection attachments = contact.getAttachments();
        for (Attachment attachment : attachments.getItems()) {
            if (attachment instanceof FileAttachment) {
                boolean isPhoto = ((FileAttachment) attachment).isContactPhoto();
                if (isPhoto) {
                    attachment.load();
                    FileAttachment photo = contact.getContactPictureAttachment();

                    String filename = photo.getName() + ".jpg";
                    photo.load(new FileOutputStream(filename, true));
                    return filename;
                }
            }
        }
    } catch (Exception ex) {
        LOGGER.info("" + ex);
    }
    return null;
}

但是,attachments.getItems() 始终是一个空数组。

我邮箱里有照片的联系人很少,打电话可以收到URLhttps://companyname.exchange.com/EWS/Exchange.asmx/s/GetUserPhoto?email=name@company.exchange.com&size=HR360x360

为什么我无法通过代码获取照片?

On my mailbox, I have few contacts with photos, and I can receive them by calling URL https://companyname.exchange.com/EWS/Exchange.asmx/s/GetUserPhoto?email=name@company.exchange.com&size=HR360x360

该请求获取存储在(源)用户邮箱(或 ActiveDirectory 中的低分辨率)中并通过该操作可用的用户照片。

您的代码正在尝试检索 ContactPhoto,它可以作为附件存储在 UserMailbox 中的联系人中。

所以这是两件不同的事情,所以您要处理哪一件?,由于您没有展示它,您需要确保将 ExchangeServerRequest 版本设置为 2010 或更高版本,因为 2007 年未返回联系人照片. 您可能还想使用 EWS 编辑器 https://ewseditor.codeplex.com/ 快速测试问题中的联系人,这将允许您获取对象并查看是否有使用 EWS 的 ContactPhoto 附件。