Gerenciando Arquivos de Mensagens com Aspose.Email.Outlook
Obtendo um tipo de item MAPI
O enum MapiItemType representa um tipo de item MAPI que pode ser convertido explicitamente em um objeto da classe correspondente derivada da interface IMapiMessageItem. Desta forma, os usuários podem evitar verificar o valor da propriedade MessageClass antes da conversão da mensagem.
O seguinte exemplo de código mostra como definir um tipo para o item a ser convertido:
foreach (var messageInfo in folder.EnumerateMessages())
{
var msg = pst.ExtractMessage(messageInfo);
switch (msg.SupportedType)
{
// Tipo não suportado. MapiMessage não pode ser convertido para um tipo de item apropriado.
// Use apenas no formato MSG.
case MapiItemType.None:
break;
// Uma mensagem de email. A conversão não é necessária.
case MapiItemType.Message:
break;
// Um item de contato. Pode ser convertido para MapiContact.
case MapiItemType.Contact:
var contact = (MapiContact)msg.ToMapiMessageItem();
break;
// Um item de calendário. Pode ser convertido para MapiCalendar.
case MapiItemType.Calendar:
var calendar = (MapiCalendar)msg.ToMapiMessageItem();
break;
// Uma lista de distribuição. Pode ser convertida em MapiDistributionList.
case MapiItemType.DistList:
var dl = (MapiDistributionList)msg.ToMapiMessageItem();
break;
// Uma entrada de diário. Pode ser convertida em MapiJournal.
case MapiItemType.Journal:
var journal = (MapiJournal)msg.ToMapiMessageItem();
break;
// Um StickyNote. Pode ser convertido para MapiNote.
case MapiItemType.Note:
var note = (MapiNote)msg.ToMapiMessageItem();
break;
// Um item de Tarefa. Pode ser convertido para MapiTask.
case MapiItemType.Task:
var task = (MapiTask)msg.ToMapiMessageItem();
break;
}
}
Salvando Email como HTML
Aspose.Email possibilita salvar recursos de email com caminhos relativos ao exportar mensagens para o formato HTML. Este recurso fornece mais flexibilidade na forma como os recursos são vinculados no arquivo HTML de saída, facilitando o compartilhamento e a exibição de emails salvos em diferentes sistemas. Para salvar recursos com caminhos relativos, utilize a propriedade HtmlSaveOptions.UseRelativePathToResources. O valor padrão da propriedade é false (recursos são salvos com caminhos absolutos). Quando definido como true, os recursos são salvos com caminhos relativos.
Os arquivos HTML com caminhos relativos são mais portáteis e podem ser visualizados corretamente, independentemente da estrutura de arquivos do ambiente de hospedagem. Você pode escolher entre caminhos absolutos e relativos, dependendo das necessidades. Você pode definir caminhos personalizados para recursos usando o evento ResourceHtmlRendering.
O seguinte exemplo de código demonstra como salvar um email com o caminho relativo padrão para recursos:
var msg = MapiMessage.Load(sourceFileName);
var htmlSaveOptions = new HtmlSaveOptions
{
ResourceRenderingMode = ResourceRenderingMode.SaveToFile,
UseRelativePathToResources = true
};
msg.Save(Path.Combine("target_files"), htmlSaveOptions);
Nesse caso, os recursos serão salvos na pasta [html file name]_files, no mesmo caminho que o arquivo .html e o HTML fará referência aos recursos via caminhos relativos.
O exemplo de código abaixo demonstra como salvar com caminho absoluto para recursos:
var msg = MapiMessage.Load(sourceFileName);
var htmlSaveOptions = new HtmlSaveOptions
{
ResourceRenderingMode = ResourceRenderingMode.SaveToFile,
UseRelativePathToResources = false
};
msg.Save(Path.Combine("target_files"), htmlSaveOptions);
Como no primeiro caso, os recursos serão salvos na pasta [html file name]_files por padrão, mas o HTML fará referência aos recursos usando caminhos absolutos.
Usando o evento ResourceHtmlRendering, você pode definir caminhos personalizados relativos ou absolutos para recursos. Ao personalizar caminhos com o manipulador de eventos ResourceHtmlRendering, e já que UseRelativePathToResources está definido como true, você deve atribuir um caminho relativo à propriedade PathToResourceFile para garantir a referência correta.
O seguinte exemplo de código demonstra como caminho relativo personalizado usando o Evento ResourceHtmlRendering:
var msg = MapiMessage.Load(sourceFileName);
var htmlSaveOptions = new HtmlSaveOptions
{
ResourceRenderingMode = ResourceRenderingMode.SaveToFile,
UseRelativePathToResources = true
};
htmlSaveOptions.ResourceHtmlRendering += (o, args) =>
{
if (o is AttachmentBase attachment)
{
// Como UseRelativePathToResources = true, você deve atribuir um caminho relativo à propriedade PathToResourceFile.
args.PathToResourceFile = $@"images\{attachment.ContentType.Name}";
}
};
msg.Save(Path.Combine(targetPath, "A Day in the Park.html"), htmlSaveOptions);
Convertendo MSG para mensagem MIME
A API Aspose.Email fornece a capacidade de converter arquivos MSG em mensagens MIME usando o método ToMailMessage.
Definindo Tempo Limite para Conversão de Mensagens e Processo de Carregamento
Os seguintes recursos permitirão que você defina o tempo limite em milissegundos para o processo de conversão e carregamento:
-
Propriedade MailConversionOptions.Timeout - Limita o tempo em milissegundos ao converter uma mensagem.
-
MailConversionOptions.TimeoutReached - Levantada se o tempo esgotar ao converter para MailMessage.
-
Propriedade MsgLoadOptions.Timeout - Limita o tempo em milissegundos ao converter uma mensagem.
-
MsgLoadOptions.TimeoutReached - Levantada se o tempo esgotar ao converter para MailMessage.
O exemplo de código abaixo mostrará como definir um tempo limite enquanto converte uma mensagem:
var options = new MailConversionOptions();
// Defina o tempo limite para 5 segundos
options.Timeout = 5000;
options.TimeoutReached += (object sender, EventArgs args) =>
{
string subj = (sender as MailMessage).Subject;
// Defina um sinalizador indicando que o tempo limite foi atingido
isTimedOut = true;
};
var mailMessage = mapiMessage.ToMailMessage(options);
Lendo e Gravando Arquivo de Modelo do Outlook (.OFT)
Os modelos do Outlook são muito úteis quando você deseja enviar uma mensagem de email similar repetidamente. Em vez de preparar a mensagem do zero a cada vez, primeiro, prepare a mensagem no Outlook e salve-a como um Modelo do Outlook (OFT). Depois disso, sempre que você precisar enviar a mensagem, pode criá-la a partir do modelo, economizando tempo escrevendo o mesmo texto no corpo ou na linha de assunto, definindo formatação e assim por diante. A classe MailMessage do Aspose.Email pode ser usada para carregar e ler um arquivo de modelo do Outlook (OFT). Uma vez que o modelo do Outlook esteja carregado em uma instância da classe MailMessage, você pode atualizar o remetente, destinatário, corpo, assunto e outras propriedades. Após atualizar as propriedades:
- Envie o email usando a classe SmtpClient ou
- Salve a mensagem como MSG e faça mais atualizações/validações usando o Microsoft Outlook.
Nos exemplos de código abaixo, nós:
- Carregamos o modelo usando a classe MailMessage.
- Atualizamos algumas das propriedades.
- Salvamos a mensagem no formato MSG.
O seguinte trecho de código mostra como carregar o arquivo OFT, atualizar a mensagem e salvá-la no formato MSG.
Salvando arquivo MSG do Outlook como Modelo
O seguinte trecho de código mostra como salvar o arquivo MSG do outlook como um modelo.
Determinar se um MapiMessage é OFT ou MSG
Ao carregar um objeto MapiMessage a partir de um arquivo, você pode precisar determinar se a mensagem carregada é um arquivo de modelo ou um arquivo de email regular. Usando a propriedade IsTemplate da classe MapiMessage, você pode detectar com precisão se um email é um modelo ou não. Esta funcionalidade pode ser valiosa ao lidar e processar vários tipos de arquivos de email dentro de aplicativos e sistemas.
O exemplo de código abaixo demonstra como determinar se um MapiMessage é OFT ou MSG:
var msg = MapiMessage.Load("message.msg");
var isOft = msg.IsTemplate; // retorna false
var msg = MapiMessage.Load("message.oft");
var isOft = msg.IsTemplate; // retorna true
Salvando MapiMessage ou MailMessage no formato OFT
A classe SaveOptions permite que você especifique opções adicionais ao salvar um MailMessage ou MapiMessage em um formato particular.
O seguinte exemplo de código demonstra como salvar uma mensagem no formato OFT:
// Salve o MailMessage no formato OFT
using (var eml = MailMessage.Load("message.eml"))
{
eml.Save("message.oft", SaveOptions.DefaultOft);
// ou alternativa #2
var saveOptions = new MsgSaveOptions(MailMessageSaveType.OutlookTemplateFormat);
eml.Save("message.oft", saveOptions);
// ou alternativa forma #3
saveOptions = SaveOptions.CreateSaveOptions(MailMessageSaveType.OutlookTemplateFormat);
eml.Save("message.oft", saveOptions);
}
// Salve o MapiMessage no formato OFT
using (var msg = MapiMessage.Load("message.msg"))
{
msg.Save("message.oft", SaveOptions.DefaultOft);
// ou alternativa #2
var saveOptions = new MsgSaveOptions(MailMessageSaveType.OutlookTemplateFormat);
msg.Save("message.oft", saveOptions);
// ou alternativa forma #3
saveOptions = SaveOptions.CreateSaveOptions(MailMessageSaveType.OutlookTemplateFormat);
msg.Save("message.oft", saveOptions);
}
Gerenciando Mensagens Digitalmente Assinadas
Aspose.Email implementa o algoritmo completo do objeto de email S/MIME. Isso dá à API todo o poder para preservar assinaturas digitais ao converter mensagens entre formatos.
Preservando a Assinatura ao Converter de EML para MSG
Aspose.Email preserva a assinatura digital ao converter de EML para MSG. O seguinte trecho de código mostra como converter de EML para MSG.
Convertendo Mensagens S/MIME de MSG para EML
Aspose.Email preserva a assinatura digital ao converter de MSG para EML, como mostrado no seguinte trecho de código.
Verificando a Assinatura de Emails Seguros
Os seguintes recursos estão disponíveis para verificar a assinatura de objetos MapiMessage.
- Classe SecureEmailManager para verificar a assinatura de emails seguros.
- Classe SmimeResult para armazenar os resultados da verificação.
- Método SecureEmailManager.CheckSignature(MapiMessage msg).
- Método SecureEmailManager.CheckSignature(MapiMessage msg, X509Certificate2 certificateForDecrypt).
- Método SecureEmailManager.CheckSignature(MapiMessage msg, X509Certificate2 certificateForDecrypt, X509Store store).
O exemplo de código abaixo mostra como implementar os recursos em seu projeto:
var msg = MapiMessage.Load(fileName, new EmlLoadOptions());
var result = new SecureEmailManager().CheckSignature(msg);
var certFileName = "cert.pfx";
var cert = new X509Certificate2(certFileName, "pass");
var eml = MapiMessage.Load(fileName);
var store = new X509Store();
store.Open(OpenFlags.ReadWrite);
store.Add(cert);
store.Close();
var result = new SecureEmailManager().CheckSignature(eml, cert, store);
Removendo uma Assinatura de um MapiMessage
Para melhor compatibilidade, o método MapiMessage.RemoveSignature e a propriedade MapiMessage.IsSigned são usados para remover uma assinatura digital de uma mensagem.
O seguinte trecho de código mostra como implementar esses recursos em seu projeto:
var msg = MapiMessage.Load(fileName);
if (msg.IsSigned)
{
var unsignedMsg = msg.RemoveSignature();
}
Descriptografar um MapiMessage com Certificado
Se você tiver mensagens MAPI criptografadas e precisar descriptografá-las usando a chave privada armazenada em um certificado, os seguintes recursos do Aspose.Email podem ser úteis:
- MapiMessage.IsEncrypted - Obtém um valor que indica se a mensagem está criptografada.
- MapiMessage.Decrypt() - Descriptografa esta mensagem (o método pesquisa as lojas do usuário e do computador atuais para o certificado e chave privada apropriados).
- MapiMessage.Decrypt(X509Certificate2 certificate) - Descriptografa esta mensagem com o certificado.
O seguinte exemplo de código mostra como trabalhar com mensagens MAPI criptografadas:
var privateCert = new X509Certificate2(privateCertFile, "password");
var msg = MapiMessage.Load("encrypted.msg");
if (msg.IsEncrypted);
{
var decryptedMsg = msg.Decrypt(privateCert);
}
Definindo Categoria de Cor para Arquivos MSG do Outlook
Uma categoria de cor marca uma mensagem de email para algum tipo de importância ou categoria. O Microsoft Outlook permite que os usuários atribuam categorias de cor para diferenciar emails. Para manipular a categoria de cor, use o FollowUpManager. Ele contém funções como AddCategory, RemoveCategory, ClearCategories e GetCategories.
- AddCategory aceita MapiMessage e a string da categoria de cor, por exemplo, “Categoria Roxa” ou “Categoria Vermelha” como argumentos.
- RemoveCategory aceita MapiMessage e a string da categoria de cor a ser removida da mensagem.
- ClearCategories é usado para remover todas as categorias de cor da mensagem.
- GetCategories é usado para recuperar todas as categorias de cor de uma mensagem em particular.
O seguinte exemplo realiza as tarefas conforme descrito abaixo:
- Adicione uma categoria de cor.
- Adicione outra categoria de cor.
- Recupere a lista de todas as categorias.
- Remova todas as categorias.
Acessando Informações de Acompanhamento do arquivo MSG
A API Aspose.Email fornece a capacidade de acessar as informações de acompanhamento de uma mensagem enviada ou recebida. Ela pode recuperar as informações de Read, Delivery Read Receipt e resultados de voto de um arquivo de mensagem.
Recuperando Informações de Recibo de Leitura e Entrega
O seguinte trecho de código mostra como recuperar informações de recibo de leitura e entrega.
Criando Mensagens de Encaminhamento e Resposta
A API Aspose.Email fornece a capacidade de criar e formatar as mensagens de encaminhamento e resposta. As classes ReplyMessageBuilder e ForwardMessageBuilder da API são usadas para criar, respectivamente, as mensagens de Resposta e Encaminhamento. Uma mensagem de Resposta ou Encaminhamento pode ser especificada para ser criada usando qualquer um dos modos do enum OriginalMessageAdditionMode. Este enum possui os seguintes valores:
- OriginalMessageAdditionMode.None - A mensagem original não está incluída na mensagem de resposta.
- OriginalMessageAdditionMode.Attachment - A mensagem original é incluída como um anexo na mensagem de resposta.
- OriginalMessageAdditionMode.Textpart - A mensagem original é incluída como um texto no corpo da mensagem de resposta.
Criando uma Mensagem de Resposta
O seguinte trecho de código mostra como criar uma mensagem de resposta.
Criando uma Mensagem de Encaminhamento
O seguinte trecho de código mostra como criar uma mensagem de encaminhamento.