Neue PST erstellen, Unterordner und Nachrichten hinzufügen

Neben dem Parsen einer bestehenden PST-Datei bietet Aspose.Email die Möglichkeit, eine PST-Datei von Grund auf neu zu erstellen. Dieser Artikel zeigt, wie man eine Outlook-PST-Datei erstellt und einen Unterordner hinzufügt.

  1. Erstellen einer neuen PST-Datei.
  2. Ändern der Container‑Klasse eines Ordners.
  3. Nachrichten in Bulk mit verbesserter Leistung hinzufügen

Verwenden Sie die PersonalStorage Klasse, um eine PST‑Datei an einem Ort auf der lokalen Festplatte zu erstellen. So erstellen Sie eine PST‑Datei von Grund auf:

  1. Erstellen Sie eine PST mit der PersonalStorage.create() Methode.
  2. Fügen Sie einen Unterordner im Stammverzeichnis der PST‑Datei hinzu, indem Sie den Root‑Ordner öffnen und anschließend die addSubFolder() Methode.

Das folgende Code‑Snippet zeigt, wie Sie eine PST‑Datei erstellen und einen Unterordner namens Inbox hinzufügen.

// Create new PST
try (PersonalStorage pst = PersonalStorage.create(path, FileFormatVersion.Unicode)) {
    // Add new folder "Test"
    pst.getRootFolder().addSubFolder("Inbox");
}

PST mit einer Größe von mehr als 2 GB über OutputStream erstellen

Aspose.Email‑Benutzer können den internen PST‑Cache über den PersonalStorage‑Konstruktor optimieren:

  • blockSize – Die optimale Blockgröße zum Erweitern des Cache‑Puffers (in Bytes).
PersonalStorage create(OutputStream stream, int blockSize, /*FileFormatVersion*/int version)

Die Nachrichtengröße und die Größe der erstellten PST‑Datei reduzieren

Aspose.Email bietet die Möglichkeit, den Nachrichtentext zu komprimieren, was die Nachrichtengröße reduzieren kann. Das ist besonders nützlich beim Versenden großer Nachrichten oder bei begrenzter Bandbreite bzw. Speicherkapazität. Zu diesem Zweck stellt die Bibliothek den Kompressionsparameter in den folgenden Methoden bereit:

Das folgende Code‑Snippet demonstriert die Verwendung von RTF‑Kompression beim Setzen des MAPI‑Nachrichtenkörpers:

MapiMessage msg = new MapiMessage("from@doamin.com", "to@domain.com", "subject", "body");
// set the html body and keep it compressed
// this will reduce the message size
msg.setBodyContent(htmlBody, BodyContentType.Html, true);

PersonalStorage basierend auf SeekableByteChannel‑Stream erstellen

Aspose.Email für Java ermöglicht die Arbeit mit Personal Storage (PST)‑Dateien über java.nio.channels. Es erlaubt Ihnen, eine PersonalStorage‑Instanz mithilfe eines SeekableByteChannel‑Streams zu erstellen. Das folgende Code‑Snippet demonstriert, wie man eine PersonalStorage‑Instanz basierend auf einem FileChannel‑Stream erstellt, einen Unterordner mit dem Namen "messageFolder" zum Stammordner hinzufügt und Nachrichten aus Dateien im Verzeichnis "messageFolder" importiert:

try (RandomAccessFile raf = new RandomAccessFile("test.pst", "rw")) {
    FileChannel channel = raf.getChannel();
    try (PersonalStorage pst = PersonalStorage.create(channel, FileFormatVersion.Unicode)) {
        FolderInfo messageFolder = pst.getRootFolder().addSubFolder("messageFolder");

        for (File f : new File("messageFolder").listFiles()) {
            messageFolder.addMessage(MapiMessage.load(f.getAbsolutePath()));
        }
    }
}

Ändern der Container‑Klasse eines Ordners

Manchmal ist es nötig, die Ordnerklasse zu ändern. Ein häufiges Beispiel ist, wenn Nachrichten unterschiedlicher Typen (Termine, Nachrichten usw.) in denselben Ordner eingefügt werden. In solchen Fällen muss die Ordnerklasse für alle Elemente im Ordner geändert werden, damit sie korrekt angezeigt werden. Das folgende Code‑Snippet zeigt, wie die Container‑Klasse eines Ordners in einer PST zu diesem Zweck geändert wird.

try (PersonalStorage pst = PersonalStorage.fromFile("PersonalStorage1.pst")) {
    FolderInfo folder = pst.getRootFolder().getSubFolder("Inbox");

    folder.changeContainerClass("IPF.Note");
}

Nachrichten in Bulk mit verbesserter Leistung hinzufügen

Das Hinzufügen einzelner Nachrichten zu einer PST führt zu mehr I/O‑Operationen auf die Festplatte und kann die Leistung verlangsamen. Für bessere Performance können Nachrichten im Bulk‑Modus zur PST hinzugefügt werden, um I/O‑Operationen zu minimieren. Das addMessages(Iterable messages) Methode ermöglicht das Hinzufügen von Nachrichten in großen Mengen und kann in den folgenden Szenarien verwendet werden. Zusätzlich ist das MessageAdded Ereignis tritt auf, wenn eine Nachricht zum Ordner hinzugefügt wird.

Nachrichten aus anderer PST hinzufügen

Um Nachrichten aus einer anderen PST hinzuzufügen, verwenden Sie die FolderInfo.enumerateMapiMessages() Methode, die zurückgibt Iterable<MapiMessage>:

try (PersonalStorage srcPst = PersonalStorage.fromFile("source.pst", false)) {
    try (PersonalStorage destPst = PersonalStorage.fromFile("destination.pst")) {

        // Get the folder by name
        FolderInfo srcFolder = srcPst.getRootFolder().getSubFolder("SomeFolder");
        FolderInfo destFolder = destPst.getRootFolder().getSubFolder("SomeFolder");

        destFolder.MessageAdded.add(new MessageAddedEventHandler() {
            // Handles the MessageAdded event.
            public void invoke(Object sender, MessageAddedEventArgs e) {
                System.out.println("Added: " + e.getEntryId());
            }
        });
        destFolder.addMessages(srcFolder.enumerateMapiMessages());
    }
}

Nachrichten aus Verzeichnis hinzufügen

Um Nachrichten aus einem Verzeichnis hinzuzufügen, erstellen Sie die getMessages(String pathToDir) Methode, die zurückgibt Iterable<MapiMessage>:

// Read messages from directory.
static Iterable<MapiMessage> getMessages (String pathToDir)
{
    return Arrays.stream(listDirectory(pathToDir, "*.msg"))
            .map(MapiMessage::load).collect(Collectors.toList());
}

try ( PersonalStorage pst = PersonalStorage.fromFile("storage.pst")) {
    FolderInfo folder = pst.getRootFolder().getSubFolder("SomeFolder");
    folder.MessageAdded.add(new MessageAddedEventHandler() {
        // Handles the MessageAdded event.
        public void invoke(Object sender, MessageAddedEventArgs e) {
            System.out.println("Added: " + e.getEntryId());
        }
    });
    folder.addMessages(getMessages("MessageDirectory"));
}