Работа с 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 свойство, което съдържа:
- Name: низ, представляващ името на свойството.
- Tag: дълго цяло число, представляващо тага на свойството.
- Data: масив от байтове, представляващ данните на свойството.
Получаване на MAPI свойство чрез Property Tag
Следният пример с код зарежда MAPI съобщение, извлича ключови свойства като тема и интернет кодова страница и безопасно обработва възможното отсъствие на тези свойства. За получаване на MAPI свойства:
- Заредете MAPI съобщението от файл, като използвате зареждане метод.
- Използвайте MapiPropertyTag Класс за достъп до специфични свойства от MAPI съобщение, като тема и интернет кодова страница.
- Обработване на липсващи свойства.
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)