我刚想出如何设置标题(参见How to set the contact title using the EWS Java API (Exchange Web Service)?)。现在我正在尝试设置电子邮件1显示名称。
如果我使用公开的API Contact.getEmailAddresses()。setEmailAddress(),则显示名称会自动设置为与电子邮件地址相同(并且它会覆盖我的扩展属性)。
所以现在我试图通过扩展属性设置完整的电子邮件信息。它几乎可以工作,除非我查看地址簿,名称和显示名称都是空的。
我觉得这与Email1OriginalEntryId属性有关,我不知道如何正确设置。
有什么想法吗?
我目前的尝试是这样的:
ExtendedPropertyDefinition propDef_PidLidEmail1DisplayName = new ExtendedPropertyDefinition(//
UUID.fromString("00062004-0000-0000-C000-000000000046"), 0x8080, MapiPropertyType.String);
ExtendedPropertyDefinition propDef_PidLidEmail1AddressType = new ExtendedPropertyDefinition(//
UUID.fromString("00062004-0000-0000-C000-000000000046"), 0x8082, MapiPropertyType.String);
ExtendedPropertyDefinition propDef_PidLidEmail1EmailAddress = new ExtendedPropertyDefinition(//
UUID.fromString("00062004-0000-0000-C000-000000000046"), 0x8083, MapiPropertyType.String);
ExtendedPropertyDefinition propDef_PidLidEmail1OriginalDisplayName = new ExtendedPropertyDefinition(//
UUID.fromString("00062004-0000-0000-C000-000000000046"), 0x8084, MapiPropertyType.String);
ExtendedPropertyDefinition propDef_PidLidEmail1OriginalEntryId = new ExtendedPropertyDefinition(//
UUID.fromString("00062004-0000-0000-C000-000000000046"), 0x8085, MapiPropertyType.Binary);
ExchangeService mailbox = new ExchangeService(ExchangeVersion.Exchange2007_SP1);
mailbox.setUrl(new URL("https://remote.domain.com/EWS/exchange.asmx").toURI());
ExchangeCredentials credentials = new WebCredentials("user.name", "pw", "domain");
mailbox.setCredentials(credentials);
Contact c = new Contact(mailbox);
c.setGivenName("GivenName");
c.setSurname("Surname");
// c.getEmailAddresses().setEmailAddress(EmailAddressKey.EmailAddress1, new EmailAddress("AB12@B12.com"));
c.setExtendedProperty(propDef_PidLidEmail1AddressType, "SMTP");
c.setExtendedProperty(propDef_PidLidEmail1EmailAddress, "A12@B12.com");
c.setExtendedProperty(propDef_PidLidEmail1OriginalDisplayName, "A12@B12.com");
c.setExtendedProperty(propDef_PidLidEmail1DisplayName, "A12 B12 (A12@B12.com)");
// c.setExtendedProperty(propDef_PidLidEmail1OriginalEntryId, ???);
c.save(WellKnownFolderName.Contacts);
答案 0 :(得分:3)
很难相信,但经过近一周的战斗,我终于明白了。仅在Exchange 2007上测试。
请注意,这仅适用于您在此示例中设置每个扩展属性并且不使用Contact.getEmailAddresses()。setEmailAddress()。
ExtendedPropertyDefinition propDef_PidLidEmail1DisplayName = new ExtendedPropertyDefinition(//
UUID.fromString("00062004-0000-0000-C000-000000000046"), 0x8080, MapiPropertyType.String);
ExtendedPropertyDefinition propDef_PidLidEmail1AddressType = new ExtendedPropertyDefinition(//
UUID.fromString("00062004-0000-0000-C000-000000000046"), 0x8082, MapiPropertyType.String);
ExtendedPropertyDefinition propDef_PidLidEmail1EmailAddress = new ExtendedPropertyDefinition(//
UUID.fromString("00062004-0000-0000-C000-000000000046"), 0x8083, MapiPropertyType.String);
ExtendedPropertyDefinition propDef_PidLidEmail1OriginalDisplayName = new ExtendedPropertyDefinition(//
UUID.fromString("00062004-0000-0000-C000-000000000046"), 0x8084, MapiPropertyType.String);
ExtendedPropertyDefinition propDef_PidLidEmail1OriginalEntryId = new ExtendedPropertyDefinition(//
UUID.fromString("00062004-0000-0000-C000-000000000046"), 0x8085, MapiPropertyType.Binary);
ExchangeService mailbox = new ExchangeService(ExchangeVersion.Exchange2007_SP1);
mailbox.setUrl(new URL("https://remote.domain.com/EWS/exchange.asmx").toURI());
ExchangeCredentials credentials = new WebCredentials("user.name", "pw", "domain");
mailbox.setCredentials(credentials);
String FIRST = "First";
String LAST = "Last";
String FIRST_LAST = FIRST + " " + LAST; // "First Last"
String EMAIL = "first.last@email.com";
String DISPLAY_NAME = FIRST + " " + LAST + " (" + EMAIL + ")"; // "First Last (first.last@email.com)"
Contact c = new Contact(mailbox);
c.setGivenName(FIRST);
c.setSurname(LAST);
c.setFileAs(FIRST_LAST);
// don't use this
// c.getEmailAddresses().setEmailAddress(EmailAddressKey.EmailAddress1, new EmailAddress(EMAIL));
// Address book Name (seem to trigger the whole address book functionality)
c.setSubject(FIRST_LAST);
// Address book email address
c.setExtendedProperty(propDef_PidLidEmail1OriginalDisplayName, EMAIL);
// contact and address book display name
c.setExtendedProperty(propDef_PidLidEmail1DisplayName, DISPLAY_NAME);
c.setExtendedProperty(propDef_PidLidEmail1AddressType, "SMTP"); // constant
c.setExtendedProperty(propDef_PidLidEmail1EmailAddress, EMAIL);
// not needed after all, exchange sets this automatically
// c.setExtendedProperty(propDef_PidLidEmail1OriginalEntryId, ???);
c.save(WellKnownFolderName.Contacts);
for(Item item : mailbox.findItems(WellKnownFolderName.Contacts, new ItemView(1000)))
{
Contact result = (Contact) item;
PropertySet propertySet = new PropertySet(BasePropertySet.FirstClassProperties);
propertySet.add(propDef_PidLidEmail1AddressType);
propertySet.add(propDef_PidLidEmail1EmailAddress);
propertySet.add(propDef_PidLidEmail1OriginalDisplayName);
propertySet.add(propDef_PidLidEmail1DisplayName);
propertySet.add(propDef_PidLidEmail1OriginalEntryId);
result = Contact.bind(mailbox, result.getId(), propertySet);
LOGGER.info("count: " + result.getExtendedProperties().getCount());
for(ExtendedProperty p : result.getExtendedProperties())
{
LOGGER.info(p.toString());
}
}