Práce s MAPI vlastnostmi

Určit typ MAPI položky ve složce PST

PST soubor typicky obsahuje různé typy dat, jako jsou e‑mailové zprávy, kalendářní události, kontakty a další. MapiItemType třída Aspose.Email vám umožňuje přístup a kategorizaci různých typů MAPI položek v PST souboru. Níže uvedený kód demonstruje, jak určit typ MAPI položky ve složce 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

Přístup a správa MAPI vlastností

The MapiProperty třída představuje MAPI vlastnost, která obsahuje:

  • Name: řetězec představující název vlastnosti.
  • Tag: dlouhé celé číslo představující tag vlastnosti.
  • Data: pole bajtů představující data vlastnosti.

Získat MAPI vlastnost pomocí Property Tag

Níže uvedený ukázkový kód načte MAPI zprávu, získá klíčové vlastnosti jako předmět a internetovou kódovou stránku a bezpečně zachází s možnou neexistencí těchto vlastností. Pro získání MAPI vlastností:

  1. Načtěte MAPI zprávu ze souboru pomocí načíst metoda.
  2. Použijte MapiPropertyTag třída pro přístup ke konkrétním vlastnostem z MAPI zprávy, jako je předmět a internetová kódová stránka.
  3. Zpracovat chybějící vlastnosti.
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()))

Nastavit MAPI vlastnosti

Následující úryvek kódu vám ukáže, jak nastavit MAPI vlastnosti.

Číst pojmenované MAPI vlastnosti

Aspose.Email poskytuje sadu API pro práci se soubory MSG, včetně získávání pojmenovaných MAPI vlastností.

Číst pojmenované MAPI vlastnosti ze souborů MSG

Pro čtení pojmenovaných MAPI vlastností můžete použít named_properties vlastnost třídy MapiMessage třída. Následující ukázkový kód ukazuje, jak načíst zprávu, získat všechny pojmenované MAPI vlastnosti, projít každou vlastnost a zkontrolovat její hodnotu:

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

Číst pojmenované MAPI vlastnosti z příloh

Aspose.Email umožňuje načíst všechny pojmenované MAPI vlastnosti přílohy. Následující ukázkový kód ukazuje, jak číst pojmenované MAPI vlastnosti z příloh:

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

Správa vlastností

Odstranit vlastnosti ze souborů MSG a příloh

Níže uvedený ukázkový kód demonstruje vytvoření Outlook MSG zprávy s obsahem těla a připojeným souborem zprávy. Také ukazuje, jak smazat vlastnost přílohy z vytvořené zprávy.

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

Převod MSG na MIME zprávu

Aspose.Email API poskytuje možnost převodu souboru MSG na MIME zprávu pomocí to_mail_message metoda.

Nastavení časového limitu pro konverzi a načítání zpráv

Pro omezení času v milisekundách konverze zprávy (výchozí hodnota 3 s) použijte vlastnost timeout objektu MailConversionOptions třída je použita.

Zde je návod, jak nastavit časový limit pro konverzi zpráv a načítání procesů:

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)

Nastavením časového limitu pro konverzi zpráv a načítání procesů můžete kontrolovat maximální dobu, po kterou jsou tyto operace povoleny běžet. Po nastavení časového limitu můžete pokračovat v konverzi a načítání zpráv.

Nastavit barevnou kategorii pro soubory Outlook MSG

Někdy můžete potřebovat odlišit e‑maily zvláštní důležitosti a vizuálně je uspořádat. Knihovna poskytuje způsob, jak to provést přiřazením konkrétní barvy položce zprávy. Když nastavíte barevnou kategorii pro položku, umožní vám snadno identifikovat a najít související položky na první pohled. Použijte FollowUpManager třída pro nastavení barevné kategorie zprávy, jak je ukázáno v následujícím příkladu kódu:

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)