ایجاد PST جدید، افزودن زیرپوشه‌ها و پیام‌ها

علاوه بر تجزیه یک فایل PST موجود، Aspose.Email امکان ایجاد یک فایل PST از ابتدا را فراهم می‌کند. این مقاله نشان می‌دهد چگونه یک فایل PST Outlook ایجاد و یک زیرپوشه به آن اضافه کنید.

  1. ایجاد یک فایل PST جدید.
  2. تغییر کلاس کانتینر یک پوشه.
  3. افزودن پیام‌های دسته‌جمعی با عملکرد بهبود یافته

از PersonalStorage کلاس برای ایجاد یک فایل PST در موقعیتی بر روی دیسک محلی. برای ایجاد یک فایل PST از ابتدا:

  1. ایجاد یک PST با استفاده از PersonalStorage.create() متد.
  2. یک زیرپوشه در ریشه فایل 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 با اندازه بیش از ۲ گیگابایت با استفاده از OutputStream

کاربران Aspose.Email می‌توانند کش داخلی PST را با استفاده از سازنده PersonalStorage بهینه‌سازی کنند:

  • blockSize - اندازه بهینه بلوک برای گسترش بافر کش (به بایت).
PersonalStorage create(OutputStream stream, int blockSize, /*FileFormatVersion*/int version)

کاهش حجم پیام و اندازه فایل PST ایجاد شده

Aspose.Email قابلیت فشرده‌سازی محتویات بدنه را فراهم می‌کند که می‌تواند به کاهش حجم پیام کمک کند. این خصوصاً هنگام ارسال پیام‌های بزرگ یا مواجهه با محدودیت پهنای باند یا فضای ذخیره‌سازی مفید است. برای این منظور، کتابخانه پارامتر compression را در متدهای زیر ارائه می‌دهد:

قطعه کد زیر نشان می‌دهد چگونه هنگام تنظیم بدنه پیام MAPI از فشرده‌سازی RTF استفاده کنیم:

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 برای 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 messages) متد به شما امکان می‌دهد پیام‌ها را به صورت دسته‌جمعی اضافه کنید و می‌تواند در سناریوهای زیر استفاده شود. علاوه بر این، MessageAdded رویداد زمانی رخ می‌دهد که پیامی به پوشه اضافه شود.

افزودن پیام‌ها از 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"));
}