Trabalhando com Anexos de Mensagem
Gerenciando Anexos com Aspose Outlook
Criar e Salvar Arquivos Outlook Message (MSG) explicou como criar e salvar mensagens, e como criar arquivos MSG com anexos. Este artigo explica como gerenciar anexos do Microsoft Outlook com Aspose.Email. Anexos de um arquivo de mensagem são acessados e salvos no disco usando a propriedade Attachments da classe MapiMessage. A propriedade Attachments é uma coleção do tipo classe MapiAttachmentCollection.
Verificar se o Anexo é Inline ou Regular
"Inline" e "Regular" referem‑se ao modo como são incluídos em uma mensagem de e‑mail. Anexos Regular são arquivos anexados da forma tradicional. Normalmente são exibidos em uma lista no cliente de e‑mail e podem ser baixados pelo destinatário e salvos em um armazenamento local. Anexos Inline, também conhecidos como imagens incorporadas ou inline, são tipicamente usados para incluir imagens ou outros meios dentro do corpo do e‑mail. Eles não são exibidos em uma lista separada, mas sim mostrados diretamente no conteúdo da mensagem, como no corpo do e‑mail. Isso permite incluir imagens ou outros meios que fazem parte do conteúdo da mensagem. O exemplo de código abaixo demonstra como determinar se um anexo é inline ou regular:
import aspose.email as ae
msg = ae.mapi.MapiMessage.load("message.msg")
for attachment in msg.attachments:
print(f"{attachment.display_name}:{attachment.is_inline}")
Salvar Anexos de Arquivo Outlook Message (MSG)
Para salvar anexos de um arquivo MSG:
- Itere pela coleção MapiAttachmentCollection e obtenha os anexos individuais.
- Para salvar os anexos, chame o método Save() da classe MapiAttachment.
O trecho de código a seguir mostra como salvar anexos no disco local.
import aspose.email as ae
data_dir = "C://dataDir/"
file_name = "message.msg"
# Create an instance of MapiMessage from file
message = ae.mapi.MapiMessage.from_file(data_dir + file_name)
# Iterate through the attachments collection
for attachment in message.attachments:
# Save the individual attachment
attachment.save(data_dir + attachment.file_name)
Obtendo Anexos de Mensagens de E‑mail Aninhados
Anexos OLE incorporados também aparecem na coleção Attachment da classe MapiMessage. O exemplo de código a seguir analisa um arquivo de mensagem em busca de anexos de mensagem incorporados e os salva no disco. O método estático FromProperties() da classe MapiMessage pode criar uma nova mensagem a partir de um anexo incorporado. O trecho de código a seguir mostra como obter anexos de mensagens de e‑mail aninhados.
import aspose.email as ae
eml = ae.mapi.MapiMessage.load("my.msg")
# Create a MapiMessage object from the individual attachment
get_attachment = ae.mapi.MapiMessage.from_properties(eml.attachments[0].object_data.properties)
# Create an object of type MailMessageInterpreter from the above message and save the embedded message to a file on disk
mail_message = get_attachment.to_mail_message(ae.mapi.MailConversionOptions())
mail_message.save("NestedMailMessageAttachments_out.eml", ae.SaveOptions.default_eml)
Removendo anexos
A biblioteca Aspose Outlook fornece a funcionalidade de remover anexos de arquivos Microsoft Outlook Message (.msg):
- Chame o método RemoveAttachments(). Ele recebe o caminho do arquivo de mensagem como parâmetro. É implementado como um método estático público, portanto você não precisa instanciar o objeto.
O trecho de código a seguir mostra como remover Anexos.
import aspose.email as ae
ae.mapi.MapiMessage.remove_attachments("AttachmentsToRemove_out.msg")
Você também pode chamar o método estático DestoryAttachment() da classe MapiMessage. Ele funciona mais rápido que RemoveAttachment(), pois o método RemoveAttachment() analisa o arquivo da mensagem.
import aspose.email as ae
# Destroy attachments in the MapiMessage
ae.mapi.MapiMessage.destroy_attachments(data_dir + "AttachmentsToDestroy_out.msg")
Adicionando Anexos MSG
Uma mensagem do Outlook pode conter outras mensagens do Microsoft Outlook em anexos, seja como mensagens regulares ou incorporadas. O MapiAttachmentCollection fornece membros sobrecarregados do método Add para criar mensagens do Outlook com ambos os tipos de anexos.
Experimente!
Adicione ou remova anexos de e‑mail online com o gratuito Aspose.Email Editor App.
Adicionar um Anexo de Referência a um MapiMessage
"Anexo de referência" normalmente refere‑se a um anexo que contém uma referência ou link para um recurso externo, em vez do arquivo real. Essas referências são frequentemente usadas em e‑mails HTML para vincular a imagens ou recursos externos hospedados em um servidor remoto. Em vez de incorporar o arquivo inteiro, um anexo de referência inclui uma URL ou referência ao conteúdo externo.
Aspose.Email fornece um conjunto de ferramentas para exibir corretamente anexos de referência, apresentadas no exemplo de código a seguir:
import aspose.email as ae
msg = ae.mapi.MapiMessage.load("message.msg")
# Add reference attachment
msg.attachments.add("Document.pdf",
"https://drive.google.com/file/d/1HJ-M3F2qq1oRrTZ2GZhUdErJNy2CT3DF/",
"https://drive.google.com/drive/my-drive",
"GoogleDrive")
# Also, you can set additional attachment properties
msg.attachments[0].set_property(ae.mapi.KnownPropertyList.ATTACHMENT_PERMISSION_TYPE, int(ae.AttachmentPermissionType.ANYONE_CAN_EDIT))
msg.attachments[0].set_property(ae.mapi.KnownPropertyList.ATTACHMENT_ORIGINAL_PERMISSION_TYPE, 0)
msg.attachments[0].set_property(ae.mapi.KnownPropertyList.ATTACHMENT_IS_FOLDER, False)
msg.attachments[0].set_property(ae.mapi.KnownPropertyList.ATTACHMENT_PROVIDER_ENDPOINT_URL, "")
msg.attachments[0].set_property(ae.mapi.KnownPropertyList.ATTACHMENT_PREVIEW_URL, "")
msg.attachments[0].set_property(ae.mapi.KnownPropertyList.ATTACHMENT_THUMBNAIL_URL, "")
# Finally save the message
msg.save("msg_with_ref_attach.msg")
Incorporar uma Mensagem como Anexo
O trecho de código a seguir mostra como arquivos MSG do Outlook incorporados em um arquivo MSG contêm um PR_ATTACH_METHOD cujo valor é 5.
import aspose.email as ae
# Create a new MapiMessage
message = ae.mapi.MapiMessage("from@test.com", "to@test.com", "Subj", "This is a message body")
# Load the attachment message
attach_msg = ae.mapi.MapiMessage.load("Message.msg")
# Add the attachment to the message
message.attachments.add("Weekly report.msg", attach_msg)
# Save the message with the embedded message attachment
message.save("WithEmbeddedMsg_out.msg")
Ler Mensagens Incorporadas a partir de Anexos
O trecho de código a seguir mostra como ler uma mensagem incorporada a partir de um anexo.
import aspose.email as ae
file_name = "path/to/file.msg"
# Load the MapiMessage from file
message = ae.mapi.MapiMessage.from_file(file_name)
# Check if the first attachment is an Outlook message
if message.attachments[0].object_data.is_outlook_message:
# Get the embedded message as MapiMessage
embedded_message = message.attachments[0].object_data.to_mapi_message()
# Perform further operations with the embedded message
# ...
Inserção e Substituição de Anexos
A API Aspose.Email fornece a capacidade de inserir anexos em um índice específico na mensagem pai. Também oferece a funcionalidade de substituir o conteúdo de um anexo por outro anexo de mensagem. O trecho de código a seguir mostra como inserir e substituir anexos.
Inserir em Local Específico
A API Aspose.Email fornece a capacidade de inserir um anexo MSG em um MSG pai usando o método Insert da MapiAttachmentCollection: MapiAttachmentCollection Insert(int index, string name, MapiMessage msg). O trecho de código a seguir mostra como inserir em um local específico.
import aspose.email as ae
from io import BytesIO
file_name = "path/to/file.msg"
# Load the MapiMessage from file
message = ae.mapi.MapiMessage.load(file_name)
# Save the attachment to a memory stream
memory_stream = BytesIO()
message.attachments[2].save(memory_stream)
# Load the attachment from the memory stream
get_data = ae.mapi.MapiMessage.load(memory_stream)
# Insert the loaded attachment at index 1
message.attachments.insert(1, "new 11", get_data)
Substituir Conteúdo do Anexo
Isso pode ser usado para substituir o conteúdo de anexos incorporados pelos novos usando o método Replace. No entanto, não pode ser usado para inserir um anexo com PR_ATTACH_NUM = 4 (por exemplo) na coleção com collection.Count = 2. O trecho de código a seguir mostra como substituir o conteúdo de um anexo.
import aspose.email as ae
from io import BytesIO
file_name = "path/to/file.msg"
# Load the MapiMessage from file
message = ae.mapi.MapiMessage.load(file_name)
# Save the attachment to a memory stream
memory_stream = BytesIO()
message.attachments[2].save(memory_stream)
# Load the attachment from the memory stream
get_data = ae.mapi.MapiMessage.load(memory_stream)
# Replace the attachment at index 1 with the loaded attachment
message.attachments.replace(1, "new 1", get_data)
Renomear um Anexo em um MapiMessage
É possível modificar os nomes de exibição dos anexos em mensagens de e‑mail carregadas a partir de um arquivo. O exemplo de código abaixo mostra como fazer isso:
import aspose.email as ae
msg = ae.mapi.MapiMessage.load("message.msg")
msg.attachments[0].display_name = "New display name 1"
msg.attachments[1].display_name = "New display name 2"