PST Dosyasındaki Mesajlarla Çalışma

PST Dosyalarına Mesaj Ekleme

Yeni bir PST Dosyası Oluşturun ve Alt Klasörler Ekleyin Bir PST dosyası oluşturmayı ve ona bir alt klasör eklemeyi gösterdi. Aspose.Email ile oluşturduğunuz ya da yüklediğiniz bir PST dosyasının alt klasörlerine mesaj ekleyebilirsiniz. Bu makale, bir PST’nin Inbox alt klasörüne diskten iki mesaj ekler. Şunu kullanın: PersonalStorage ve FolderInfo PST dosyalarına mesaj eklemek için sınıflar. Bir PST dosyasının Inbox klasörüne mesaj eklemek için:

  1. Inbox klasörünün içeriğiyle doldurmak için FolderInfo sınıfının bir örneğini oluşturun.
  2. Diskten Inbox klasörüne mesaj eklemek için aşağıdaki çağrıyı yapın: FolderInfo.addMessage() metod. FolderInfo sınıf şu özelliği sunar addMessages Metod, klasöre büyük miktarda mesaj eklemeyi sağlar, disk I/O işlemlerini azaltır ve performansı iyileştirir. Tam bir örnek aşağıda, içinde bulunabilir. Toplu Mesaj Ekleme.

Aşağıdaki kod snippet’leri, Inbox adlı bir PST alt klasörüne mesajların nasıl ekleneceğini gösterir.

// 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"));

Toplu Mesaj Ekleme

Tek tek mesajları bir PST’ye eklemek, daha fazla disk I/O işlemi anlamına gelir ve bu da performansı yavaşlatabilir. Daha iyi performans için, mesajlar toplu modda PST’ye eklenerek I/O işlemleri en aza indirgenebilir. The addMessages(Iterable messages) Metod, daha iyi performans için PST’ye eklenecek mesaj aralığını tanımlamanıza olanak tanır ve aşağıdaki senaryolarda kullanılabilir. Ayrıca, bir mesaj klasöre eklendiğinde MessageAdded olayı oluşur.

Diskten Mesajları Yükleme

Aşağıdaki kod örneği, mesajları diskten nasıl yükleyeceğinizi gösterir.

// 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 Implementasyonu

Aşağıdaki kod örneği, Iterable Implementasyonu nasıl oluşturacağınızı gösterir.

// 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());
    }
}

Başka Bir PST’den Mesaj Ekleme

Başka bir PST’den mesaj eklemek için şunu kullanın: FolderInfo.enumerateMapiMessages() Iterable döndüren metod. Aşağıdaki kod snippet’i, diğer PST’lerden mesaj eklemeyi gösterir.

// 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 Dosyasından Mesaj Bilgilerini Al

İçinde Outlook PST Dosyasını Oku ve Klasörler ve Alt Klasör Bilgilerini Al, bir Outlook PST dosyasını yüklemeyi ve klasörlerini taramayı, klasör adlarını ve içlerindeki mesaj sayısını almayı tartıştık. Bu makale, PST dosyasındaki tüm klasör ve alt klasörleri okuma ve mesajlar hakkında, örneğin konu, gönderen ve alıcılar gibi bilgi görüntüleme konusunu açıklıyor. The FolderInfo.getContents() metod, görüntülemek için kullanılır kısa mesaj bilgisi konu, gönderen, alıcılar gibi. Performans açısından, mesajlar hakkında birincil bilgileri elde etmek için en uygun seçenektir. çıkar tam mesaj verisi, PersonalStorage.extractMessage() metod sağlanır. Outlook PST dosyası iç içe klasörler içerebilir. Bunlardan ve üst düzey klasörlerden mesaj bilgilerini almak için tüm klasörleri okumak üzere özyinelemeli bir metod kullanın. Aşağıdaki kod snippet’i, bir Outlook PST dosyasını nasıl okuyacağınızı ve klasör ve mesaj içeriklerini özyinelemeli olarak nasıl görüntüleyeceğinizi gösterir.

// 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 Dosyalarından Mesaj Çıkarma

Bu makale, Microsoft Outlook PST dosyalarını nasıl okuyacağınızı ve mesajları çıkart. Mesajlar daha sonra MSG formatında diske kaydedilir. Makale ayrıca nasıl yapılacağını da gösterir belirli sayıda mesaj çıkart PST dosyasından. Tüm klasörleri (iç içe klasörler dahil) taramak ve şunu çağırmak için özyinelemeli bir metod kullanın: PersonalStorage.extractMessage() Outlook mesajlarını şu sınıfın bir örneğine almak için metod MapiMessage sınıf. Ardından, şunu çağırın: MapiMessage.save() metod, mesajı MSG formatında diske veya akışa (stream) kaydetmek için kullanılır. Aşağıdaki kod snippet’i, PST dosyasından mesajları nasıl çıkaracağınızı gösterir.

// 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);
        }
    }
}

Mesajları PST’den Doğrudan Akışa (Stream) Kaydetme

Mesajları PST dosyasından doğrudan akışa (stream) kaydetmek için, mesajların MsgInfo’sunu çıkarmadan, şunu kullanın: saveMessageToStream() metod. Aşağıdaki kod snippet’i, mesajları doğrudan PST’den akışa (stream) nasıl kaydedeceğinizi gösterir.

// 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);
        }
    }
}

Bir PST Dosyasından n Adet Mesaj Çıkarma

Aşağıdaki kod snippet’i, bir PST’den verilen sayıda mesajı nasıl çıkaracağınızı gösterir. İlk mesajın indeksini ve çıkarılacak mesajların toplam sayısını sağlayın.

// 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);

Bir PST Dosyasındaki Toplam Öğe Sayısını Al

Aspose.Email şunları sağlar GetTotalItemsCount() metodu PersonalStorage.Store özellik. PST içinde bulunan mesaj öğelerinin toplam sayısını döndürür.

Aşağıdaki kod örneği, PST dosyası içinde saklanan öğelerin (mesajlar, randevular, kişiler vb.) toplam sayısını nasıl alacağınızı gösterir:

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

PST Dosyalarından Öğeleri Sil

PST Dosyalarına Mesaj Ekleme PST dosyalarına mesaj eklemeyi göstermişti. Tabii ki, bir PST dosyasından öğeleri (içerikleri) silmek de mümkündür ve mesajları toplu olarak silmek de istenebilir. Bir PST dosyasındaki öğeler aşağıdaki yöntemle silinebilir: FolderInfo.deleteChildItem() metod. API ayrıca şunu sağlar FolderInfo.deleteChildItems() PST dosyasından öğeleri toplu olarak silmek için metod.

PST Dosyalarından Mesaj Silme

Bu makale, Kullanımını gösterir FolderInfo bir PST dosyasındaki belirli klasörlere erişmek için sınıf. Önceden yüklenmiş veya oluşturulmuş bir PST dosyasının Gönderilen alt klasöründen mesajları silmek için:

  1. Şunun bir örneğini oluştur FolderInfo sınıfı ve onu gönderilen alt klasörün içeriğiyle yükleyin.
  2. Gönderilen klasöründen mesajları silmek için şu yöntemi çağırın: FolderInfo.deleteChildItem() metod ve şunu geçerek MessageInfo.EntryId parametre olarak. Aşağıdaki kod snippet’i, PST dosyasındaki Gönderilen alt klasöründen mesajları nasıl sileceğinizi gösterir.
// 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 Dosyalarından Klasör Silme

Bir PST klasörünü Silinmiş Öğeler klasörüne taşıyarak silebilirsiniz.

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);
}

Bu metodun avantajı, silinen klasörün kolayca geri getirilebilmesidir.

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

Gerekirse, Silinmiş Öğeler klasöründen bir klasörü kalıcı olarak da kaldırabilirsiniz.

deletedItemsFolder.deleteChildItem(emptyFolder.getEntryId());

Bu deleteChildItem() metod, Silinmiş Öğeler klasörünü atlayarak alt klasörü hemen ve kalıcı olarak silmek isterseniz herhangi bir klasör için kullanılabilir.

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

PST Dosyasından Toplu Olarak Öğeleri Sil

Aspose.Email API, bir PST dosyasından öğeleri toplu olarak silmek için kullanılabilir. Bu, aşağıdaki yöntemle gerçekleştirilir: deleteChildItems() silinecek öğelere referans veren Entry ID öğelerinin bir listesini kabul eden metod. Aşağıdaki kod snippet’i, PST dosyasından öğeleri toplu olarak nasıl sileceğinizi gösterir.

// 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’den Yumuşak Silinmiş Mesajları Numara ve Kurtarma

Aspose.Email for Java ile kalıcı olarak silinmiş mesajları almak mümkündür. API’si, PST dosyalarındaki yumuşak silinmiş mesajları numaralandırmanıza olanak tanır. Yumuşak silinmiş öğeler, iki kez silinen mesajlardır - önce Silinmiş Öğeler klasörüne taşınır ve ardından oradan kaldırılır. Bu mesajlar hâlâ kurtarılabilir ve Aspose.Email bunlara erişmek için uygun bir yol sağlar. The PersonalStorage.findAndEnumerateSoftDeletedItems() metod bir koleksiyon döndürür RestoredItemEntry nesneler. Her giriş şunları içerir:

  • MapiMessage item — kurtarılan mesaj.
  • String FolderId - mesajın başlangıçta ait olduğu klasörün tanımlayıcısı.

Aşağıdaki kod örneği, PST dosyalarındaki yumuşak silinmiş (kurtarılabilir) e-posta öğelerini nasıl numaralandıracağınızı gösterir:

// 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("-----------------------------------");
    }
}

Kritere Göre PST’de Mesaj ve Klasör Arama

Kişisel Depolama (PST) dosyaları çok büyük miktarda veri içerebilir ve bu kadar büyük dosyalarda belirli bir kritere uyan verileri aramak, bilgiyi filtrelemek için kodda birden fazla kontrol noktasını içerir. With the PersonalStorageQueryBuilder sınıf, Aspose.Email, belirli bir arama kriterine dayalı olarak bir PST içinde belirli kayıtları aramayı mümkün kılar. Bir PST, gönderici, alıcı, konu, mesaj önemi, eklerin varlığı, mesaj boyutu ve hatta mesaj kimliği gibi arama parametrelerine göre mesajlar için aranabilir. The PersonalStorageQueryBuilder alt klasörleri aramak için de kullanılabilir.

PST’de Mesaj ve Klasör Arama

Aşağıdaki kod örneği size nasıl kullanılacağını gösterir PersonalStorageQueryBuilder farklı arama kriterlerine dayalı olarak bir PST içindeki içerikleri aramak için sınıf. Örneğin, bir PST’yi şu temellere göre aramayı gösterir:

  • Mesaj önemi.
  • Mesaj sınıfı.
  • Eklerin varlığı.
  • Mesaj boyutu.
  • Mesaj tarihi.
  • Okunmamış mesajlar.
  • Ekli okunmamış mesajlar ve
  • belirli alt klasör adı olan klasörler.
// 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());
}

Büyük/Küçük Harf Duyarsız Parametresiyle PST içinde Dize Arama

Aşağıdaki kod snippet’i, PST içinde büyük/küçük harf duyarsız parametresiyle bir dizeyi nasıl arayacağınızı gösterir.

// 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 Dosyasında Birçok Anahtar Kelime ile Mesaj Konularını Arama

Kullanabilirsiniz MailQueryBuilder.or aşağıda gösterildiği gibi, konusu belirtilen kelimelerden en az birini içeren mesajları bulmak için metod:

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 Klasör İçeriklerinin Sayfalı Olarak Alınması

Uygulama performansınızı artırın ve büyük klasörlerde gezinirken kontrol sağlayın. Aspose.Email overload of the getContents metod. Bu metod - FolderInfo.getContents(MailQuery query, int startIndex, int count) - belirtilen sorguya uyan mesajların bir alt kümesini, verilen bir indeksden başlayarak ve bir sayıyla sınırlı şekilde alır. Aşağıdaki kod örneği, bir PST klasöründen filtrelenmiş mesajların sayfalı olarak alınmasını ve işlenmesini gösterir:

// 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 Dosyasındaki Diğer Klasörlere Ögeleri Taşıma

Aspose.Email, aynı Kişisel Depolama (PST) dosyasındaki bir kaynak klasörden başka bir klasöre öğeleri taşıma imkanı sağlar. Şunları içerir:

  • Belirtilen klasörü yeni bir üst klasöre taşıma.
  • Belirtilen mesajı yeni bir klasöre taşıma.
  • İçeriği yeni bir klasöre taşıma.
  • Alt klasörleri yeni bir üst klasöre taşıma.

Aşağıdaki kod snippet’i, aynı PST dosyasındaki bir kaynak klasörden başka bir klasöre mesajlar ve klasörler gibi öğeleri nasıl taşıyacağınızı gösterir.

// 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 Dosyasında Mesaj Özelliklerini Güncelleme

Bazen mesajların konu başlığını değiştirme, önem derecesini işaretleme gibi belirli özelliklerini güncellemek gerekir. Bu tür mesaj özellikleri değişiklikleriyle bir PST dosyasındaki mesajı güncellemek şununla yapılabilir: FolderInfo.changeMessages yöntemi. Bu makale, bir PST dosyasında özellik değişiklikleri için mesajları toplu olarak nasıl güncelleyeceğinizi gösterir. Aşağıdaki kod snippet’i, bir PST dosyasındaki birden çok mesajın özelliklerini toplu modda nasıl güncelleyeceğinizi gösterir.

// 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);

Bir PST Dosyasında Özel Özellikleri Güncelleme

Bazen PST dosyasında işlenen öğeleri işaretlemek gerekir. Aspose.Email API, bunu MapiProperty ve MapiNamedProperty kullanarak yapmanıza olanak tanır. Aşağıdaki yöntemler bu amaç için faydalıdır.

  • constructor MapiNamedProperty(long propertyTag, String nameIdentifier, UUID propertyGuid, byte[] propertyValue)
  • constructor MapiNamedProperty(long propertyTag, long nameIdentifier, UUID propertyGuid, byte[] propertyValue)
  • FolderInfo.changeMessages(MapiPropertyCollection updatedProperties) - klasördeki tüm mesajları değiştirir
  • PersonalStorage.changeMessage(String entryId, MapiPropertyCollection updatedProperties) - mesaj özelliklerini değiştir
// 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;
}

Tam Mesajı Çıkarmadan Ekleri Çıkarma

Aspose.Email API, tam mesajı çıkarmadan PST mesajlarından ekleri çıkarmak için kullanılabilir. ExtractAttachments metodu PersonalStorage bunun için kullanılabilir. Aşağıdaki kod snippet’i, tam mesajı çıkarmadan ekleri nasıl çıkaracağınızı gösterir.

// 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());
                    }
                }
            }
        }
    }
}

Dosyaları PST’ye Ekleme

Microsoft Outlook’ın temel işlevi e-postaları, takvimleri, görevleri, kişileri ve günlük girişlerini yönetmektir. Ayrıca, dosyalar da bir PST klasörüne eklenebilir ve ortaya çıkan PST eklenen belgelerin kaydını tutar. Aspose.Email, mesaj, kişi, görev ve günlük girişlerinin yanı sıra bir klasöre dosya ekleme imkanı sunar. Aşağıdaki kod snippet’i, Aspose.Email kullanarak bir PST klasörüne belge eklemenin nasıl yapılacağını gösterir.

// 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);
}