package com.aspose.email.examples.outlook.pst; import java.io.UnsupportedEncodingException; import java.util.UUID; import com.aspose.email.FolderInfo; import com.aspose.email.MapiNamedProperty; import com.aspose.email.MapiProperty; import com.aspose.email.MapiPropertyCollection; import com.aspose.email.MapiPropertyTag; import com.aspose.email.MapiPropertyType; import com.aspose.email.MessageInfo; import com.aspose.email.MessageInfoCollection; import com.aspose.email.PersonalStorage; import com.aspose.email.PersonalStorageQueryBuilder; import com.aspose.email.examples.Utils; import com.aspose.email.system.collections.generic.List; public class UpdateMessagePropertiesInPSTFile { public static String dataDir = Utils.getSharedDataDir(UpdateMessagePropertiesInPSTFile.class) + "outlook/"; public static void main(String[] args) throws Exception { // Update Messages in Bulk in PST file updateMessagesInBulkInPSTFile(); // Updating Custom Properties for PST Items updateCustomPropertiesInPst(); } private static void updateMessagesInBulkInPSTFile() throws UnsupportedEncodingException { PersonalStorage pst = PersonalStorage.fromFile(dataDir + "test.pst"); try { FolderInfo inbox = pst.getRootFolder().getSubFolder("Inbox"); // Find messages having From = "someuser@domain.com" PersonalStorageQueryBuilder queryBuilder = new PersonalStorageQueryBuilder(); queryBuilder.getFrom().contains("someuser@domain.com"); MessageInfoCollection messages = inbox.getContents(queryBuilder.getQuery()); List<String> changeList = new List<String>(); for (MessageInfo messageInfo : messages) { changeList.add(messageInfo.getEntryIdString()); } // Compose the new properties MapiPropertyCollection updatedProperties = new MapiPropertyCollection(); updatedProperties.add(MapiPropertyTag.PR_SUBJECT_W, new MapiProperty(MapiPropertyTag.PR_SUBJECT_W, "New Subject".getBytes("UTF-8"))); updatedProperties.add(MapiPropertyTag.PR_IMPORTANCE, new MapiProperty(MapiPropertyTag.PR_IMPORTANCE, new byte[] { 2, 0, 0, 0, 0, 0, 0, 0 })); // Update messages having From = "someuser@domain.com" with new properties inbox.changeMessages(changeList, updatedProperties); } finally { pst.dispose(); } } public static void updateCustomPropertiesInPst() throws Exception { PersonalStorage pst = PersonalStorage.fromFile(dataDir + "test.pst"); try { FolderInfo testFolder = pst.getRootFolder().getSubFolder("Inbox"); // Create the collection of message properties for adding or updating MapiPropertyCollection newProperties = new MapiPropertyCollection(); // Normal property MapiProperty property = new MapiProperty(MapiPropertyTag.PR_ORG_EMAIL_ADDR_W, "test_address@org.com".getBytes("UTF-8")); // Custom named property MapiProperty namedProperty1 = new MapiNamedProperty(generateNamedPropertyTag((long) 0, MapiPropertyType.PT_LONG), "ITEM_ID", UUID.randomUUID(), new byte[] { 123, 0, 0, 0 }); // PidLidLogFlags named property MapiProperty namedProperty2 = new MapiNamedProperty(generateNamedPropertyTag((long) 1, MapiPropertyType.PT_LONG), (long) 0x0000870C, UUID.fromString("0006200A-0000-0000-C000-000000000046"), new byte[] { 0, 0, 0, 0 }); newProperties.add(namedProperty1.getTag(), namedProperty1); newProperties.add(namedProperty2.getTag(), namedProperty2); newProperties.add(property.getTag(), property); testFolder.changeMessages(testFolder.enumerateMessagesEntryId(), newProperties); } finally { pst.dispose(); } } private static long generateNamedPropertyTag(long index, /* MapiPropertyType */int dataType) { return (((0x8000 | index) << 16) | (long) dataType) & 0x00000000FFFFFFFFL; } }