PST फ़ाइल में संदेशों के साथ काम करना

Contents
[ ]

PST फ़ाइलों में संदेश जोड़ना

नया PST फ़ाइल बनाएं और सबफ़ोल्डर जोड़ें दिखाया गया है कि PST फ़ाइल कैसे बनाएं और उसमें एक सबफ़ोल्डर जोड़ें। Aspose.Email के साथ आप बनाई या लोड की गई PST फ़ाइल के सबफ़ोल्डर्स में संदेश जोड़ सकते हैं। यह लेख डिस्क से दो संदेशों को PST के Inbox सबफ़ोल्डर में जोड़ता है। उपयोग करें PersonalStorage और FolderInfo PST फ़ाइलों में संदेश जोड़ने के लिए क्लासेज़। PST फ़ाइल के Inbox फ़ोल्डर में संदेश जोड़ने के लिए:

  1. FolderInfo क्लास की एक इंस्टेंस बनाएं और इसे Inbox फ़ोल्डर की सामग्री से लोड करें।
  2. डिस्क से Inbox फ़ोल्डर में संदेश जोड़ने के लिए इसे कॉल करके FolderInfo.addMessage() विधि। यह FolderInfo क्लास एक्सपोज़ करती है addMessages यह मेथड आपको फ़ोल्डर में बड़ी संख्या में संदेश जोड़ने में सक्षम बनाता है, जिससे डिस्क पर I/O ऑपरेशनों को कम किया जाता है और प्रदर्शन में सुधार होता है। एक पूरा उदाहरण नीचे दिया गया है, में बल्क संदेश जोड़ना.

नीचे दिया गया कोड स्निपेट दर्शाता है कि Inbox नामक PST सबफ़ोल्डर में संदेश कैसे जोड़ें।

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java

// Create new PST
PersonalStorage personalStorage = PersonalStorage.create(dataDir, FileFormatVersion.Unicode);

// Add new folder "Inbox"
personalStorage.getRootFolder().addSubFolder("Inbox");

// Select the "Inbox" folder
FolderInfo inboxFolder = personalStorage.getRootFolder().getSubFolder("Inbox");

// Add some messages to "Inbox" folder
inboxFolder.addMessage(MapiMessage.fromFile(dataDir + "MapiMsgWithPoll.msg"));

बल्क संदेश जोड़ना

PST में व्यक्तिगत संदेश जोड़ने से डिस्क पर अधिक I/O ऑपरेशन होते हैं और इसलिए प्रदर्शन धीमा हो सकता है। बेहतर प्रदर्शन के लिए, संदेशों को बल्क मोड में PST में जोड़ा जा सकता है ताकि I/O ऑपरेशनों को न्यूनतम किया जा सके। addMessages(Iterable messages) यह मेथड आपको प्रदर्शन सुधारने के लिए PST में जोड़ने के लिए संदेशों की एक रेंज निर्धारित करने की अनुमति देता है और इसे निम्न परिदृश्यों में उपयोग किया जा सकता है। अतिरिक्त रूप से, जब कोई संदेश फ़ोल्डर में जोड़ा जाता है तो MessageAdded इवेंट ट्रिगर होता है।

डिस्क से संदेश लोड करना

निम्नलिखित कोड स्निपेट आपको दिखाता है कि डिस्क से संदेशों को कैसे लोड करें।

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
private static void addMessagesInBulkMode(String fileName, String msgFolderName) {
    try (PersonalStorage personalStorage = PersonalStorage.fromFile(fileName)) {
        FolderInfo folder = personalStorage.getRootFolder().getSubFolder("myInbox");
        folder.MessageAdded.add(new MessageAddedEventHandler() {
            public void invoke(Object sender, MessageAddedEventArgs e) {
                onMessageAdded(sender, e);
            }
        });
        folder.addMessages(new MapiMessageCollection(msgFolderName));
    }
}

static void onMessageAdded(Object sender, MessageAddedEventArgs e) {
    System.out.println(e.getEntryId());
    System.out.println(e.getMessage().getSubject());
}

इटेरेबल इम्प्लीमेंटेशन

निम्नलिखित कोड स्निपेट आपको दिखाता है कि कैसे Iterable Implementation बनाएं।

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
public class MapiMessageCollection implements Iterable<MapiMessage> {

    private final File folder;

    public MapiMessageCollection(String folder) {
        this.folder = new File(folder);
    }

    public Iterator<MapiMessage> iterator() {
        return new MapiMessageIterator(folder.listFiles());
    }
}

public class MapiMessageIterator implements Iterator<MapiMessage> {

    private Queue<String> queue = new LinkedList<String>();

    public MapiMessageIterator(File[] listOfFiles) {
        for (File file : listOfFiles) {
            queue.offer(file.getAbsolutePath());
        }
    }

    public boolean hasNext() {
        return !queue.isEmpty();
    }

    public MapiMessage next() {
        return MapiMessage.fromFile(queue.poll());
    }
}

दूसरे PST से संदेश जोड़ना

अन्य PST से संदेश जोड़ने के लिये, उपयोग करें FolderInfo.enumerateMapiMessages() विधि जो Iterable लौटाती है। निम्नलिखित कोड स्निपेट दिखाता है कि अन्य PST से संदेश कैसे जोड़े जाएँ।

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
private static void bulkAddFromAnotherPst(String source) {
    // The path to the File directory.
    String dataDir = "data/";

    try (PersonalStorage pst = PersonalStorage.fromFile(source, false)) {
        try (PersonalStorage pstDest = PersonalStorage.fromFile(dataDir + "PersonalStorageFile1.pst")) {
            // Get the folder by name
            FolderInfo folderInfo = pst.getRootFolder().getSubFolder("Contacts");
            MessageInfoCollection ms = folderInfo.getContents();

            // Get the folder by name
            FolderInfo f = pstDest.getRootFolder().getSubFolder("myInbox");
            f.MessageAdded.add(new MessageAddedEventHandler() {
                public void invoke(Object sender, MessageAddedEventArgs e) {
                    onMessageAdded(sender, e);
                }
            });
            f.addMessages(folderInfo.enumerateMapiMessages());
            FolderInfo fi = pstDest.getRootFolder().getSubFolder("myInbox");
            MessageInfoCollection msgs = fi.getContents();
        }
    }
}

// Handles the MessageAdded event.
static void onMessageAdded(Object sender, MessageAddedEventArgs e) {
    System.out.println(e.getEntryId());
    System.out.println(e.getMessage().getSubject());
}

Outlook PST फ़ाइल से संदेश सूचना प्राप्त करें

में Outlook PST फ़ाइल पढ़ें और फ़ोल्डर्स तथा सबफ़ोल्डर्स की जानकारी प्राप्त करें, हमने Outlook PST फ़ाइल लोड करने और उसके फ़ोल्डर को ब्राउज़ करके फ़ोल्डर नाम और उनमें मौजूद संदेशों की संख्या प्राप्त करने पर चर्चा की। यह लेख बताता है कि PST फ़ाइल के सभी फ़ोल्डर और उपफ़ोल्डर कैसे पढ़ें और संदेशों की जानकारी, जैसे विषय, प्रेषक, और प्राप्तकर्ता, कैसे प्रदर्शित करें। यह FolderInfo.getContents() विधि प्रदर्शित करने के लिये उपयोग की जाती है संक्षिप्त संदेश जानकारी जैसे विषय, प्रेषक, प्राप्तकर्ता। प्रदर्शन के संदर्भ में, यह संदेशों की प्राथमिक जानकारी प्राप्त करने का सबसे उपयुक्त विकल्प है। निकालें पूरा संदेश डेटा, PersonalStorage.extractMessage() विधि प्रदान की गई है। Outlook PST फ़ाइल में नेस्टेड फ़ोल्डर हो सकते हैं। इनसे तथा शीर्ष-स्तर के फ़ोल्डरों से संदेश जानकारी प्राप्त करने के लिये, सभी फ़ोल्डरों को पढ़ने हेतु पुनरावृत्त विधि का उपयोग करें। निम्नलिखित कोड स्निपेट दिखाता है कि कैसे Outlook PST फ़ाइल पढ़ें और फ़ोल्डर व संदेश सामग्री को पुनरावृत्त रूप से प्रदर्शित करें।

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
public static void run() {
    // The path to the File directory.
    String dataDir = "data/";

    // Load the Outlook file
    String path = dataDir + "PersonalStorage.pst";

    try {

        // Load the Outlook PST file
        PersonalStorage personalStorage = PersonalStorage.fromFile(path);

        // Get the Display Format of the PST file
        System.out.println("Display Format: " + personalStorage.getFormat());

        // Get the folders and messages information
        FolderInfo folderInfo = personalStorage.getRootFolder();

        // Call the recursive method to display the folder contents
        displayFolderContents(folderInfo, personalStorage);
    } catch (Exception ex) {
        System.out.println(ex.getMessage());
    }
}

// This is a recursive method to display contents of a folder
private static void displayFolderContents(FolderInfo folderInfo, PersonalStorage pst) {
    // Display the folder name
    System.out.println("Folder: " + folderInfo.getDisplayName());
    System.out.println("==================================");
    // Display information about messages inside this folder
    MessageInfoCollection messageInfoCollection = folderInfo.getContents();
    for (MessageInfo messageInfo : messageInfoCollection) {
        System.out.println("Subject: " + messageInfo.getSubject());
        System.out.println("Sender: " + messageInfo.getSenderRepresentativeName());
        System.out.println("Recipients: " + messageInfo.getDisplayTo());
        System.out.println("------------------------------");
    }

    // Call this method recursively for each subfolder
    if (folderInfo.hasSubFolders() == true) {
        for (FolderInfo subfolderInfo : folderInfo.getSubFolders()) {
            displayFolderContents(subfolderInfo, pst);
        }
    }
}

PST फ़ाइलों से संदेश निकालना

यह लेख दिखाता है कि Microsoft Outlook PST फ़ाइलें कैसे पढ़ें और संदेश निकालें. संदेश फिर MSG फ़ॉर्मेट में डिस्क पर सहेजे जाते हैं। लेख यह भी दिखाता है कैसे विशिष्ट संख्या में संदेश निकालें PST फ़ाइल से। सभी फ़ोल्डरों (सहित नेस्टेड फ़ोल्डर) को ब्राउज़ करने के लिये पुनरावृत्त विधि का उपयोग करें और कॉल करें PersonalStorage.extractMessage() विधि जिससे Outlook संदेश को एक इंस्टेंस में प्राप्त किया जा सके MapiMessage क्लास। उसके बाद, कॉल करें MapiMessage.save() विधि जिससे संदेश को डिस्क या स्ट्रीम में MSG फॉर्मेट में सहेजा जा सके। निम्नलिखित कोड स्निपेट दिखाता है कि PST फ़ाइल से संदेश कैसे निकाले जाएँ।

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
public static void run() {
    // The path to the File directory.
    String dataDir = "data/";

    // Load the Outlook file
    String path = dataDir + "PersonalStorage.pst";

    try {
        // load the Outlook PST file
        PersonalStorage pst = PersonalStorage.fromFile(path);

        // get the Display Format of the PST file
        System.out.println("Display Format: " + pst.getFormat());

        // get the folders and messages information
        FolderInfo folderInfo = pst.getRootFolder();

        // Call the recursive method to extract msg files from each folder
        extractMsgFiles(folderInfo, pst);
    } catch (Exception ex) {
        System.out.println(ex.getMessage());
    }
}

// This is a recursive method to display contents of a folder
private static void extractMsgFiles(FolderInfo folderInfo, PersonalStorage pst) {
    // display the folder name
    System.out.println("Folder: " + folderInfo.getDisplayName());
    System.out.println("==================================");
    // loop through all the messages in this folder
    MessageInfoCollection messageInfoCollection = folderInfo.getContents();
    for (MessageInfo messageInfo : messageInfoCollection) {
        System.out.println("Saving message {0} ...." + messageInfo.getSubject());
        // get the message in MapiMessage instance
        MapiMessage message = pst.extractMessage(messageInfo);
        // save this message to disk in msg format
        message.save(message.getSubject().replace(":", " ") + ".msg");
        // save this message to stream in msg format
        ByteArrayOutputStream messageStream = new ByteArrayOutputStream();
        message.save(messageStream);
    }

    // Call this method recursively for each subfolder
    if (folderInfo.hasSubFolders() == true) {
        for (FolderInfo subfolderInfo : folderInfo.getSubFolders()) {
            extractMsgFiles(subfolderInfo, pst);
        }
    }
}

PST से सीधे स्ट्रीम में संदेश सहेजना

PST फ़ाइल से संदेशों को सीधे स्ट्रीम में सहेजने के लिये, संदेशों के लिये MsgInfo निकाले बिना, उपयोग करें saveMessageToStream() विधि। निम्नलिखित कोड स्निपेट दिखाता है कि PST से संदेश सीधे स्ट्रीम में कैसे सहेजें।

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// The path to the File directory.
String dataDir = "data/";

// Load the Outlook file
String path = dataDir + "PersonalStorage.pst";

// Save message to MemoryStream
try (PersonalStorage personalStorage = PersonalStorage.fromFile(path)) {
    FolderInfo inbox = personalStorage.getRootFolder().getSubFolder("Inbox");
    for (MessageInfo messageInfo : inbox.enumerateMessages()) {
        try (ByteArrayOutputStream memeorystream = new ByteArrayOutputStream()) {
            personalStorage.saveMessageToStream(messageInfo.getEntryIdString(), memeorystream);
        }
    }
}

// Save message to file
try (PersonalStorage pst = PersonalStorage.fromFile(path)) {
    FolderInfo inbox = pst.getRootFolder().getSubFolder("Inbox");
    for (MessageInfo messageInfo : inbox.enumerateMessages()) {
        try (FileOutputStream fs = new FileOutputStream(new File(dataDir + messageInfo.getSubject() + ".msg"))) {
            pst.saveMessageToStream(messageInfo.getEntryIdString(), fs);
        }
    }
}

try (PersonalStorage pst = PersonalStorage.fromFile(path)) {
    FolderInfo inbox = pst.getRootFolder().getSubFolder("Inbox");

    // To enumerate entryId of messages you may use FolderInfo.EnumerateMessagesEntryId() method:
    for (String entryId : inbox.enumerateMessagesEntryId()) {
        try (ByteArrayOutputStream ms = new ByteArrayOutputStream()) {
            pst.saveMessageToStream(entryId, ms);
        }
    }
}

PST फ़ाइल से n संख्या के संदेश निकालना

निम्नलिखित कोड स्निपेट दिखाता है कि PST से निर्दिष्ट संख्या में संदेश कैसे निकाले जाएँ। केवल पहले संदेश का इंडेक्स और निकाले जाने वाले संदेशों की कुल संख्या प्रदान करें।

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
FolderInfo inbox = personalStorage.getRootFolder().getSubFolder("Inbox");

// Extracts messages starting from 10th index top and extract total 100 messages
MessageInfoCollection messages = inbox.getContents(10, 100);

PST फ़ाइल से वस्तुओं की कुल संख्या प्राप्त करें

Aspose.Email प्रदान करता है GetTotalItemsCount() विधि PersonalStorage.Store प्रॉपर्टी। यह PST में मौजूद संदेश वस्तुओं की कुल संख्या लौटाता है।

निम्नलिखित कोड नमूना दिखाता है कि PST फ़ाइल में संग्रहीत वस्तुओं (संदेश, अपॉइंटमेंट, संपर्क आदि) की कुल गिनती कैसे प्राप्त करें:

try (PersonalStorage pst = PersonalStorage.fromFile("my.pst", false)) {
    int count = pst.getStore().getTotalItemsCount();
}

PST फ़ाइलों से वस्तुएँ हटाएँ

Add Messages to PST Files दिखाया गया था कि PST फ़ाइलों में संदेश कैसे जोड़ें। बेशक, PST फ़ाइल से वस्तुओं (सामग्री) को हटाना भी संभव है और संदेशों को बल्क में हटाना भी वांछनीय हो सकता है। PST फ़ाइल से वस्तुओं को इस उपयोग करके हटाया जा सकता है FolderInfo.deleteChildItem() विधि। API अतिरिक्त रूप से प्रदान करता है FolderInfo.deleteChildItems() विधि जिससे PST फ़ाइल से वस्तुओं को बल्क में हटाया जा सके।

PST फ़ाइलों से संदेश हटाना

यह लेख दिखाता है कि कैसे उपयोग करें FolderInfo क्लास जो PST फ़ाइल में विशिष्ट फ़ोल्डरों तक पहुंच प्रदान करता है। पहले लोड या बनाए गए PST फ़ाइल के Sent उपफ़ोल्डर से संदेश हटाने के लिये:

  1. का एक इंस्टेंस बनाएं FolderInfo क्लास और इसे Sent उपफ़ोल्डर की सामग्री से लोड करें।
  2. Sent फ़ोल्डर से संदेश हटाने के लिये कॉल करें FolderInfo.deleteChildItem() विधि और पास कर रहे हैं MessageInfo.EntryId पैरामीटर के रूप में। निम्नलिखित कोड स्निपेट दिखाता है कि PST फ़ाइल के Sent उपफ़ोल्डर से संदेश कैसे हटाए जाएँ।
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// The path to the File directory.
String dataDir = "data/" + "Sub.pst";

// Load the Outlook PST file
PersonalStorage personalStorage = PersonalStorage.fromFile(dataDir);

// Get the Sent items folder
FolderInfo folderInfo = personalStorage.getPredefinedFolder(StandardIpmFolder.SentItems);

MessageInfoCollection msgInfoColl = folderInfo.getContents();
for (MessageInfo msgInfo : msgInfoColl) {
    System.out.println(msgInfo.getSubject() + ": " + msgInfo.getEntryIdString());
    if (msgInfo.getSubject().equals("some delete condition")) {
        // Delete this item
        folderInfo.deleteChildItem(msgInfo.getEntryId());
        System.out.println("Deleted this message");
    }
}

PST फ़ाइलों से फ़ोल्डर हटाना

आप PST फ़ोल्डर को डिलीटेड आइटम्स फ़ोल्डर में ले जाकर हटा सकते हैं।

try (PersonalStorage pst = PersonalStorage.fromFile("test.pst")) {
    FolderInfo deletedItemsFolder = pst.getPredefinedFolder(StandardIpmFolder.DeletedItems);
    FolderInfo emptyFolder = pst.getRootFolder().getSubFolder("Empty folder");
    FolderInfo someFolder = pst.getRootFolder().getSubFolder("Some folder");
    pst.moveItem(emptyFolder, deletedItemsFolder);
    pst.moveItem(someFolder, deletedItemsFolder);
}

इस विधि का लाभ यह है कि हटाए गए फ़ोल्डर को आसानी से पुनः प्राप्त किया जा सकता है।

FolderInfo someFolder = deletedItemsFolder.getSubFolder("Some folder");
pst.moveItem(someFolder, pst.getRootFolder());

यदि आवश्यक हो तो आप डिलीटेड आइटम्स फ़ोल्डर से फ़ोल्डर को स्थायी रूप से भी हटा सकते हैं।

deletedItemsFolder.deleteChildItem(emptyFolder.getEntryId());

यह deleteChildItem() विधि का उपयोग किसी भी फ़ोल्डर के लिये किया जा सकता है यदि आप उपफ़ोल्डर को तुरंत और स्थायी रूप से हटाना चाहते हैं, डिलीटेड आइटम्स फ़ोल्डर को बायपास करते हुए।

FolderInfo someFolder = pst.getRootFolder().getSubFolder("Some folder");
pst.getRootFolder().deleteChildItem(someFolder.getEntryId());

PST फ़ाइल से वस्तुओं को बल्क में हटाएँ

Aspose.Email API का उपयोग करके PST फ़ाइल से वस्तुओं को बल्क में हटाया जा सकता है। यह उपयोग करके प्राप्त किया जाता है deleteChildItems() विधि जो डिलीट करने योग्य आइटमों के एंट्री ID की सूची लेती है। निम्नलिखित कोड स्निपेट दिखाता है कि PST फ़ाइल से वस्तुओं को बल्क में कैसे हटाया जाए।

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// The path to the File directory.
String dataDir = "data/" + "Sub.pst";

try (PersonalStorage personalStorage = PersonalStorage.fromFile(dataDir)) {
    // Get Inbox SubFolder from Outlook file
    FolderInfo inbox = personalStorage.getRootFolder().getSubFolder("Inbox");

    // Create instance of PersonalStorageQueryBuilder
    PersonalStorageQueryBuilder queryBuilder = new PersonalStorageQueryBuilder();

    queryBuilder.getFrom().contains("someuser@domain.com");
    MessageInfoCollection messages = inbox.getContents(queryBuilder.getQuery());
    List<String> deleteList = new ArrayList<String>();
    for (MessageInfo messageInfo : messages) {
        deleteList.add(messageInfo.getEntryIdString());
    }

    // delete messages having From = "someuser@domain.com"
    inbox.deleteChildItems(deleteList);
}

PST से सॉफ्ट-डिलीटेड संदेशों को सूचीबद्ध और पुनः प्राप्त करें

Aspose.Email for Java के साथ स्थायी रूप से हटाए गए संदेशों को पुनः प्राप्त करना संभव है। इसका API आपको PST फ़ाइलों में सॉफ्ट-डिलीटेड संदेशों को सूचीबद्ध करने की अनुमति देता है। सॉफ्ट-डिलीटेड आइटम वे संदेश हैं जिन्हें दो बार हटाया गया है - पहले डिलीटेड आइटम्स फ़ोल्डर में ले जाया गया और फिर वहाँ से हटाया गया। ये संदेश अभी भी रिकवरी योग्य हैं, और Aspose.Email उन्हें एक्सेस करने का एक सुविधाजनक तरीका प्रदान करता है। यह PersonalStorage.findAndEnumerateSoftDeletedItems() विधि एक संग्रह लौटाती है RestoredItemEntry ऑब्जेक्ट्स। प्रत्येक प्रविष्टि में शामिल है:

  • MapiMessage item — पुनःप्राप्त संदेश।
  • String FolderId - वह पहचानकर्ता जो उस फ़ोल्डर का है जहाँ संदेश मूल रूप से स्थित था।

निम्नलिखित कोड नमूना दिखाता है कि PST फ़ाइलों में सॉफ्ट-डिलीटेड (रिकवरी योग्य) ईमेल आइटम कैसे सूचीबद्ध किए जाएँ:

// Load the PST file
try (PersonalStorage pst = PersonalStorage.fromFile(fileName)) {
    // Enumerate soft-deleted items
    for (RestoredItemEntry entry : pst.findAndEnumerateSoftDeletedItems()) {
        MapiMessage message = entry.getItem();
        String folderId = entry.getFolderId();
        
        System.out.println("Subject: " + message.getSubject());
        System.out.println("Deleted from Folder ID: " + folderId);
        System.out.println("-----------------------------------");
    }
}

मानदंड द्वारा PST में संदेश और फ़ोल्डर खोजें

पर्सनल स्टोरेज (PST) फ़ाइलें बहुत अधिक डेटा रख सकती हैं और ऐसे बड़े फ़ाइलों में विशिष्ट मानदंडों को पूरा करने वाले डेटा की खोज करने के लिये कोड में कई जांच बिंदुओं को शामिल करना पड़ता है। इसके साथ PersonalStorageQueryBuilder क्लास, Aspose.Email यह संभव बनाता है कि निर्दिष्ट खोज मानदंडों के आधार पर PST में विशिष्ट रिकॉर्ड खोजे जाएँ। PST को संदेशों के लिये इस प्रकार के खोज पैरामीटरों जैसे प्रेषक, प्राप्तकर्ता, विषय, संदेश महत्त्व, अटैचमेंट की उपस्थिति, संदेश आकार, और यहां तक कि संदेश ID के आधार पर भी खोजा जा सकता है। यह PersonalStorageQueryBuilder उपफ़ोल्डरों की खोज के लिये भी इसका उपयोग किया जा सकता है।

PST में संदेशों और फ़ोल्डरों की खोज

निम्न कोड स्निपेट दिखाता है कि आप कैसे उपयोग करें PersonalStorageQueryBuilder विभिन्न खोज मानदंडों के आधार पर PST में सामग्री खोजने के लिये वर्ग। उदाहरण के लिए, यह दिखाता है कि कैसे PST को खोजा जाए:

  • संदेश महत्त्व।
  • संदेश वर्ग।
  • अटैचमेंट की उपस्थिति।
  • संदेश आकार।
  • संदेश तिथि।
  • न पढ़े गए संदेश।
  • अटैचमेंट वाले न पढ़े गए संदेश, और
  • विशिष्ट उपफ़ोल्डर नाम वाले फ़ोल्डर।
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// The path to the File directory.
String dataDir = "data/";

try (PersonalStorage personalStorage = PersonalStorage.fromFile(dataDir + "Outlook.pst")) {
    FolderInfo folder = personalStorage.getRootFolder().getSubFolder("Inbox");
    PersonalStorageQueryBuilder builder = new PersonalStorageQueryBuilder();

    // High importance messages
    builder.getImportance().equals((int) MapiImportance.High);
    MessageInfoCollection messages = folder.getContents(builder.getQuery());
    System.out.println("Messages with High Imp:" + messages.size());

    builder = new PersonalStorageQueryBuilder();
    builder.getMessageClass().equals("IPM.Note");
    messages = folder.getContents(builder.getQuery());
    System.out.println("Messages with IPM.Note:" + messages.size());

    builder = new PersonalStorageQueryBuilder();
    // Messages with attachments AND high importance
    builder.getImportance().equals((int) MapiImportance.High);
    builder.hasFlags(MapiMessageFlags.MSGFLAG_HASATTACH);
    messages = folder.getContents(builder.getQuery());
    System.out.println("Messages with atts: " + messages.size());

    builder = new PersonalStorageQueryBuilder();
    // Messages with size > 15 KB
    builder.getMessageSize().greater(15000);
    messages = folder.getContents(builder.getQuery());
    System.out.println("messags size > 15Kb:" + messages.size());

    java.util.Calendar c = java.util.Calendar.getInstance();

    builder = new PersonalStorageQueryBuilder();
    // Messages by Current Date
    // (Note that queries by date are not supported for Calendar Items in the Appointments folder)
    builder.getSentDate().on(c.getTime(), DateComparisonType.ByDate);
    messages = folder.getContents(builder.getQuery());
    System.out.println("Messages by Current Date: " + messages.size());

    builder = new PersonalStorageQueryBuilder();
    // Messages between Dates
    // (Note that queries by date are not supported for Calendar Items in the Appointments folder)
    c.set(2020,  0, 1, 0, 0, 0);
    builder.getSentDate().since(c.getTime());
    c.set(2021,  0, 1, 0, 0, 0);
    builder.getSentDate().before(c.getTime());
    messages = folder.getContents(builder.getQuery());
    System.out.println("Messages between Dates: " + messages.size());

    builder = new PersonalStorageQueryBuilder();
    // Unread messages
    builder.hasNoFlags(MapiMessageFlags.MSGFLAG_READ);
    messages = folder.getContents(builder.getQuery());
    System.out.println("Unread:" + messages.size());

    builder = new PersonalStorageQueryBuilder();
    // Unread messages with attachments
    builder.hasNoFlags(MapiMessageFlags.MSGFLAG_READ);
    builder.hasFlags(MapiMessageFlags.MSGFLAG_HASATTACH);
    messages = folder.getContents(builder.getQuery());
    System.out.println("Unread msgs with atts: " + messages.size());

    // Folder with name of 'SubInbox'
    builder = new PersonalStorageQueryBuilder();
    builder.getFolderName().equals("SubInbox");
    FolderInfoCollection folders = folder.getSubFolders(builder.getQuery());
    System.out.println("Folder having subfolder: " + folders.size());

    builder = new PersonalStorageQueryBuilder();
    // Folders with subfolders
    builder.hasSubfolders();
    folders = folder.getSubFolders(builder.getQuery());
    System.out.println(folders.size());
}

PST में केस अनदेखा पैरामीटर के साथ स्ट्रिंग खोज

निम्नलिखित कोड स्निपेट दिखाता है कि कैसे केस-अनदेखा पैरामीटर के साथ PST में एक स्ट्रिंग खोजी जाए।

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// The path to the File directory.
String dataDir = "data/";

try (PersonalStorage personalStorage = PersonalStorage.create(dataDir + "CaseSensitivity.pst", FileFormatVersion.Unicode)) {
    FolderInfo folderinfo = personalStorage.createPredefinedFolder("Inbox", StandardIpmFolder.Inbox);
    folderinfo.addMessage(MapiMessage.fromMailMessage(MailMessage.load("Sample.eml")));
    PersonalStorageQueryBuilder builder = new PersonalStorageQueryBuilder();
    // IgnoreCase is True
    builder.getFrom().contains("automated", true);
    MailQuery query = builder.getQuery();
    MessageInfoCollection coll = folderinfo.getContents(query);
    System.out.println(coll.size());
}

PST फ़ाइल में कई कुंजीशब्दों द्वारा संदेश विषयों की खोज

आप उपयोग कर सकते हैं MailQueryBuilder.or निम्नलिखित के रूप में कम से कम एक निर्दिष्ट शब्द वाले विषय वाले संदेशों को खोजने की विधि:

PersonalStorageQueryBuilder builder1 = new PersonalStorageQueryBuilder();
builder1.getSubject().contains("Review"); // 'Review' is key word for the search

PersonalStorageQueryBuilder builder2 = new PersonalStorageQueryBuilder();
builder2.getSubject().contains("Error"); // 'Error' is also key word for the search

PersonalStorageQueryBuilder queryBuilder = new PersonalStorageQueryBuilder();
queryBuilder.or(builder1.getQuery(), builder2.getQuery()); // message subjects must contain 'Review' or 'Error' words

try (PersonalStorage storage = PersonalStorage.fromFile("example.pst"))
{
    FolderInfo folderInfo = storage.getRootFolder().getSubFolder("Inbox");
    MessageInfoCollection messageInfos = folderInfo.getContents(queryBuilder.getQuery());

    for (MessageInfo messageInfo : messageInfos)
    {
        System.out.println(messageInfo.getSubject());
    }
}

PST फ़ोल्डर सामग्री की पृष्ठांकित पुनर्प्राप्ति

जब बड़े फ़ोल्डरों में नेविगेट करते हैं तो अपने एप्लिकेशन के प्रदर्शन और नियंत्रण को सुधारें। Aspose.Email के ओवरलोड का उपयोग करके फ़ोल्डर सामग्री को पृष्ठांकित तरीके से पुनः प्राप्त करें getContents विधि। इस विधि - FolderInfo.getContents(MailQuery query, int startIndex, int count) - निर्दिष्ट क्वेरी से मेल खाने वाले संदेशों का एक उपसमुच्चय प्राप्त करता है, दिए गए इंडेक्स से शुरू होकर और गिनती द्वारा सीमित। निम्नलिखित कोड नमूना PST फ़ोल्डर से फ़िल्टर किए गए संदेशों की पृष्ठांकित पुनर्प्राप्ति और प्रक्रिया को दर्शाता है:

// Load the PST file
try (PersonalStorage pst = PersonalStorage.fromFile(fileName)) {
    // Access a specific subfolder
    FolderInfo folder = pst.getRootFolder().getSubFolder("Inbox");

    // Build a query to filter messages by sender address
    PersonalStorageQueryBuilder queryBuilder = new PersonalStorageQueryBuilder();
    queryBuilder.getFrom().contains("report-service", true);

    // Define the page size
    int pageSize = 5;

    // Retrieve and process messages in pages
    for (int pageIndex = 0; pageIndex < 6; pageIndex++) {
        int startIndex = pageIndex * pageSize;

        // Get a page of messages
        MessageInfoCollection messages = folder.getContents(queryBuilder.getQuery(), startIndex, pageSize);

        for (MessageInfo messageInfo : messages) {
            // Output basic info about each message
            System.out.println("Subject: " + messageInfo.getSubject() + ", Sender: " + messageInfo.getSenderRepresentativeName());
        }
    }
}

PST फ़ाइल के अन्य फ़ोल्डरों में वस्तुएँ ले जाएँ

Aspose.Email यह संभव बनाता है कि स्रोत फ़ोल्डर से वस्तुओं को उसी पर्सनल स्टोरेज (PST) फ़ाइल में दूसरी फ़ोल्डर में ले जाया जाए। इसमें शामिल हैं:

  • निर्दिष्ट फ़ोल्डर को नए पैरेंट फ़ोल्डर में ले जाना।
  • निर्दिष्ट संदेश को नई फ़ोल्डर में ले जाना।
  • सामग्री को नई फ़ोल्डर में ले जाना।
  • उप-फ़ोल्डरों को नए पैरेंट फ़ोल्डर में ले जाना।

निम्नलिखित कोड स्निपेट दिखाता है कि कैसे स्रोत फ़ोल्डर से संदेश और फ़ोल्डर जैसी वस्तुओं को उसी PST फ़ाइल में दूसरी फ़ोल्डर में ले जाया जाए।

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
try (PersonalStorage personalStorage = PersonalStorage.fromFile("test.pst")) {
    FolderInfo inbox = personalStorage.getPredefinedFolder(StandardIpmFolder.Inbox);
    FolderInfo deleted = personalStorage.getPredefinedFolder(StandardIpmFolder.DeletedItems);
    FolderInfo subfolder = inbox.getSubFolder("Subfolder");

    // Move folder and message to the Deleted Items
    personalStorage.moveItem(subfolder, deleted);
    MessageInfoCollection contents = subfolder.getContents();
    personalStorage.moveItem(contents.get(0), deleted);

    // Move all inbox subfolders and subfolder contents to the Deleted Items
    inbox.moveSubfolders(deleted);
    subfolder.moveContents(deleted);
}

PST फ़ाइल में संदेश गुणों को अद्यतन करना

कभी-कभी संदेशों की कुछ प्रॉपर्टीज़ जैसे विषय बदलना, संदेश की महत्त्वता को मार्क करना आदि को अपडेट करना आवश्यक होता है। ऐसे परिवर्तन के साथ PST फ़ाइल में संदेश को अपडेट करना इस का उपयोग करके किया जा सकता है। FolderInfo.changeMessages मेथड। यह लेख दिखाता है कि कैसे PST फ़ाइल में प्रॉपर्टी परिवर्तन के लिए संदेशों को बल्क में अपडेट किया जाए। नीचे दिया गया कोड स्निपेट दर्शाता है कि PST फ़ाइल में कई संदेशों के लिए प्रॉपर्टीज़ को बल्क मोड में कैसे अपडेट करें।

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// The path to the File directory.
String dataDir = "data/" + "Sub.pst";

// Load the Outlook PST file
PersonalStorage personalStorage = PersonalStorage.fromFile(dataDir);

// Get Requierd Subfolder
FolderInfo inbox = personalStorage.getRootFolder().getSubFolder("Inbox");

// find messages having From = "someuser@domain.com"
PersonalStorageQueryBuilder queryBuilder = new PersonalStorageQueryBuilder();
queryBuilder.getFrom().contains("someuser@domain.com");

// Get Contents from Query
MessageInfoCollection messages = inbox.getContents(queryBuilder.getQuery());

// Save (MessageInfo,EntryIdString) in List
List<String> changeList = new ArrayList<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(Charset.forName("utf-16le"))));
updatedProperties.add(MapiPropertyTag.PR_IMPORTANCE, new MapiProperty(MapiPropertyTag.PR_IMPORTANCE, BitConverter.getBytesInt64(2)));

// update messages having From = "someuser@domain.com" with new properties
inbox.changeMessages(changeList, updatedProperties);

PST फ़ाइल में कस्टम प्रॉपर्टीज़ को अपडेट करना

कभी-कभी PST फ़ाइल के भीतर प्रोसेस किए गए आइटम्स को मार्क करना आवश्यक होता है। Aspose.Email API MapiProperty और MapiNamedProperty का उपयोग करके यह करने की सुविधा देता है। निम्नलिखित मेथड्स इसमें सहायक हैं।

  • constructor MapiNamedProperty(long propertyTag, String nameIdentifier, UUID propertyGuid, byte[] propertyValue)
  • constructor MapiNamedProperty(long propertyTag, long nameIdentifier, UUID propertyGuid, byte[] propertyValue)
  • FolderInfo.changeMessages(MapiPropertyCollection updatedProperties) - फ़ोल्डर में सभी संदेशों को बदलता है
  • PersonalStorage.changeMessage(String entryId, MapiPropertyCollection updatedProperties) - संदेश प्रॉपर्टीज़ बदलें
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
public static void run() {
    // The path to the File directory.
    String dataDir = "data/" + "Sub.pst";

    try (PersonalStorage personalStorage = PersonalStorage.fromFile(dataDir)) {
        FolderInfo testFolder = personalStorage.getRootFolder().getSubFolder("Inbox");

        // Create the collection of message properties for adding or updating
        MapiPropertyCollection newProperties = new MapiPropertyCollection();

        // Normal, Custom and PidLidLogFlags named property
        MapiProperty property = new MapiProperty(MapiPropertyTag.PR_ORG_EMAIL_ADDR_W, "test_address@org.com".getBytes(Charset.forName("utf-16le")));
        MapiProperty namedProperty1 = new MapiNamedProperty(generateNamedPropertyTag(0L, MapiPropertyType.PT_LONG), "ITEM_ID", UUID.randomUUID(),
                BitConverter.getBytesInt64(123));
        MapiProperty namedProperty2 = new MapiNamedProperty(generateNamedPropertyTag(1L, MapiPropertyType.PT_LONG), 0x0000870C,
                UUID.fromString("0006200A-0000-0000-C000-000000000046"), BitConverter.getBytesInt64(0));
        newProperties.add(namedProperty1.getTag(), namedProperty1);
        newProperties.add(namedProperty2.getTag(), namedProperty2);
        newProperties.add(property.getTag(), property);
        testFolder.changeMessages(testFolder.enumerateMessagesEntryId(), newProperties);
    }
}

private static long generateNamedPropertyTag(long index, int dataType) {
    return (((0x8000 | index) << 16) | (long) dataType) & 0x00000000FFFFFFFFL;
}

संपूर्ण संदेश को निकाले बिना अटैचमेंट्स निकालें

Aspose.Email API का उपयोग PST संदेशों से अटैचमेंट्स को बिना संपूर्ण संदेश को पहले निकाले निकालने के लिए किया जा सकता है। ExtractAttachments की विधि PersonalStorage इसे करने के लिए उपयोग किया जा सकता है। नीचे दिया गया कोड स्निपेट दिखाता है कि संपूर्ण संदेश को निकाले बिना अटैचमेंट्स को कैसे निकालें।

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// The path to the File directory.
String dataDir = "data/";

try (PersonalStorage personalstorage = PersonalStorage.fromFile(dataDir + "Outlook.pst")) {
    FolderInfo folder = personalstorage.getRootFolder().getSubFolder("Inbox");

    for (String messageInfo : folder.enumerateMessagesEntryId()) {
        MapiAttachmentCollection attachments = personalstorage.extractAttachments(messageInfo);

        if (attachments.size() != 0) {
            for (MapiAttachment attachment : attachments) {
                if (attachment.getLongFileName() != null && !attachment.getLongFileName().isEmpty()) {
                    if (attachment.getLongFileName().contains(".msg")) {
                        continue;
                    } else {
                        attachment.save(dataDir + "Attachments/" + attachment.getLongFileName());
                    }
                }
            }
        }
    }
}

PST में फ़ाइलें जोड़ना

Microsoft Outlook की मुख्य कार्यक्षमता ईमेल, कैलेंडर, कार्य, कॉन्टैक्ट्स और जर्नल एंट्रीज़ को प्रबंधित करना है। अतिरिक्त रूप से, फ़ाइलें भी PST फ़ोल्डर में जोड़ी जा सकती हैं और resulting PST जोड़ी गई दस्तावेज़ों का रिकॉर्ड रखता है। Aspose.Email संदेशों, कॉन्टैक्ट्स, कार्य और जर्नल एंट्रीज़ को PST में जोड़ने के साथ ही फ़ाइलों को फ़ोल्डर में जोड़ने की सुविधा भी प्रदान करता है। नीचे दिया गया कोड स्निपेट दर्शाता है कि Aspose.Email का उपयोग करके PST फ़ोल्डर में दस्तावेज़ कैसे जोड़ें।

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// The path to the File directory.
String dataDir = "data/";

try (PersonalStorage personalStorage = PersonalStorage.create(dataDir + "Ps1_out.pst", FileFormatVersion.Unicode)) {
    FolderInfo folder = personalStorage.getRootFolder().addSubFolder("Files");

    // Add Document.doc file with the "IPM.Document" message class by default.
    folder.addFile(dataDir + "attachment_1.doc", null);
}