צור PST חדש, הוסף תתי‑תיקיות והודעות
בנוסף לניתוח קובץ PST קיים, Aspose.Email מספקת את האמצעים ליצירת קובץ PST מאפס. מאמר זה מדגים כיצד ליצור קובץ Outlook PST ולהוסיף לו תת‑תיקייה.
השתמש ב- PersonalStorage מחלקה ליצירת קובץ PST במיקום מסוים על דיסק מקומי. ליצירת קובץ PST מההתחלה:
- צור PST באמצעות ה‑ PersonalStorage.create() שיטה.
- הוסף תיקיית משנה בשורש קובץ ה‑PST על ידי גישה לתיקיית Root ולאחר מכן קריאה ל‑ addSubFolder() שיטה.
קוד הדוגמה הבא מראה כיצד ליצור קובץ PST ולהוסיף תיקיית משנה בשם Inbox.
// Create new PST
try (PersonalStorage pst = PersonalStorage.create(path, FileFormatVersion.Unicode)) {
// Add new folder "Test"
pst.getRootFolder().addSubFolder("Inbox");
}
יצירת PST בגודל יותר מ‑2Gb באמצעות OutputStream
משתמשי Aspose.Email יכולים לייעל את מטמון ה‑PST הפנימי באמצעות הקונסטרוקטור של PersonalStorage:
- blockSize - גודל הבלוק האופטימלי להרחבת מחסנית המטמון (בבתים).
PersonalStorage create(OutputStream stream, int blockSize, /*FileFormatVersion*/int version)
צמצום גודל ההודעה וגודל קובץ PST שנוצר
Aspose.Email מציע אפשרות לכווץ את תוכן הגוף, מה שיכול לסייע בצמצום גודל ההודעה. זה יכול להיות שימושי במיוחד בשליחת הודעות גדולות או בעבודה עם רוחב פס או אחסון מוגבל. למטרה זו, הספרייה מספקת את פרמטר הכיווץ המופיע בשיטות הבאות:
- MapiMessageItemBase.setBodyContent(String content, /BodyContentType/int contentType, boolean compression) - מגדיר את תוכן הגוף.
- MapiMessageItemBase.setBodyRtf(String content, boolean compression) - מקבל או מגדיר את טקסט ההודעה בפורמט RTF.
קטע הקוד למטה מציג כיצד להשתמש בכיווץ RTF בעת הגדרת גוף הודעת MAPI:
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 בהתבסס על זרם SeekableByteChannel
Aspose.Email for Java מאפשר לעבוד עם קבצי Personal Storage (PST) באמצעות java.nio.channels. הוא מאפשר ליצור מופע PersonalStorage באמצעות זרם SeekableByteChannel. קטע הקוד הבא מדגים כיצד ליצור מופע PersonalStorage בהתבסס על זרם FileChannel, להוסיף תיקיית משנה בשם "messageFolder" לתיקיית השורש, ולייבא הודעות מקבצים בתיקייה "messageFolder":
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()));
}
}
}
שינוי מחלקת מכולת תיקייה
לפעמים יש צורך לשנות את מחלקת התיקייה. דוגמה נפוצה היא כאשר הודעות מסוגים שונים (פגישות, הודעות וכד’) מתווספות לאותה תיקייה. במקרים כאלו, יש לשנות את מחלקת התיקייה עבור כל האלמנטים בתיקייה כדי שהצגתן תהיה נכונה. קטע הקוד הבא מראה כיצד לשנות את מחלקת המכולה של תיקייה ב‑PST למטרה זו.
try (PersonalStorage pst = PersonalStorage.fromFile("PersonalStorage1.pst")) {
FolderInfo folder = pst.getRootFolder().getSubFolder("Inbox");
folder.changeContainerClass("IPF.Note");
}
הוספת הודעות במצב הצטברות עם ביצועים משופרים
הוספת הודעות בודדות ל‑PST גוררת יותר פעולות קלט/פלט לדיסק ועלולה להאט את הביצועים. לשיפור ביצועים, ניתן להוסיף הודעות ל‑PST במצב הצטברות כדי למזער פעולות קלט/פלט. ה‑ addMessages(Iterable
הוספת הודעות מ‑PST אחר
כדי להוסיף הודעות מ‑PST אחר, השתמש ב‑ FolderInfo.enumerateMapiMessages() שיטה שמחזירה 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());
}
}
הוספת הודעות מספרייה
כדי להוסיף הודעות מספרייה, צור את getMessages(String pathToDir) שיטה שמחזירה 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"));
}