Робота з властивостями MAPI

Визначити тип елементу MAPI у папці PST

Файл PST зазвичай містить різні типи даних, такі як електронні листи, події календаря, контакти тощо. MapiItemType клас Aspose.Email дозволяє отримувати доступ та категоризувати різні типи елементів MAPI у файлі PST. Нижчий код демонструє, як визначити тип елемента MAPI у папці 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

Доступ та управління властивостями MAPI

The MapiProperty клас представляє властивість MAPI, яка містить:

  • Name: рядок, що представляє назву властивості.
  • Tag: довге ціле число, що представляє тег властивості.
  • Data: масив байтів, що представляє дані властивості.

Отримати властивість MAPI за допомогою тегу властивості

Нижчий приклад коду завантажує MAPI‑повідомлення, отримує ключові властивості, такі як тема та інтернет-сторінка коду, та безпечно обробляє потенційну відсутність цих властивостей. Щоб отримати властивості MAPI:

  1. Завантажте MAPI‑повідомлення з файлу, використовуючи завантажити метод.
  2. Використайте MapiPropertyTag клас для доступу до певних властивостей MAPI‑повідомлення, таких як тема та інтернет-сторінка коду.
  3. Обробка відсутніх властивостей.
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()))

Встановити властивості MAPI

Наступний фрагмент коду показує, як встановити властивості MAPI.

Читання названих MAPI властивостей

Aspose.Email надає набір API для роботи з MSG файлами, включаючи вилучення названих MAPI‑властивостей.

Читання названих MAPI властивостей з MSG файлів

Щоб читати названі MAPI‑властивості, ви можете використати named_properties властивість MapiMessage клас. Наведений нижче приклад коду показує, як завантажити повідомлення, отримати всі названі MAPI‑властивості, пройти по кожній властивості для перевірки її значення:

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

Читання названих MAPI властивостей з прикріплень

Aspose.Email робить можливим отримання всіх названих MAPI‑властивостей прикріплення. Наведений нижче приклад коду показує, як читати названі MAPI‑властивості з прикріплень:

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

Керування властивостями

Видалення властивостей з MSG файлів та прикріплень

Нижче наведений приклад коду демонструє створення Outlook MSG повідомлення з вмістом тіла та прикріпленим файлом повідомлення. Він також показує, як видалити властивість прикріплення зі створеного повідомлення.

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

Конвертування MSG у MIME повідомлення

Aspose.Email API забезпечує можливість конвертування файлу MSG у MIME повідомлення за допомогою to_mail_message метод.

Встановлення тайм-ауту для конвертації та завантаження повідомлень

Щоб обмежити час у мілісекундах конвертації повідомлення (значення за замовчуванням 3 сек), властивість timeout класу MailConversionOptions використовується клас.

Ось як можна встановити тайм-аут для процесів конвертації та завантаження повідомлень:

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)

Встановивши тайм-аут для процесів конвертації та завантаження повідомлень, ви можете контролювати максимальний час, протягом якого ці операції можуть виконуватися. Після встановлення тайм-ауту ви можете продовжити процеси конвертації та завантаження повідомлень.

Встановлення колірної категорії для Outlook MSG файлів

Іноді вам може знадобитися розрізняти електронні листи особливої важливості та візуально їх організовувати. Бібліотека забезпечує спосіб зробити це, призначаючи певний колір елементу повідомлення. Коли ви встановлюєте колірну категорію для елементу, це дозволяє легко ідентифікувати та знаходити пов’язані елементи з першого погляду. Використовуйте FollowUpManager клас для встановлення колірної категорії повідомлення, як показано у наступному прикладі коду:

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)