Trabalhando com Contatos do Outlook

Criando, Salvando e Lendo Contatos

Assim como o MapiMessage, o Aspose.Email permite que você crie contatos do Outlook. A classe MapiContact fornece todas as propriedades relacionadas ao contato necessárias para criar um contato do Outlook. Este artigo mostra como criar, salvar e ler um contato do Outlook usando a classe MapiContact.

Criar e Salvar Contato do Outlook

Para criar um contato e salvá-lo no disco:

  1. Instancie um novo objeto da classe MapiContact.
  2. Insira as informações da propriedade do contato.
  3. Adicione os dados da foto (se houver).
  4. Salve o contato no formato MSG ou VCard.

O seguinte trecho de código mostra como criar e salvar um contato do Outlook.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
// 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);

Salvar Lista de Distribuição Mapi em um Único Arquivo VCF de Múltiplos Contatos

O exemplo de código abaixo demonstra como salvar uma lista de distribuição em um arquivo VCF de múltiplos contatos:

// converte o objeto `msg` para um objeto `MapiMessage`
var dlist = (MapiDistributionList)msg.ToMapiMessageItem();

//salvar a lista de distribuição
var options = new MapiDistributionListSaveOptions(ContactSaveFormat.VCard);
dlist.Save("distribution_list.vcf", options);

Salvar Contato no Formato VCF versão 3

Para salvar o contato no formato VCF versão 3, use o enumerador VCardVersion para definir a propriedade VCardSaveOptions.Version. O seguinte código de amostra demonstra o uso do VCardVersion enumerador para salvar o contato no formato VCF versão 3:


Lendo um MapiContact

A classe MapiContact pode ser usada para carregar contatos do Outlook nos formatos MSG e VCard. O seguinte trecho de código mostra como carregar contatos do Outlook salvos como MSG e VCF em um MapiContact.

Carregando um Contato de MSG

O seguinte trecho de código mostra como carregar contatos de MSG.

Carregando um Contato de VCard

O seguinte trecho de código mostra como carregar contatos de VCard.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
var vcfTest = VCardContact.Load(dataDir + "Contact.vcf");
MapiContact contact = MapiContact.FromVCard(dataDir + "Contact.vcf");

Carregando um Contato de VCard com Codificação Especificada

O seguinte trecho de código mostra como carregar contatos de VCard com a codificação especificada.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
var contactReadFromFile = MapiContact.FromVCard(dataDir + @"Contact.vcf", Encoding.UTF8);

Salvando Itens de Contato VCard com Codificação Especificada

Personalize o comportamento de salvamento ao trabalhar com arquivos VCard usando a classe VCardSaveOptions. A propriedade PreferredTextEncoding da classe especificará a codificação a ser usada ao salvar itens de contato VCard.

O seguinte exemplo de código mostra como implementar essa propriedade em seu projeto:

var cont = VCardContact.Load(fileName, Encoding.UTF8);
var opt = new VCardSaveOptions();
opt.PreferredTextEncoding = Encoding.UTF8;
cont.Save("my.vcard", opt);

Salvando Arquivos VCard com Campos Estendidos

A propriedade UseExtensions permite controlar se campos estendidos podem ser usados ao salvar arquivos vCard. Quando definida como verdadeira (padrão), extensões são permitidas, proporcionando compatibilidade com campos personalizados e informações adicionais de contato.

Lendo Múltiplos Contatos em formato VCard

Nossa biblioteca torna possível obter a lista de todos os contatos de um VCard. Isso pode ser feito usando os seguintes métodos e etapas:

// Verifica se o fluxo de origem VCard contém múltiplos contatos.
VCardContact.IsMultiContacts(Stream stream)

// Carrega a lista de todos os contatos do arquivo VCard.
VCardContact.LoadAsMultiple(string filePath, Encoding encoding)

// Carrega a lista de todos os contatos do fluxo VCard.
VCardContact.LoadAsMultiple(Stream stream, Encoding encoding)

O seguinte trecho de código demonstra como lidar com arquivos VCard que contêm múltiplos contatos:

using (FileStream stream = new FileStream("test.vcf", FileMode.Open, FileAccess.Read))
{
    if(VCardContact.IsMultiContacts(stream))
    {
        List<VCardContact> contacts = VCardContact.LoadAsMultiple(stream, Encoding.UTF8);
    }
}

Renderizando Informações de Contato para MHTML

Contatos do Outlook podem ser convertidos para MHTML usando a API Aspose.Email. Este exemplo mostra como um VCard é carregado em MapiContact e, em seguida, convertido para MHTML com a ajuda da API MailMessage.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
string dataDir = RunExamples.GetDataDir_Outlook();
//Load VCF Contact and convert to MailMessage for rendering to MHTML
MapiContact contact = MapiContact.FromVCard(dataDir + "Contact.vcf");
MemoryStream ms = new MemoryStream();
contact.Save(ms, ContactSaveFormat.Msg);
ms.Position = 0;
MapiMessage msg = MapiMessage.FromStream(ms);
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(dataDir + "ContactMhtml_out.mhtml", mhtSaveOptions);