Working with Outlook Contacts

Create Outlook Contact

Aspose.Email for Java supports creating Outlook contacts (VCards) using the MapiContact class. MapiContact contains many methods some of which are given below.

Contact Structure in Aspose.Email for Java

Below is the hierarchy implemented for contacts in Aspose.Email for Java. The relevant class name is given against each property. Hyperlinks are provided to the online documentation for further reference.

  1. Contact (MapiContact)
    1. Electronic Addresses (MapiContactElectronicAddressPropertySet)
      1. Email1 (MapiContactElectronicAddress)
        1. Address Type
        2. Display Name
        3. Email Address
        4. Fax Number
      2. Email2
      3. Email3
      4. Home Fax
      5. Primary Fax
      6. Business Fax
    2. Events (MapiContactEventPropertySet) See below for an example of how to set events.
      1. Birthday
      2. Wedding Anniversary
    3. Name Info (MapiContactNamePropertySet)
      1. Display Name
      2. Display Name Prefix
      3. File Under
      4. File Under ID
      5. Generation
      6. Given Name
      7. Initials
      8. Middle Name
      9. Nick Name
      10. Surname
    4. Personal Info (MapiContactPersonalInfoPropertySet)
      1. Account
      2. Business Home Page
      3. Computer Network Name
      4. Customer ID
      5. Free Business Location
      6. FTP Site
      7. Gender
      8. Government ID Number
      9. Hobbies
      10. HTML
      11. Instant Messaging Address
      12. Language
      13. Location
      14. Notes
      15. Organizational ID Number
      16. Personal Home Page
      17. Referred by Name
      18. Spouse Name
    5. Physical Address (MapiContactPhysicalAddressPropertySet)
      1. Home Address (MapiContactPhysicalAddress)
        1. Address
        2. City
        3. Country
        4. Country Code
        5. Postal Code
        6. Post Office Box
        7. State Or Province
      2. Other Address
      3. Work Address
    6. Professional Info
      1. Assistant
      2. Company Name
      3. Depart Name
      4. Manager Name
      5. Office Location
      6. Profession
      7. Title
    7. Telephones (MapiContactTelephonePropertySet)
      1. Assistant Telephone Number
      2. Business2 Telephone Number
      3. Business Telephone Number
      4. Callback Telephone Number
      5. Car Telephone Number
      6. Company Main Telephone Number
      7. Home2 Telephone Number
      8. Home Telephone Number
      9. ISDN Number
      10. Mobile Telephone Number
      11. Other Telephone Number
      12. Pager Telephone Number
      13. Primary Telephone Number
      14. Radio Telephone Number
      15. Telex Number
      16. TTY/TDD Phone Number

The following code uses Aspose.Email to create an Outlook contact and fills it with name, professional properties, physical address, and email. It also shows adding MapiContactEventPropertySet to the contact.

todo:image_alt_text
Figure: A Microsoft Outlook contact coded in with Aspose.Email
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
MapiContact contact = new MapiContact();
//Set different properties of this Contact Item.
//Set Name properties using MapiContactNamePropertySet
MapiContactNamePropertySet NamePropSet = new MapiContactNamePropertySet();
NamePropSet.setSurname("Mellissa");
NamePropSet.setGivenName("MacBeth");
contact.setNameInfo(NamePropSet);
//Set professional properties using MapiContactProfessionalPropertySet
MapiContactProfessionalPropertySet ProfPropSet = new MapiContactProfessionalPropertySet();
ProfPropSet.setTitle("Account Representative");
ProfPropSet.setCompanyName("Contoso Ltd.");
ProfPropSet.setOfficeLocation("36/2529");
contact.setProfessionalInfo(ProfPropSet);
//Telephones
MapiContactTelephonePropertySet Telephone = new MapiContactTelephonePropertySet();
Telephone.setAssistantTelephoneNumber("(831) 758-7214");
Telephone.setBusiness2TelephoneNumber("(831) 759-2518");
Telephone.setBusinessTelephoneNumber("(831) 758-7285");
Telephone.setCallbackTelephoneNumber("(831) 758-7321 (After hours");
Telephone.setCarTelephoneNumber("(831) 758-7201");
Telephone.setCompanyMainTelephoneNumber("(831) 758-7368");
Telephone.setHome2TelephoneNumber("(831) 758-7256");
Telephone.setHomeTelephoneNumber("(831) 758-7257");
Telephone.setIsdnNumber("(831) 758-7381");
Telephone.setMobileTelephoneNumber("(831) 758-7368");
Telephone.setOtherTelephoneNumber("(831) 758-7201");
Telephone.setPagerTelephoneNumber("(831) 758-7368");
Telephone.setPrimaryTelephoneNumber("(831) 758-7334");
Telephone.setRadioTelephoneNumber("(831) 758-7234");
Telephone.setTelexNumber("(831) 758-7408");
Telephone.setTtyTddPhoneNumber("(800) 806-4474");
contact.setTelephones(Telephone);
//Set Physical Address using MapiContactPhysicalAddress and MapiContactPhysicalAddressPropertySet
MapiContactPhysicalAddress PhysAddrss = new MapiContactPhysicalAddress();
PhysAddrss.setPostOfficeBox("144 Hitchcock Rd, Salinas, CA 93908");
MapiContactPhysicalAddressPropertySet PhysAddrPropSet = new MapiContactPhysicalAddressPropertySet();
PhysAddrPropSet.setWorkAddress(PhysAddrss);
contact.setPhysicalAddresses(PhysAddrPropSet);
//Set email information using MapiContactElectronicAddress and MapiContactElectronicAddressPropertySet
MapiContactElectronicAddress email = new MapiContactElectronicAddress();
email.setAddressType("SMTP");
email.setDisplayName("Melissa MacBeth (mellissa@contoso.com)");
email.setEmailAddress("melissa@contoso.com");
MapiContactElectronicAddressPropertySet ElecAddrPropSet = new MapiContactElectronicAddressPropertySet();
ElecAddrPropSet.setEmail1(email);
contact.setElectronicAddresses(ElecAddrPropSet);
contact.save(dataDir + "OutlookContact_out.vcf", ContactSaveFormat.VCard);

Adding Contact Event Information to a MapiContact

Microsoft Outlook lets users add event information to a contact. The event holds the birthday and wedding anniversary. Aspose.Email provides the MapiContactEventPropertySet class for adding this information to a contact. This is elaborated in the following example.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
calendar.set(1990, Calendar.NOVEMBER, 1, 0, 0, 0);
Date birthday = calendar.getTime();
calendar.set(2012, Calendar.NOVEMBER, 1, 0, 0, 0);
Date weddingDay = calendar.getTime();
MapiContactEventPropertySet contactEventSet = new MapiContactEventPropertySet();
contactEventSet.setBirthday(birthday);
contactEventSet.setWeddingAnniversary(weddingDay);
MapiContact contact = new MapiContact();
contact.setEvents(contactEventSet);
contact.save(dataDir + "Contact_out.msg", ContactSaveFormat.Msg);

Creating, Saving and Reading Outlook Contacts

Aspose.Email allows developers to create Microsoft Outlook contacts as well as email messages. The MapiContact class provides all contact properties required to create an Outlook contact. This article shows how to create, save and read an Outlook contact using the MapiContact class.

Create and Save a MapiContact

The following steps can be used to create and save a contact to disc:

  1. Instantiate a new object of the MapiContact class.
  2. Enter information related to various properties of the contact.
  3. Add photo data to the contact, if any.
  4. Save the contact as MSG or VCard format.  
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
MapiContact contact = new MapiContact("Sebastian Wright", "SebastianWright@dayrep.com");
contact.setNameInfo(new MapiContactNamePropertySet("Bertha", "A.", "Buell"));
contact.setProfessionalInfo(new MapiContactProfessionalPropertySet("Awthentikz", "Social work assistant"));
contact.getPersonalInfo().setPersonalHomePage("B2BTies.com");
contact.getPhysicalAddresses().getWorkAddress().setAddress("Im Astenfeld 59 8580 EDELSCHROTT");
contact.getElectronicAddresses().setEmail1(new MapiContactElectronicAddress("Experwas", "SMTP", "BerthaABuell@armyspy.com"));
contact.setTelephones(new MapiContactTelephonePropertySet("06605045265"));
//Set Photo Data
File fi = new File(dataDir + "Desert.jpg");
byte[] fileContent = Files.readAllBytes(fi.toPath());
MapiContactPhoto photo = new MapiContactPhoto(fileContent, MapiContactPhotoImageFormat.Jpeg);
contact.setPhoto(photo);
//Save as MSG
contact.save(dataDir + "Contact_out.msg", ContactSaveFormat.Msg);

Save Contact in Version 3 VCF Format

To save the contact in version 3 VCF format, use the VCardVersion enumerable to set the VCardSaveOptions.Version property. The following sample code demonstrates the use of VCardVersion enumerable to save the contact VCF version 3 format.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// The path to the resource directory.
String dataDir = Utils.getSharedDataDir(DistributionList.class) + "outlook/";
MapiContact contact = new MapiContact();
contact.setNameInfo(new MapiContactNamePropertySet("Jane", "A.", "Buell"));
contact.setProfessionalInfo(new MapiContactProfessionalPropertySet("Aspose Pty Ltd", "Social work assistant"));
contact.getPersonalInfo().setPersonalHomePage("Aspose.com");
contact.getElectronicAddresses().setEmail1(new MapiContactElectronicAddress("test@test.com"));
contact.getTelephones().setHomeTelephoneNumber("06605040000");
VCardSaveOptions opt = new VCardSaveOptions();
opt.setVersion(VCardVersion.V30);
contact.save(dataDir + "V30.vcf", opt);

Read a MapiContact

The MapiContact class can be used to load both Microsoft Outlook MSG files as well as VCard format contacts. The following code samples show how to load Outlook contacts saved as MSG and VCF into MapiContact.

Load a Contact from MSG

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
MapiMessage msg = MapiMessage.fromFile(dataDir + "messageMapi.msg");
MapiContact mapiContact = (MapiContact) msg.toMapiMessageItem();

Load a contact from VCard

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
MapiContact mapiContact = MapiContact.fromVCard(dataDir + "microsoft.vcf");

Load VCard Contact with specified Encoding

Supported Method: MapiContact.fromVCard(String, Encoding)

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
MapiContact contactReadFromFile = MapiContact.fromVCard( "microsoft.vcf", StandardCharsets.UTF_8);

Rendering Contact Information to MHTML

Outlook Contact can be converted to MHTML using Aspose.Email API. This example shows how a VCard is loaded into MapiContact and then converted to MHTML with the help of MailMessage API.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
String dataDir = Utils.getSharedDataDir(RenderingContactInformationToMhtml.class) + "outlook/";
//Load VCF Contact and convert to MailMessage for rendering to MHTML
MapiContact contact = MapiContact.fromVCard(dataDir + "ContactsSaqib Razzaq.vcf");
ByteArrayOutputStream os = new ByteArrayOutputStream();
contact.save(os, ContactSaveFormat.Msg);
MapiMessage msg = MapiMessage.fromStream(new ByteArrayInputStream(os.toByteArray()));
MailConversionOptions op = new MailConversionOptions();
MailMessage eml = msg.toMailMessage(op);
//Prepare the MHT format options
MhtSaveOptions mhtSaveOptions = new MhtSaveOptions();
mhtSaveOptions.setCheckBodyContentEncoding(true);
mhtSaveOptions.setPreserveOriginalBoundaries(true);
mhtSaveOptions.setMhtFormatOptions(MhtFormatOptions.RenderVCardInfo | MhtFormatOptions.WriteHeader);
mhtSaveOptions.setRenderedContactFields(ContactFieldsSet.NameInfo | ContactFieldsSet.PersonalInfo | ContactFieldsSet.Telephones | ContactFieldsSet.Events);
eml.save(dataDir + "ContactsSaqib Razzaq_out.mhtml", mhtSaveOptions);
System.out.println("Execution Completed.");