2013-05-21 1 views
1

Я только что понял, как установить заголовок (см. How to set the contact title using the EWS Java API (Exchange Web Service)?). Теперь я пытаюсь установить отображаемое имя электронной почты 1.Как установить контакт Email1DisplayName с использованием API-интерфейсов EWS (Exchange Web Service)?

Если я использую открытый 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("[email protected]")); 

c.setExtendedProperty(propDef_PidLidEmail1AddressType, "SMTP"); 
c.setExtendedProperty(propDef_PidLidEmail1EmailAddress, "[email protected]"); 
c.setExtendedProperty(propDef_PidLidEmail1OriginalDisplayName, "[email protected]"); 
c.setExtendedProperty(propDef_PidLidEmail1DisplayName, "A12 B12 ([email protected])"); 
// c.setExtendedProperty(propDef_PidLidEmail1OriginalEntryId, ???); 

c.save(WellKnownFolderName.Contacts); 

enter image description here

ответ

2

Трудно поверить, но после почти недели борьбы с этим, я, наконец, понял это. Проверено только на 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 = "[email protected]"; 
String DISPLAY_NAME = FIRST + " " + LAST + " (" + EMAIL + ")"; // "First Last ([email protected])" 

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()); 
    } 
} 

enter image description here

enter image description here

Смежные вопросы