Quản lý Đính kèm trong Tin nhắn Outlook

Cái Tạo và Lưu Tệp Tin nhắn Outlook (MSG) bài viết giải thích các bước liên quan đến việc tạo và lưu tin nhắn, bao gồm tệp MSG có đính kèm. Bài này đi sâu vào việc quản lý các đính kèm Microsoft Outlook bằng Aspose.Email. Nó sẽ hướng dẫn bạn cách truy cập và lưu các đính kèm từ tệp tin nhắn sử dụng attachments thuộc tính của MapiMessage lớp. Thuộc tính này là một bộ sưu tập thuộc về MapiAttachmentCollection lớp, cho phép xử lý đính kèm một cách hiệu quả.

Kiểm tra Đính kèm Inline vs Regular

"Inline" và "Regular" đề cập tới cách chúng được bao gồm trong một tin nhắn email. Đính kèm Regular là các tệp được đính kèm theo cách truyền thống. Chúng thường hiển thị trong danh sách trong khách hàng email và có thể được người nhận tải xuống và lưu vào bộ nhớ cục bộ. Đính kèm Inline, còn gọi là nhúng hoặc ảnh inline, thường được dùng để chèn hình ảnh hoặc phương tiện khác vào phần thân của email. Chúng không hiển thị trong danh sách riêng mà được hiển thị trực tiếp trong nội dung email, chẳng hạn trong phần thân email. Điều này cho phép bạn bao gồm hình ảnh hoặc phương tiện khác là một phần của nội dung tin nhắn. Đoạn mã dưới đây minh họa cách xác định xem một đính kèm là inline hay 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}")

Xác định Đính kèm Tham chiếu trong Tin nhắn MAPI

API Aspose.Email bao gồm is_reference thuộc tính của MapiAttachment lớp cho phép các nhà phát triển xác định các đính kèm tham chiếu trong một tin nhắn. Thử mẫu mã dưới đây để xem cách hoạt động trong dự án python:

import aspose.email as ae

# Load or create a MapiMessage
msg = ae.mapi.MapiMessage.load("Message_With_Reference_Attachment.msg")

# Iterate through the attachments
for attachment in msg.attachments:
    if attachment.is_reference:
        # Process reference attachment
        pass

Lưu Đính kèm từ Tệp MSG

Để lưu các đính kèm từ tệp MSG:

  1. Lặp qua MapiAttachmentCollection bộ sưu tập và lấy các đính kèm riêng lẻ.
  2. Để lưu các đính kèm, gọi MapiAttachment lớp Save() phương thức.

Đoạn mã sau đây cho bạn thấy cách lưu các đính kèm vào đĩa cục bộ:

import aspose.email as ae

data_dir = "C://dataDir/"
file_name = "message.msg"

# Create an instance of MapiMessage from file
message = ae.mapi.MapiMessage.load(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)

Xử lý Đính kèm TNEF

Tải và Lưu Đính kèm ở Định dạng TNEF

Aspose.Email cung cấp các phương thức để xử lý đính kèm TNEF. Các phương thức này cho phép lưu và tải đính kèm ở định dạng TNEF, thường được sử dụng trong tin nhắn Outlook (winmail.dat).

Mẫu mã sau đây minh họa cách trích xuất, lưu và thêm lại các đính kèm email định dạng TNEF trong khi quản lý chúng qua luồng bộ nhớ hoặc tệp:

import io
from aspose.email.mapi import MapiMessage, MapiAttachment

# Load the EML message (which contains a winmail.dat TNEF attachment)
msg = MapiMessage.load("message.eml")

# Save the first attachment as a winmail.dat file
msg.attachments[0].save_to_tnef("winmail.dat")

# Load the TNEF attachment from the file and add it back to the message
from_tnef_attachment = MapiAttachment.load_from_tnef("winmail.dat")
msg.attachments.add(from_tnef_attachment.long_file_name, from_tnef_attachment.binary_data)

# (Optional) If you also want to use a memory stream instead of the file
ms = io.BytesIO()
msg.attachments[0].save_to_tnef(ms)

# Reset the stream position to the beginning
ms.seek(0)

# Load the TNEF attachment directly from the memory stream and add it
from_tnef_attachment_from_stream = MapiAttachment.load_from_tnef(ms)
msg.attachments.add(from_tnef_attachment_from_stream.long_file_name, from_tnef_attachment_from_stream.binary_data)

Truy xuất Đính kèm Tin nhắn Lồng nhau

Các đính kèm OLE (Object Linking and Embedding) nhúng cũng xuất hiện trong bộ sưu tập đính kèm của MapiMessage lớp. Ví dụ mã dưới đây minh họa cách phân tích tệp tin nhắn và trích xuất các đính kèm tin nhắn nhúng, sau đó lưu chúng vào đĩa để sử dụng tiếp. MapiMessage lớp cung cấp một from_properties phương thức tĩnh để tạo một tin nhắn mới từ một đính kèm nhúng. Đoạn mã sau đây cho bạn thấy cách lấy các đính kèm tin nhắn lồng nhau:

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)

Xóa Đính kèm

Thư viện Aspose.Email cung cấp chức năng xóa các đính kèm khỏi các tệp Microsoft Outlook Message (.msg). Sử dụng remove_attachments(path) phương thức yêu cầu đường dẫn của tệp tin nhắn làm tham số. Là một phương thức tĩnh công khai, bạn có thể gọi trực tiếp mà không cần khởi tạo đối tượng, làm cho quá trình trở nên đơn giản và hiệu quả.

Đoạn mã sau đây cho bạn thấy cách xóa các đính kèm khỏi tệp MSG bằng cách sử dụng Aspose.Email:

import aspose.email as ae

ae.mapi.MapiMessage.remove_attachments("AttachmentsToRemove_out.msg")

Bạn cũng có thể gọi phương thức tĩnh destroy_attachments của MapiMessage lớp. Nó hoạt động nhanh hơn remove_attachments vì phương thức remove_attachments phân tích tệp tin nhắn.

import aspose.email as ae

# Destroy attachments in the MapiMessage
ae.mapi.MapiMessage.destroy_attachments("AttachmentsToDestroy_out.msg")

Thêm Đính kèm MSG

Một tin nhắn Outlook có thể chứa các tin nhắn Microsoft Outlook khác dưới dạng đính kèm, có thể là thông thường hoặc nhúng. MapiAttachmentCollection cung cấp các thành viên nạp chồng của thêm phương thức để tạo tin nhắn Outlook với cả hai loại đính kèm.

Thêm Đính kèm Tham chiếu vào Tin nhắn MAPI

Đính kèm tham chiếu thường đề cập đến một đính kèm chứa một tham chiếu hoặc liên kết tới tài nguyên bên ngoài thay vì tệp thực tế. Những tham chiếu này thường được sử dụng trong email HTML để liên kết tới hình ảnh hoặc tài nguyên ngoại vi được lưu trên máy chủ từ xa. Thay vì nhúng toàn bộ tệp, một đính kèm tham chiếu bao gồm URL hoặc tham chiếu tới nội dung bên ngoài.

Để thêm một đính kèm tham chiếu vào tin nhắn MAPI, sử dụng add phương thức của MapiAttachmentCollection class và ReferenceAttachmentOptions lớp để chỉ định:

  • URL nội dung (liên kết trực tiếp tới tệp)

  • URL nhà cung cấp (liên kết tới vị trí tệp hoặc giao diện UI)

  • Tên nhà cung cấp đính kèm (ví dụ, "GoogleDrive")

như được minh họa trong mẫu mã dưới đây.

import aspose.email as ae

# Load or create a MapiMessage
msg = ae.mapi.MapiMessage()
msg.subject = "Email with Reference Attachment"
msg.body = "This message contains a cloud-based reference attachment."

# Create ReferenceAttachmentOptions
options = ae.mapi.ReferenceAttachmentOptions(
    "https://drive.google.com/file/d/1HJ-M3F2qq1oRrTZ2GZhUdErJNy2CT3DF/",
    "https://drive.google.com/drive/my-drive",
    "GoogleDrive"
)

# Add the reference attachment to the message
msg.attachments.add("Document.pdf", options)

# Save the message to MSG format
msg.save("Message_With_Reference_Attachment.msg")

Nhúng Tin nhắn làm Đính kèm

Đoạn mã dưới đây minh họa cách nhúng tệp Outlook MSG làm đính kèm trong một tệp MSG khác. Một tệp MSG nhúng bao gồm thuộc tính PR_ATTACH_METHOD với giá trị 5, cho biết nó là một đính kèm loại "message".

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")

Đọc Tin nhắn Nhúng từ Đính kèm

Đoạn mã dưới đây cho bạn thấy cách đọc các tin nhắn nhúng từ đính kèm.

import aspose.email as ae

file_name = "path/to/file.msg"

# Load the MapiMessage from file
message = ae.mapi.MapiMessage.load(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
    # ...

Chèn và Thay thế Đính kèm

API Aspose.Email cung cấp chức năng chèn đính kèm vào một chỉ mục cụ thể trong tin nhắn cha. Ngoài ra, nó còn cho phép thay thế nội dung của một đính kèm hiện có bằng một đính kèm tin nhắn khác. Dưới đây là các đoạn mã minh họa cách thực hiện chèn và thay thế đính kèm.

Chèn Đính kèm vào Vị trí Cụ thể

API Aspose.Email cho phép bạn chèn một đính kèm MSG vào MSG cha bằng phương thức Insert của MapiAttachmentCollection. Phương thức này được sử dụng với chữ ký MapiAttachmentCollection Insert(int index, string name, MapiMessage msg). Dưới đây là đoạn mã minh họa cách chèn một đính kèm vào vị trí cụ thể:

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)

Thay thế Nội dung Đính kèm

Bạn có thể sử dụng replace phương pháp để cập nhật nội dung của tệp đính kèm nhúng bằng dữ liệu mới. Tuy nhiên, lưu ý rằng phương pháp này không thể dùng để chèn một tệp đính kèm với PR_ATTACH_NUM = 4 vào bộ sưu tập chỉ chứa 2 tệp đính kèm. Dưới đây là đoạn mã minh họa cách thay thế nội dung tệp đính kèm:

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)

Đổi tên Đính kèm trong MapiMessages

Với Aspose.Email, bạn có thể dễ dàng sửa đổi tên hiển thị của các đính kèm trong tin nhắn email được tải từ file. Mẫu mã dưới đây minh họa cách thực hiện điều này:

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"