magbo system

Microsoft Exchange – EWS: Propriétés personnalisées – Récupération et suppression

Dans le cas où votre application dépend beaucoup des propriétés personnalisées apposées sur vos précieux emails, vous vous êtes peut être déjà posé la question : Comment suis-je sensé les récupérer… toutes ?

Pour récupérer la valeur d’un champ personnalisé d’un email il faut… savoir que ce champ existe ! Impossible donc de demander à l’API « renvoi moi toutes les propriétés perso de ce message et leur valeur »

Impossible ? Pas vraiment, en contournant l’API et en passant par le webservice, nous pouvons utiliser la méthode « ExportItem » qui permet de récupérer des propriétés inédites.

Pour cela, il suffit de récupérer l’uniqueId de l’email et de le passer dans une instance de ExportItemsType, puis d’appeler la méthode ExportItems via le web service (et pas l’API !)

(Rappel : configurer le web service)

string sItemID = item.Id.UniqueId;
 
ExportItemsType exExportItems = new ExportItemsType();
 
exExportItems.ItemIds = new ItemIdType[2];
 
exExportItems.ItemIds[0] = new ItemIdType();
 
exExportItems.ItemIds[0].Id = sItemID;
 
ExportItemsResponseType exResponse = m_exchangeServerBinding.ExportItems(exExportItems);
 
ExportItemsResponseMessageType rmResponse = (ExportItemsResponseMessageType)exResponse.ResponseMessages.Items[0];
 
Byte[] messageBytes = rmResponse.Data;
 
ProcessFile(messageBytes);
 
private void ProcessFile(String fnFileName)
 
{
 
Byte[] fsfileBytes = ReadByteArrayFromFile(fnFileName);
 
EWSFTParser ipItemParser = new EWSFTParser();
 
MapiItem mpMapiItem = ipItemParser.ParseItem(fsfileBytes);
 
ViewEmailProperties fEmailProperties = new ViewEmailProperties(mpMapiItem);
 
fEmailProperties.ShowDialog();
 
}

Le EWSFTParser ainsi qu’un projet Visual studio 2010 peuvent être récupérés ici (merci à Glen Scales, MVP microsoft)

J’ai fait fonctionner son parser/browser en moins de 5minutes donc vous devriez vous en sortir aussi.

Supprimer une propriété personnalisée

Pour supprimer la propriété personnalisée, utilisez la méthode RemoveExtendedProperty

ExtendedPropertyDefinition extendedPropertyDefinition =    new ExtendedPropertyDefinition(DefaultExtendedPropertySet.PublicStrings, sFieldToRemove, MapiPropertyType.String);
 
if (item.RemoveExtendedProperty(extendedPropertyDefinition))
 
{
 
item.Update(ConflictResolutionMode.AlwaysOverwrite);
 
AddText("Custom property removed!");
 
return;
 
}

Leave a Reply

Your email address will not be published. Required fields are marked *