Werken met MAPI‑eigenschappen

Het type MAPI‑item in een PST‑map bepalen

Een PST‑bestand bevat doorgaans verschillende soorten gegevens, zoals e‑mailberichten, agenda‑evenementen, contactpersonen en meer. De MapiItemType klasse van Aspose.Email maakt het mogelijk verschillende soorten MAPI‑items binnen een PST‑bestand te benaderen en te categoriseren. De code hieronder toont hoe u het type van een MAPI‑item in een PST‑map bepaalt:

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‑eigenschappen benaderen en beheren

De MapiProperty klasse vertegenwoordigt een MAPI‑eigenschap, die bevat:

  • Naam: een string die de naam van de eigenschap weergeeft.
  • Tag: een long‑integer die de tag van de eigenschap weergeeft.
  • Data: een byte‑array die de gegevens van de eigenschap weergeeft.

MAPI‑eigenschap ophalen met eigenschap‑tag

Het onderstaande codevoorbeeld laadt een MAPI‑bericht, haalt belangrijke eigenschappen op zoals het onderwerp en de internet‑codepagina, en behandelt veilig het mogelijke ontbreken van deze eigenschappen. Om MAPI‑eigenschappen te verkrijgen:

  1. Laad het MAPI‑bericht uit een bestand met behulp van de laden methode.
  2. Gebruik de MapiPropertyTag klasse om specifieke eigenschappen uit een MAPI‑bericht op te halen, zoals het onderwerp en de internet‑codepagina.
  3. Ontbrekende eigenschappen afhandelen.
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‑eigenschappen instellen

Het volgende codefragment laat zien hoe u MAPI‑eigenschappen instelt.

Benoemde MAPI‑eigenschappen lezen

Aspose.Email biedt een reeks API’s om met MSG‑bestanden te werken, inclusief het extraheren van benoemde MAPI‑eigenschappen.

Benoemde MAPI‑eigenschappen lezen uit MSG‑bestanden

Om benoemde MAPI‑eigenschappen te lezen, kun je de named_properties eigenschap van de MapiMessage klasse. Het volgende codevoorbeeld laat zien hoe een bericht wordt geladen, alle benoemde MAPI‑eigenschappen worden opgehaald en over elke eigenschap wordt geïtereerd om de waarde te controleren:

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

Benoemde MAPI‑eigenschappen lezen van bijlagen

Aspose.Email maakt het mogelijk om alle benoemde MAPI‑eigenschappen van een bijlage op te halen. Het volgende codevoorbeeld laat zien hoe benoemde MAPI‑eigenschappen van bijlagen gelezen kunnen worden:

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

Eigenschappenbeheer

Eigenschappen verwijderen uit MSG‑bestanden en bijlagen

De onderstaande codevoorbeeld toont het maken van een Outlook‑MSG‑bericht met een berichtinhoud en een bijgevoegd berichtbestand. Het laat ook zien hoe een bijlage‑eigenschap van het gemaakte bericht kan worden verwijderd.

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 naar MIME-bericht converteren

Aspose.Email API biedt de mogelijkheid om een MSG‑bestand te converteren naar een MIME‑bericht met behulp van de to_mail_message methode.

Time‑out instellen voor berichtconversie en laden

Om de tijd in milliseconden van de berichtconversie te beperken (standaardwaarde 3 sec), gebruik je de timeout‑eigenschap van de MailConversionOptions klasse wordt gebruikt.

Zo stel je een time‑out in voor berichtconversie‑ en laadprocessen:

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)

Door een time‑out in te stellen voor berichtconversie‑ en laadprocessen, kun je de maximale tijd die deze bewerkingen mogen duren regelen. Na het instellen van de time‑out kun je doorgaan met je berichtconversie‑ en laadprocessen.

Kleuren‑categorie instellen voor Outlook‑MSG‑bestanden

Soms moet je e‑mails van bijzondere belangrijkheid onderscheiden en visueel organiseren. De bibliotheek biedt een manier om dit te doen door een specifieke kleur toe te wijzen aan een berichtitem. Als je een kleuren‑categorie voor een item instelt, kun je gerelateerde items in één oogopslag makkelijk identificeren en vinden. Gebruik FollowUpManager klasse om de kleuren‑categorie voor een bericht in te stellen, zoals getoond in het volgende code‑voorbeeld:

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)