Làm việc với các thuộc tính MAPI

Xác định Loại Mục MAPI trong Thư mục PST

Một tệp PST thường chứa các loại dữ liệu khác nhau, như tin nhắn email, sự kiện lịch, danh bạ và hơn nữa. MapiItemType lớp của Aspose.Email cho phép bạn truy cập và phân loại các loại mục MAPI khác nhau trong tệp PST. Đoạn mã dưới đây minh họa cách xác định loại mục MAPI trong một thư mục PST:

import aspose.email as ae
import aspose.pycore as pycore

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

    # Get the class type based on msg.supported_type
    item_type = msg.supported_type

    # Non-supported type. It cannot be accessed as appropriate item type.
    if item_type == ae.mapi.MapiItemType.NONE:
        print("Item type not supported")
    # An email message.
    elif item_type == ae.mapi.MapiItemType.MESSAGE:
        # You can access to MapiMessage properties there.
        # A subject for example
        print(msg.subject)
    # A contact item. Can be accessed as MapiContact.
    elif item_type == ae.mapi.MapiItemType.CONTACT:
        contact = pycore.cast(ae.mapi.MapiContact, msg.to_mapi_message_item())
        # You can access to MapiContact properties there. 
        # A name_info.display_name for example. 
        print(contact.name_info.display_name)
    # A calendar item. Can be accessed as MapiCalendar.
    elif item_type == ae.mapi.MapiItemType.CALENDAR:
        calendar = pycore.cast(ae.mapi.MapiCalendar, msg.to_mapi_message_item())
        # You can access to MapiCalendar properties there. 
        # A location for example. 
        print(calendar.location)
    # A distribution list. Can be accessed as MapiDistributionList.
    elif item_type == ae.mapi.MapiItemType.DIST_LIST:
        dlist = pycore.cast(ae.mapi.MapiDistributionList, msg.to_mapi_message_item())
        # You can access to MapiDistributionList properties there
    # A Journal entry. Can be accessed as MapiJournal.
    elif item_type == ae.mapi.MapiItemType.JOURNAL:
        journal = pycore.cast(ae.mapi.MapiJournal, msg.to_mapi_message_item())
        # You can access to MapiJournal properties there
    # A StickyNote. Can be accessed as MapiNote.
    elif item_type == ae.mapi.MapiItemType.NOTE:
        note = pycore.cast(ae.mapi.MapiNote, msg.to_mapi_message_item())
        # You can access to MapiNote properties there
    # A Task item. Can be accessed as MapiTask.
    elif item_type == ae.mapi.MapiItemType.TASK:
        task = pycore.cast(ae.mapi.MapiTask, msg.to_mapi_message_item())
        # You can access to MapiTask properties there

Truy cập và Quản lý Thuộc tính MAPI

Cái MapiProperty lớp đại diện cho một thuộc tính MAPI, bao gồm:

  • Name: một chuỗi đại diện cho tên của thuộc tính.
  • Tag: một số nguyên dài đại diện cho thẻ của thuộc tính.
  • Data: một mảng byte đại diện cho dữ liệu của thuộc tính.

Lấy Thuộc tính MAPI bằng Thẻ Thuộc tính

Đoạn mã dưới đây tải một tin MAPI, lấy các thuộc tính chính như tiêu đề và trang mã internet, và an toàn xử lý trường hợp các thuộc tính này không tồn tại. Để lấy các thuộc tính MAPI:

  1. Tải tin MAPI từ tệp bằng load phương thức.
  2. Sử dụng MapiPropertyTag lớp để truy cập các thuộc tính cụ thể từ một tin MAPI, như tiêu đề và trang mã internet.
  3. Xử lý các thuộc tính thiếu.
from aspose.email.mapi import MapiMessage, MapiPropertyTag

# Load from file
msg = MapiMessage.load("message.msg")

# Access the MapiPropertyTag.PR_SUBJECT property
prop = msg.properties[MapiPropertyTag.SUBJECT]

# If the property is not found, check the MapiPropertyTag.PR_SUBJECT_W (which is a // Unicode peer of the MapiPropertyTag.PR_SUBJECT)
if prop is None:
	prop = msg.properties[MapiPropertyTag.SUBJECT_W]

# Cannot found
if prop is None:
	print("No property found!")

# Get the property data as string
subject = prop.get_string()

print("Subject:" + subject)

# Read internet code page property
prop = msg.properties[MapiPropertyTag.INTERNET_CPID]
if prop is not None:
	print("CodePage:" + str(prop.get_long()))

Đặt Thuộc tính MAPI

Đoạn mã dưới đây cho bạn thấy cách đặt các thuộc tính MAPI.

Đọc các Thuộc tính MAPI có tên

Aspose.Email cung cấp một bộ API để làm việc với tệp MSG, bao gồm việc trích xuất các thuộc tính MAPI có tên.

Đọc các Thuộc tính MAPI có tên từ Tệp MSG

Để đọc các thuộc tính MAPI có tên, bạn có thể sử dụng named_properties thuộc tính của MapiMessage lớp. Mẫu mã sau đây cho thấy cách tải một tin nhắn, truy xuất tất cả các thuộc tính MAPI có tên, lặp qua từng thuộc tính để kiểm tra giá trị của chúng:

import aspose.email as ae

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

# Get all named MAPI properties
properties = msg.named_properties.values
# Read all properties in foreach loop
for prop in properties:
    #  Read any specific property
    if prop.descriptor.canonical_name == "PidLidSideEffects":
        print(f"{prop.descriptor.canonical_name} = {prop}")
    if prop.descriptor.canonical_name == "PidLidInternetAccountName":
        print(f"{prop.descriptor.canonical_name} = {prop}")

Đọc các Thuộc tính MAPI có tên từ Đính kèm

Aspose.Email cho phép truy xuất tất cả các thuộc tính MAPI có tên của một tệp đính kèm. Mẫu mã sau đây cho thấy cách đọc các thuộc tính MAPI có tên từ các tệp đính kèm:

import aspose.email as ae

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

# Get all named MAPI properties
attach_properties = msg.attachments[0].named_properties.values
# Read all properties in foreach loop
for prop in attach_properties:
    #  Read any specific property
    if prop.descriptor.name == "AttachmentOriginalUrl":
        print(f"{prop.descriptor.name} = {prop.get_string()}")
    if prop.descriptor.name == "AttachmentWasSavedToCloud":
        print(f"{prop.descriptor.name} = {prop.get_boolean()}")

Quản lý Thuộc tính

Xóa thuộc tính khỏi tệp MSG và đính kèm

Mẫu mã dưới đây minh họa việc tạo một tin nhắn Outlook MSG với nội dung thân và một tệp tin tin nhắn được đính kèm. Nó cũng trình bày cách xóa thuộc tính đính kèm khỏi tin nhắn đã tạo.

import aspose.email as ae

# create an MSG
msg = ae.mapi.MapiMessage("from@domain.com", "to@domain.com", "subject", "body")
msg.set_body_content("<html><body><h1>This is the body content</h1></body></html>", ae.mapi.BodyContentType.HTML)

# load message and add it to created MSG as attachment
attachment = ae.mapi.MapiMessage.load("attach.msg")
msg.attachments.add("Outlook2 Test subject.msg", attachment)

# count of attachment properties before removal
print(f"Before removal = {msg.attachments[0].properties.count}")

# Delete anyone attachment property
msg.attachments[0].remove_property(923467779)

# count of attachment properties after removal
print(f"After removal = {msg.attachments[0].properties.count}")

Chuyển đổi MSG sang thông điệp MIME

API Aspose.Email cung cấp khả năng chuyển đổi tệp MSG sang thông điệp MIME bằng to_mail_message phương thức.

Đặt Thời gian Chờ cho Chuyển đổi và Tải Tin nhắn

Để giới hạn thời gian chuyển đổi tin nhắn tính bằng mili giây (giá trị mặc định 3 giây), thuộc tính timeout của MailConversionOptions lớp được sử dụng.

Dưới đây là cách bạn có thể đặt thời gian chờ cho các quá trình chuyển đổi và tải tin nhắn:

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)

Bằng cách đặt thời gian chờ cho các quá trình chuyển đổi và tải tin nhắn, bạn có thể kiểm soát thời gian tối đa mà các thao tác này được phép chạy. Sau khi đặt thời gian chờ, bạn có thể tiếp tục các quá trình chuyển đổi và tải tin nhắn của mình.

Đặt Danh mục Màu cho Tệp Outlook MSG

Đôi khi bạn có thể cần phân biệt các email quan trọng và sắp xếp chúng một cách trực quan. Thư viện cung cấp cách thực hiện điều này bằng cách gán một màu cụ thể cho một mục tin nhắn. Khi bạn đặt danh mục màu cho một mục, nó cho phép bạn dễ dàng nhận diện và tìm kiếm các mục liên quan ngay lập tức. Sử dụng FollowUpManager lớp để đặt danh mục màu cho một tin nhắn như được minh họa trong ví dụ mã sau:

import aspose.email as ae

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

# Add Two categories
ae.mapi.FollowUpManager.add_category(msg, "Purple Category")
ae.mapi.FollowUpManager.add_category(msg, "Red Category")

# Retrieve the list of available categories
categories = ae.mapi.FollowUpManager.get_categories(msg)

# Remove the specified category and then Clear all categories
ae.mapi.FollowUpManager.remove_category(msg, "Red Category")
ae.mapi.FollowUpManager.clear_categories(msg)