1

タイトルを設定する方法を見つけました ( EWS Java API (Exchange Web サービス) を使用して連絡先のタイトルを設定する方法を参照してください)。今、メール 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);

ここに画像の説明を入力

4

1 に答える 1

3

信じがたいことですが、これとほぼ 1 週間格闘した後、ようやく理解できました。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());
  }
}

ここに画像の説明を入力

ここに画像の説明を入力

于 2013-05-21T13:47:31.073 に答える