إنشاء PST جديد، إضافة مجلدات فرعية ورسائل
بالإضافة إلى تحليل ملف PST موجود، توفر Aspose.Email الوسيلة لإنشاء ملف PST من الصفر. توضح هذه المقالة كيفية إنشاء ملف Outlook PST وإضافة مجلد فرعي إليه.
استخدم الـ PersonalStorage الفئة لإنشاء ملف PST في موقع ما على القرص المحلي. لإنشاء ملف PST من الصفر:
- إنشاء PST باستخدام الـ PersonalStorage.create() طريقة.
- أضف مجلدًا فرعيًا في جذر ملف PST عبر الوصول إلى المجلد الجذري ثم استدعاء الـ addSubFolder() طريقة.
يوضح مثال الشيفرة التالي كيفية إنشاء ملف PST وإضافة مجلد فرعي اسمه Inbox.
// Create new PST
try (PersonalStorage pst = PersonalStorage.create(path, FileFormatVersion.Unicode)) {
// Add new folder "Test"
pst.getRootFolder().addSubFolder("Inbox");
}
إنشاء PST بحجم أكبر من 2 جيجابايت باستخدام 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 من العمل مع ملفات التخزين الشخصي (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"));
}