Arbeta med MAPI-egenskaper
Bestäm MAPI‑objektets typ i en PST‑mapp
En PST‑fil innehåller vanligtvis olika typer av data, såsom e‑postmeddelanden, kalenderhändelser, kontakter och mer. MapiItemType klassen i Aspose.Email låter dig komma åt och kategorisera olika typer av MAPI‑objekt i en PST‑fil. Koden nedan demonstrerar hur man bestämmer typen av ett MAPI‑objekt i en PST‑mapp:
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
Åtkomst och hantering av MAPI‑egenskaper
Den MapiProperty klassen representerar en MAPI‑egenskap, som innehåller:
- Namn: en sträng som representerar egenskapens namn.
- Tagg: ett långt heltal som representerar egenskapens tagg.
- Data: en byte‑array som representerar egenskapens data.
Hämta MAPI‑egenskap med egenskapsetikett
Kodexemplet nedan laddar ett MAPI‑meddelande, hämtar nyckel‑egenskaper som ämnet och internetkodningssida, och hanterar säkert eventuell frånvaro av dessa egenskaper. För att få MAPI‑egenskaper:
- Läs in MAPI‑meddelandet från en fil med hjälp av ladda metod.
- Använd MapiPropertyTag klassen för att komma åt specifika egenskaper från ett MAPI‑meddelande, såsom ämnet och internetkodningssida.
- Hantera saknade egenskaper.
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()))
Ange MAPI‑egenskaper
Följande kodsnutt visar hur du sätter MAPI‑egenskaper.
Läs namngivna MAPI‑egenskaper
Aspose.Email tillhandahåller en uppsättning API:er för att arbeta med MSG‑filer, inklusive extraktion av namngivna MAPI‑egenskaper.
Läs namngivna MAPI‑egenskaper från MSG‑filer
För att läsa namngivna MAPI‑egenskaper kan du använda named_properties egenskap hos MapiMessage klass. Följande kodexempel visar hur man laddar ett meddelande, hämtar alla namngivna MAPI‑egenskaper, itererar över varje egenskap för att kontrollera dess värde:
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}")
Läs namngivna MAPI‑egenskaper från bilagor
Aspose.Email möjliggör att hämta alla namngivna MAPI‑egenskaper för en bilaga. Följande kodexempel visar hur man läser namngivna MAPI‑egenskaper från bilagor:
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()}")
Egenskapshantering
Ta bort egenskaper från MSG‑filer och bilagor
Kodexemplet nedan visar hur man skapar ett Outlook‑MSG‑meddelande med brödtextinnehåll och en bifogad meddelandefil. Det visar också hur man tar bort en bilagans egenskap från det skapade meddelandet.
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}")
Konvertera MSG till MIME‑meddelande
Aspose.Email API ger möjlighet att konvertera MSG‑fil till MIME‑meddelande med hjälp av to_mail_message metod.
Ställa in tidsgräns för meddelandekonvertering och inläsning
För att begränsa tiden i millisekunder för meddelandekonverteringen (standardvärde 3 sek), timeout‑egenskapen i MailConversionOptions klass används.
Så här kan du ställa in en tidsgräns för meddelandekonvertering och inläsningsprocesser:
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)
Genom att ställa in en tidsgräns för meddelandekonvertering och inläsningsprocesser kan du begränsa den maximala tid som dessa operationer får köras. Efter att tidsgränsen har ställts in kan du fortsätta med dina konverterings- och inläsningsprocesser.
Ange färgkategori för Outlook‑MSG‑filer
Ibland kan du behöva särskilja e‑postmeddelanden av särskild betydelse och organisera dem visuellt. Biblioteket erbjuder ett sätt att göra detta genom att tilldela ett specifikt färg till ett meddelandeobjekt. När du sätter en färgkategori för ett objekt kan du enkelt identifiera och lokalisera relaterade objekt på ett ögonkast. Använd FollowUpManager klass för att sätta färgkategori för ett meddelande som visas i följande kodexempel:
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)