Gerenciando Arquivos de Mensagem com Aspose.Email.Outlook

Determinar o tipo de item MAPI em uma pasta PST

Um arquivo PST geralmente contém vários tipos de dados, como mensagens de email, eventos de calendário, contatos e mais. A classe MapiItemType do Aspose.Email permite acessar e categorizar diferentes tipos de itens MAPI dentro de um arquivo PST. O código abaixo demonstra como determinar o tipo de um item MAPI em uma pasta PST:

import aspose.email as ae

pst = ae.storage.pst.PersonalStorage.from_file("test.pst")
folder = pst.root_folder.get_sub_folder("Calendar")
for messageInfo in folder.enumerate_messages():
    msg = pst.extract_message(messageInfo)

    # Obter o tipo da classe com base em msg.SupportedType
    item_type = msg.supported_type

    # Tipo não suportado. Não pode ser acessado como o tipo de item apropriado.
    if item_type == ae.mapi.MapiItemType.NONE:
        print("Tipo de item não suportado")
    # Uma mensagem de email.
    elif item_type == ae.mapi.MapiItemType.MESSAGE:
        # Você pode acessar as propriedades de MapiMessage lá.
        # Um assunto, por exemplo
        print(msg.subject)
    # Um item de contato. Pode ser acessado como MapiContact.
    elif item_type == ae.mapi.MapiItemType.CONTACT:
        contact = msg.to_mapi_message_item()
        # Você pode acessar as propriedades de MapiContact lá. 
        # Um name_info.display_name, por exemplo. 
        print(contact.name_info.display_name)
    # Um item de calendário. Pode ser acessado como MapiCalendar.
    elif item_type == ae.mapi.MapiItemType.CALENDAR:
        calendar = msg.to_mapi_message_item()
        # Você pode acessar as propriedades de MapiCalendar lá. 
        # Uma localização, por exemplo. 
        print(calendar.location)
    # Uma lista de distribuição. Pode ser acessada como MapiDistributionList.
    elif item_type == ae.mapi.MapiItemType.DIST_LIST:
        dlist = msg.to_mapi_message_item()
        # Você pode acessar as propriedades de MapiDistributionList lá
    # Uma entrada de diário. Pode ser acessada como MapiJournal.
    elif item_type == ae.mapi.MapiItemType.JOURNAL:
        journal = msg.to_mapi_message_item()
        # Você pode acessar as propriedades de MapiJournal lá
    # Um StickyNote. Pode ser acessado como MapiNote.
    elif item_type == ae.mapi.MapiItemType.NOTE:
        note = msg.to_mapi_message_item()
        # Você pode acessar as propriedades de MapiNote lá
    # Um item de tarefa. Pode ser acessado como MapiTask.
    elif item_type == ae.mapi.MapiItemType.TASK:
        task = msg.to_mapi_message_item()
        # Você pode acessar as propriedades de MapiTask lá

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 o Timeout para Conversão e Carregamento de uma Mensagem

Para limitar o tempo em milissegundos da conversão de mensagens (valor padrão 3 seg), a propriedade timeout da classe MailConversionOptions é utilizada.

Veja como você pode definir um timeout para os processos de conversão e carregamento de mensagens:

import aspose.email as ae

msg = ae.mapi.MapiMessage.load("my.msg")
options = ae.mapi.MailConversionOptions()
options.timeout = 5000
mailMessage = msg.to_mail_message(options)

Ao definir um timeout para os processos de conversão e carregamento de mensagens, você pode controlar o tempo máximo que essas operações estão autorizadas a durar. Após definir o timeout, você pode prosseguir com seus processos de conversão e carregamento de mensagens.

Processamento de Arquivos de Template do Outlook (OFT)

Carregar, Modificar e Salvar um Arquivo OFT

Os templates do Outlook (OFT) oferecem uma maneira conveniente de simplificar o processo de envio de mensagens de email repetitivas. Em vez de compor o mesmo email do zero a cada vez, você pode criar uma mensagem no Outlook e salvá-la como um Template do Outlook (OFT). Mais tarde, sempre que precisar enviar uma mensagem semelhante, pode gerá-la rapidamente a partir do template. Essa abordagem economiza o esforço de reescrever o mesmo conteúdo no corpo da mensagem, especificando a linha de assunto, formatação e mais.

A classe MailMessage do Aspose.Email fornece uma ferramenta poderosa para carregar e manipular arquivos de template do Outlook (OFT). Uma vez que um template do Outlook é carregado em uma instância da classe MailMessage, você pode facilmente atualizar propriedades como remetente, destinatário, corpo da mensagem, assunto e vários outros atributos.

import aspose.email as ae

# Carregar o arquivo OFT
oft_file_path = "seu_template.oft"
mail_message = ae.MailMessage.load(oft_file_path)

# Atualizar propriedades conforme necessário
mail_message.subject = "Assunto Atualizado"
mail_message.body = "Texto do corpo atualizado."

# Salvar a mensagem atualizada como um arquivo MSG
msg_file_path = "mensagem_atualizada.msg"
mail_message.save(msg_file_path, ae.MailMessageSaveType.outlook_message_format_unicode)

print(f"Mensagem atualizada salva em {msg_file_path}")

Após fazer as atualizações necessárias, você pode enviar o email usando a classe SmtpClient:

# Enviar o email
smtpClient.send(message)

Salvando um arquivo MSG do Outlook como Template

Para isso, você pode usar a classe MailMessage para criar um email e, em seguida, salvá-lo como um arquivo OFT. O seguinte exemplo de código mostrará como salvar um email como um Template do Outlook:

import aspose.email as ae

# Criar um novo MailMessage
message = ae.MailMessage()
message.subject = "Template de Outlook Exemplo"
message.html_body = "<html><body>Este é o corpo do email.</body></html>"
message.from_address = ae.MailAddress("seu.email@exemplo.com", "Seu Nome")

# Salvar o MailMessage como um arquivo Template do Outlook (OFT)
oft_file_path = "template_exemplo.oft"
message.save(oft_file_path, ae.SaveOptions.default_oft)

print(f"Template do Outlook salvo como {oft_file_path}")

OFT ou MSG: Determinar o tipo de um MapiMessage

O seguinte exemplo de código ilustra como determinar se uma mensagem MAPI carregada representa uma mensagem de email padrão ou um Template do Outlook (OFT):

msg = ae.mapi.MapiMessage.Load("mensagem.msg");
isOft = msg.is_template # retorna false

msg = ae.mapi.MapiMessage.Load("mensagem.oft");
isOft = msg.IsTemplate; # retorna true

Após carregar o arquivo MSG, o código verifica se a propriedade is_template da classe MapiMessaage é True ou False. Caso retorne false, a mensagem carregada é uma mensagem de email padrão, não um Template do Outlook; caso contrário, se retornar true, a mensagem não é uma mensagem de email padrão, é um Template do Outlook.

Salvando MapiMessage ou MailMessage como OFT

A SaveOptions é uma classe base abstrata para classes que permitem ao usuário especificar opções adicionais ao salvar um MailMessage em um formato específico. O seguinte exemplo de código demonstra como salvar uma mensagem no formato OFT:

import aspose.email as ae

# Salvar o MailMessage no formato OFT
eml = ae.MailMessage.load("mensagem.eml")

eml.save("mensagem.oft", ae.SaveOptions.default_oft)

# ou alternativa maneira 2
save_options = ae.MsgSaveOptions(ae.MailMessageSaveType.outlook_template_format)
eml.save("mensagem.oft", save_options)

# ou alternativa maneira 3
save_options = ae.SaveOptions.create_save_options(ae.MailMessageSaveType.outlook_template_format)
eml.save("mensagem.oft", save_options)

# Salvar o MapiMessage no formato OFT
msg = ae.mapi.MapiMessage.load("mensagem.msg")

msg.save("mensagem.oft", ae.SaveOptions.default_oft)

# ou alternativa maneira 2
save_options = ae.MsgSaveOptions(ae.MailMessageSaveType.outlook_template_format)
msg.save("mensagem.oft", save_options)

# ou alternativa maneira 3
save_options = ae.SaveOptions.create_save_options(ae.MailMessageSaveType.outlook_template_format)
msg.save("mensagem.oft", save_options)

Gerenciando Mensagens com Assinaturas Digitais

A biblioteca fornece a classe LoadOptions, uma classe base abstrata para classes que permitem ao usuário especificar opções adicionais ao carregar um MailMessage de um formato específico. A opção de preservação de assinatura é definida por padrão.

Converter de EML para MSG Preservando Assinatura

O exemplo de código abaixo demonstra como carregar uma mensagem, convertê-la para formato MSG e salvar como MSG (a assinatura é preservada por padrão):


import aspose.email as ae

# Carregar a mensagem de email
loadOptions = ae.EmlLoadOptions()
message = ae.MailMessage.load("Mensagem.eml", loadOptions)
# Salvar como MSG
message.save("ConverterEMLParaMSG_saida.msg", ae.SaveOptions.default_msg_unicode)

Converter Mensagens S/MIME de MSG para EML

Aspose.Email permite converter de MSG para EML preservando uma assinatura digital, como mostrado no seguinte exemplo de código.

import aspose.email as ae

# Carregar a mensagem de email
loadOptions = ae.EmlLoadOptions()
smime_eml = ae.MailMessage.load("smime.eml", loadOptions)

conversion_options = ae.mapi.MapiConversionOptions(ae.mapi.OutlookMessageFormat.UNICODE)
msg = ae.mapi.MapiMessage.from_mail_message(smime_eml, conversion_options)
# Salvar arquivo no disco
msg.save("ConverterMensagensMIMEDoMSGParaEML_saida.msg")

Definir Categoria de Cor para Arquivos MSG do Outlook

Às vezes, você pode precisar diferenciar emails de importância particular e organizá-los visualmente. A biblioteca fornece uma maneira de fazer isso ao atribuir uma cor específica a um item de mensagem. Quando você define uma categoria de cor para um item, isso permite que você identifique e localize facilmente itens relacionados à primeira vista. Use a classe FollowUpManager para definir a categoria de cor para uma mensagem como no seguinte exemplo de código:


import aspose.email as ae

msg = ae.mapi.MapiMessage.load("my.msg")

# Adicionar duas categorias
ae.mapi.FollowUpManager.add_category(msg, "Categoria Roxa")
ae.mapi.FollowUpManager.add_category(msg, "Categoria Vermelha")

# Recuperar a lista de categorias disponíveis
categories = ae.mapi.FollowUpManager.get_categories(msg)

# Remover a categoria especificada e então limpar todas as categorias
ae.mapi.FollowUpManager.remove_category(msg, "Categoria Vermelha")
ae.mapi.FollowUpManager.clear_categories(msg)

Acessando Informações de Acompanhamento de um arquivo MSG

Extrair Informações de Recibo de Leitura e Entrega

O exemplo de código abaixo demonstra como extrair informações do destinatário e seu status de rastreamento de um arquivo de mensagem do Outlook (MSG):

import aspose.email as ae

msg = ae.mapi.MapiMessage.load("received.msg")

for recipient in msg.recipients:
    print(f"Destinatário: {recipient.display_name}")
    print(f"Hora de entrega:  {recipient.properties[ae.mapi.MapiPropertyTag.RECIPIENT_TRACKSTATUS_TIME_DELIVERY]}")
    print(f"Hora de leitura:  {recipient.properties[ae.mapi.MapiPropertyTag.RECIPIENT_TRACKSTATUS_TIME_READ]}")

Criando Mensagens de Encaminhamento e Resposta

Aspose.Email fornece maneiras diretas de criar mensagens de encaminhamento e resposta com base nas existentes.

Criando uma Mensagem de Encaminhamento

Você pode usar a classe ForwardMessageBuilder para criar uma mensagem de encaminhamento definindo a mensagem de origem, remetente, destinatários, assunto e corpo. Mensagens de encaminhamento podem incluir a mensagem original como um anexo ou como o corpo da mensagem encaminhada. Você tem a flexibilidade de personalizar propriedades adicionais como anexos, cabeçalhos e opções de formatação. O exemplo de código abaixo mostra como criar uma mensagem de encaminhamento:


import aspose.email as ae

msg = ae.mapi.MapiMessage.load("original.msg")

builder = ae.tools.ForwardMessageBuilder()
builder.addition_mode = ae.tools.OriginalMessageAdditionMode.TEXTPART

forwardMsg = builder.build_response(msg)
forwardMsg.save("encaminhar_saida.msg")

Criando uma Mensagem de Resposta

A classe ReplyMessageBuilder é usada para configurar as opções de resposta, incluindo a mensagem de origem, remetente, destinatários, modo de resposta, prefixo de assunto e o corpo da mensagem de resposta. Mensagens de resposta podem ser criadas em diferentes modos de resposta como “Responder ao Remetente” ou “Responder a Todos”, conforme sua necessidade. Você pode personalizar várias propriedades como anexos, cabeçalhos e opções de formatação para a mensagem de resposta. O exemplo de código abaixo mostra como criar uma mensagem de resposta:

import aspose.email as ae

msg = ae.mapi.MapiMessage.load("original.msg")

builder = ae.tools.ReplyMessageBuilder()

# Definir Propriedades do ReplyMessageBuilder
builder.reply_all = True
builder.addition_mode = ae.tools.OriginalMessageAdditionMode.TEXTPART
builder.response_text = "<p><b>Caro Amigo,</b></p> O que quero fazer é apresentar meu co-autor e co-professor. <p><a href=\"www.google.com\">Este é o primeiro link</a></p><p><a href=\"www.google.com\">Este é o segundo link</a></p>";

replyMsg = builder.build_response(msg)
replyMsg.save("responder_saida.msg")