สร้าง PSTใหม่, เพิ่มโฟลเดอร์ย่อยและข้อความ
นอกจากการวิเคราะห์ไฟล์ PST ที่มีอยู่แล้ว, Aspose.Email ยังให้วิธีการสร้างไฟล์ PST ตั้งแต่ต้น บทความนี้แสดงวิธีการสร้างไฟล์ Outlook PST และเพิ่มโฟลเดอร์ย่อยเข้าไป
- สร้างไฟล์ 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 จะทำให้มีการดำเนินการ I/O เพิ่มขึ้นและอาจทำให้ประสิทธิภาพช้าลง สำหรับประสิทธิภาพที่ดีขึ้น สามารถเพิ่มข้อความลงใน PST เป็นโหมดกลุ่มเพื่อจำกัดการดำเนินการ I/O. ส่วน 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"));
}