Travailler avec les propriétés MAPI
Déterminer le type d’élément MAPI dans un dossier PST
Un fichier PST contient généralement différents types de données, comme des messages électroniques, des événements de calendrier, des contacts, etc. Le MapiItemType classe d’Aspose.Email vous permet d’accéder et de catégoriser différents types d’éléments MAPI au sein d’un fichier PST. Le code ci‑dessous montre comment déterminer le type d’un élément MAPI dans un dossier 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
Accéder et gérer les propriétés MAPI
Le MapiProperty classe représente une propriété MAPI, qui contient :
- Name : une chaîne qui représente le nom de la propriété.
- Tag : un entier long qui représente le tag de la propriété.
- Data : un tableau d’octets qui représente les données de la propriété.
Obtenir une propriété MAPI à l’aide d’un tag de propriété
L’exemple de code ci‑dessous charge un message MAPI, récupère les propriétés clés comme l’objet et la page de code Internet, et gère en sécurité l’éventuelle absence de ces propriétés. Pour obtenir les propriétés MAPI :
- Chargez le message MAPI à partir d’un fichier en utilisant le charger méthode.
- Utilisez le MapiPropertyTag classe pour accéder à des propriétés spécifiques d’un message MAPI, telles que l’objet et la page de code Internet.
- Gérer les propriétés manquantes.
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()))
Définir les propriétés MAPI
L’extrait de code suivant vous montre comment définir des propriétés MAPI.
Lire les propriétés MAPI nommées
Aspose.Email fournit un ensemble d’API pour travailler avec les fichiers MSG, y compris l’extraction des propriétés MAPI nommées.
Lire les propriétés MAPI nommées des fichiers MSG
Pour lire les propriétés MAPI nommées, vous pouvez utiliser le named_properties propriété du MapiMessage classe. L’exemple de code suivant montre comment charger un message, récupérer toutes les propriétés MAPI nommées, itérer sur chaque propriété pour vérifier sa valeur :
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}")
Lire les propriétés MAPI nommées des pièces jointes
Aspose.Email permet de récupérer toutes les propriétés MAPI nommées d’une pièce jointe. L’exemple de code suivant montre comment lire les propriétés MAPI nommées à partir des pièces jointes :
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()}")
Gestion des propriétés
Supprimer les propriétés des fichiers MSG et des pièces jointes
L’exemple de code ci‑dessous montre la création d’un message Outlook MSG avec un contenu de corps et un fichier de message attaché. Il illustre également comment supprimer une propriété de pièce jointe du message créé.
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}")
Conversion de MSG en message MIME
L’API Aspose.Email offre la capacité de convertir un fichier MSG en message MIME en utilisant le to_mail_message méthode.
Définir le délai d’expiration pour la conversion et le chargement des messages
Pour limiter le temps en millisecondes de la conversion du message (valeur par défaut 3 s), la propriété timeout du MailConversionOptions classe est utilisée.
Voici comment vous pouvez définir un délai d’expiration pour les processus de conversion et de chargement des messages :
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)
En définissant un délai d’expiration pour les processus de conversion et de chargement des messages, vous pouvez contrôler le temps maximum autorisé pour ces opérations. Après avoir fixé le délai, vous pouvez poursuivre vos processus de conversion et de chargement des messages.
Définir la catégorie de couleur pour les fichiers Outlook MSG
Il arrive parfois que vous deviez différencier les courriels d’importance particulière et les organiser visuellement. La bibliothèque offre un moyen de le faire en attribuant une couleur spécifique à un élément de message. Lorsque vous définissez une catégorie de couleur pour un élément, cela vous permet d’identifier et de localiser facilement les éléments liés d’un seul coup d’œil. Utilisez FollowUpManager classe pour définir la catégorie de couleur d’un message comme indiqué dans l’exemple de code suivant :
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)