کار با ویژگی‌های 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

این MapiProperty کلاس نمایانگر یک ویژگی MAPI است که شامل:

  • نام: یک رشته که نام ویژگی را نشان می‌دهد.
  • برچسب: یک عدد صحیح طولانی که برچسب ویژگی را نشان می‌دهد.
  • داده: یک آرایه بایت که داده‌های ویژگی را نشان می‌دهد.

دریافت ویژگی 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

API Aspose.Email امکان تبدیل فایل MSG به پیام MIME را با استفاده از to_mail_message متد.

تنظیم زمان‌انتظار برای تبدیل و بارگذاری پیام

برای محدود کردن زمان تبدیل پیام به میلی‌ثانیه (مقدار پیش‌فرض ۳ ثانیه)، ویژگی 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)

با تنظیم زمان‌انتظار (timeout) برای فرایندهای تبدیل پیام و بارگذاری، می‌توانید حداکثر زمان مجاز برای اجرای این عملیات‌ها را کنترل کنید. پس از تنظیم زمان‌انتظار، می‌توانید به فرایندهای تبدیل و بارگذاری پیام خود ادامه دهید.

تنظیم دسته‌بندی رنگ برای فایل‌های 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)