Управление контактами Outlook

Эта статья рассматривает отдельные Outlook MapiContact элементы, сохранённые как MSG или vCard (VCF). Для формата‑нейтрального VCardContact класс, который напрямую читает и пишет файлы vCard, см. Работа с файлами vCard (VCF). Чтобы хранить и считывать контакты внутри PST, см. Управление контактами в файлах PST.

Как и MapiMessage, Aspose.Email позволяет создавать контакты Outlook. The MapiContact класс предоставляет все свойства, связанные с контактами, необходимые для создания контакта Outlook. В этой статье показано, как создать, сохранить и прочитать контакт Outlook с помощью MapiContact класс.

Создание и сохранение контакта Outlook

Чтобы создать контакт и сохранить его на диск:

  1. Создайте новый объект класса MapiContact класс.
  2. Введите информацию о свойствах контакта.
  3. Добавьте данные фото (при наличии).
  4. Сохраните контакт в формате MSG или VCard.

Следующий фрагмент кода показывает, как создать и сохранить контакт Outlook.

// The path to the File directory.
string dataDir = RunExamples.GetDataDir_Outlook();

MapiContact contact = new MapiContact();
contact.NameInfo = new MapiContactNamePropertySet("Bertha", "A.", "Buell");
contact.ProfessionalInfo = new MapiContactProfessionalPropertySet("Awthentikz", "Social work assistant");
contact.PersonalInfo.PersonalHomePage = "B2BTies.com";
contact.PhysicalAddresses.WorkAddress.Address = "Im Astenfeld 59 8580 EDELSCHROTT";
contact.ElectronicAddresses.Email1 = new MapiContactElectronicAddress("Experwas", "SMTP", "BerthaABuell@armyspy.com");
contact.Telephones = new MapiContactTelephonePropertySet("06605045265");
contact.PersonalInfo.Children = new string[] { "child1", "child2", "child3" };
contact.Categories = new string[] { "category1", "category2", "category3" };
contact.Mileage = "Some test mileage";
contact.Billing = "Test billing information";
contact.OtherFields.Journal = true;
contact.OtherFields.Private = true;
contact.OtherFields.ReminderTime = new DateTime(2014, 1, 1, 0, 0, 55);
contact.OtherFields.ReminderTopic = "Test topic";
contact.OtherFields.UserField1 = "ContactUserField1";
contact.OtherFields.UserField2 = "ContactUserField2";
contact.OtherFields.UserField3 = "ContactUserField3";
contact.OtherFields.UserField4 = "ContactUserField4";

// Add a photo
using (FileStream fs = File.OpenRead(dataDir + "Desert.jpg"))
{
    byte[] buffer = new byte[fs.Length];
    fs.Read(buffer, 0, buffer.Length);
    contact.Photo = new MapiContactPhoto(buffer,
        MapiContactPhotoImageFormat.Jpeg);
}
// Save the Contact in MSG format
contact.Save(dataDir + "MapiContact_out.msg",ContactSaveFormat.Msg);

// Save the Contact in VCF format
contact.Save(dataDir + "MapiContact_out.vcf", ContactSaveFormat.VCard);

Сохранение списков рассылки MAPI в VCF‑файлы

Ниже пример кода демонстрирует, как сохранить список рассылки в многоконтактный VCF‑файл:

// convert the `msg` object to a `MapiDistributionList` object
var dlist = (MapiDistributionList)msg.ToMapiMessageItem();

//save the distribution list
var options = new MapiDistributionListSaveOptions(ContactSaveFormat.VCard);
dlist.Save("distribution_list.vcf", options);

Преобразование многоконтактных VCF‑файлов в MapiDistributionList

Aspose.Email поддерживает преобразование многоконтактных VCF‑файлов в MapiDistributionList объектов, что упрощает управление и импорт нескольких контактов напрямую в ваши приложения. Эта функция доступна через следующие статические методы в MapiDistributionList класс:

Ниже пример кода демонстрирует, как использовать эту функцию:

// Convert a multi-contact VCF file to a MapiDistributionList
MapiDistributionList dlist = MapiDistributionList.FromVCF(fileName);

Сохранить контакты в формате VCF

Чтобы сохранить контакт в формате VCF версии 3, используйте VCardVersion перечисление для установки VCardSaveOptions.Version свойство. Приведенный ниже образец кода демонстрирует использование VCardVersion перечисление для сохранения контакта в формате VCF версии 3:

var options = new MapiDistributionListSaveOptions(ContactSaveFormat.VCard);
options.Version = VCardVersion.V30;
dlist.Save("distribution_list.vcf", options);

Чтение MAPI‑контактов

Этот MapiContact класс можно использовать для загрузки контактов как из формата Outlook MSG, так и VCard. Следующий фрагмент кода показывает, как загрузить контакты Outlook, сохранённые как MSG и VCF, в MapiContact.

Загрузка контактов из файлов MSG

Следующий фрагмент кода показывает, как загрузить контакты из MSG.

MapiMessage msg = MapiMessage.FromFile(dataDir + "Contact.msg");
MapiContact contact = (MapiContact)msg.ToMapiMessageItem();

Console.WriteLine(contact.NameInfo.DisplayName);

Загрузка контактов из VCard

Следующий фрагмент кода показывает, как загрузить файл vCard в MapiContact используя FromVCard метод. Чтобы загрузить vCard в VCardContact вместо этого, см. Работа с файлами vCard (VCF).

MapiContact contact = MapiContact.FromVCard(dataDir + "Contact.vcf");

Загрузка MAPI‑контактов из vCard с пользовательскими параметрами

Чтобы обеспечить большую гибкость при преобразовании файлов vCard (.vcf) в MAPI‑контакты, Aspose.Email для .NET предоставляет перегрузку MapiContact.FromVCard(string filePath, VCardLoadOptions options) метод, принимающий VCardLoadOptions объект. Он предоставляет улучшенный контроль над тем, как интерпретируются файлы vCard — особенно при работе с различными форматами vCard, кодировками или сложными сценариями разбора.

Следующий пример кода демонстрирует, как загрузить файл контакта .vcf в MapiContact объект, используя перегрузку, принимающую VCardLoadOptions. Загруженный контакт затем можно использовать в PST‑файлах, экспортировать в MSG или другие форматы, совместимые с Outlook.

var mapiContact = MapiContact.FromVCard("contact.vcf", new VCardLoadOptions());
Console.WriteLine(mapiContact.NameInfo.DisplayName);

Загрузка контактов из VCard с указанной кодировкой

Кодировка файла vCard указывается через PreferredEncoding свойство VCardLoadOptions класс. Ниже показан фрагмент кода, демонстрирующий, как загрузить контакты из VCard с указанной кодировкой.

var loadOptions = new VCardLoadOptions { PreferredEncoding = Encoding.UTF8 };
var contactReadFromFile = MapiContact.FromVCard(dataDir + @"Contact.vcf", loadOptions);

Сохранение VCard‑файлов с расширенными полями

Этот UseExtensions свойство позволяет контролировать, могут ли использоваться расширенные поля при сохранении файлов vCard. Когда установлено значение true (по умолчанию), расширения разрешены, обеспечивая совместимость с пользовательскими полями и дополнительной контактной информацией.

Следующий пример кода показывает, как отключить расширенные поля при сохранении контакта:

var contact = MapiContact.FromVCard("contact.vcf");

var options = new VCardSaveOptions
{
    UseExtensions = false
};

contact.Save("contact_out.vcf", options);

Работа с файлами vCard напрямую

Чтение и запись файлов vCard (VCF) с помощью формата‑нейтрального VCardContact класса — загрузка одного или нескольких контактов, выбор кодировки текста, сохранение с конкретной версией vCard и асинхронная загрузка — описаны в отдельной статье: Работа с файлами vCard (VCF).

Отобразить информацию о контакте в MHTML

Контакт Outlook можно конвертировать в MHTML с помощью Aspose.Email API. Этот пример показывает, как VCard загружается в MapiContact и затем преобразовано в MHTML с помощью MailMessage API.

//Load VCF Contact and convert to MailMessage for rendering to MHTML
var contact = MapiContact.FromVCard("Contact.vcf");

MemoryStream ms = new MemoryStream();
contact.Save(ms, ContactSaveFormat.Msg);
ms.Position = 0;
MapiMessage msg = MapiMessage.Load(ms, new MsgLoadOptions());
MailConversionOptions op = new MailConversionOptions();
MailMessage eml = msg.ToMailMessage(op);

//Prepare the MHT format options
MhtSaveOptions mhtSaveOptions = new MhtSaveOptions();
mhtSaveOptions.CheckBodyContentEncoding = true;
mhtSaveOptions.PreserveOriginalBoundaries = true;
MhtFormatOptions formatOp = MhtFormatOptions.WriteHeader | MhtFormatOptions.RenderVCardInfo;
mhtSaveOptions.RenderedContactFields = ContactFieldsSet.NameInfo | ContactFieldsSet.PersonalInfo | ContactFieldsSet.Telephones | ContactFieldsSet.Events;
mhtSaveOptions.MhtFormatOptions = formatOp;
eml.Save("ContactMhtml_out.mhtml", mhtSaveOptions);

См. также