การเขียนโปรแกรมด้วย Thunderbird

อ่านข้อความจาก MBOX

Mozilla Thunderbird เป็นไคลเอนต์อีเมลแบบโอเพ่นซอร์สที่ทำงานข้ามแพลตฟอร์ม พัฒนาโดย Mozilla Foundation มันเก็บอีเมลในโครงสร้างไฟล์ของตนเอง จัดการดัชนีข้อความและโฟลเดอร์ย่อยผ่านรูปแบบไฟล์เฉพาะกรรมสิทธิ์ Aspose.Email สามารถทำงานกับโครงสร้างการเก็บเมลของ Thunderbird ได้. MboxrdStorageReader คลาสนี้ให้ผู้พัฒนาสามารถอ่านข้อความจากไฟล์ที่เก็บเมลของ Mozilla Thunderbird บทความนี้แสดงวิธีอ่านข้อความจากที่เก็บเมลของ Thunderbird:

  1. เปิดไฟล์ที่เก็บของ Thunderbird ใน FileStream.
  2. สร้างอินสแตนซ์ของ MboxrdStorageReader คลาสและส่งสตรีมที่กล่าวถึงข้างต้นไปยังคอนสตรัคเตอร์.
  3. เรียก ReadNextMessage() เพื่อรับข้อความแรก.
  4. ใช้แบบเดียวกัน ReadNextMessage() ในลูป while เพื่ออ่านข้อความทั้งหมด.
  5. ปิดสตรีมทั้งหมด.

โค้ดตัวอย่างต่อไปนี้แสดงวิธีอ่านข้อความทั้งหมดจากที่เก็บเมลของ Thunderbird.

//Getting Marker information while reading messages from Mbox storage file
try (FileInputStream stream = new FileInputStream(dataDir + "Outlook.pst")) {
    MboxLoadOptions lo = new MboxLoadOptions();
    lo.setLeaveOpen(false);
    try (MboxrdStorageReader reader = new MboxrdStorageReader(stream, lo)) {
        MailMessage msg;
        String[] fromMarker = {null};
        while ((msg = reader.readNextMessage(/* out */fromMarker)) != null) {
            System.out.println(fromMarker[0]);
        }
    }
}

กำหนดค่าตัวเลือกการโหลดเมื่ออ่านข้อความจาก MBOX

API ของ Aspose.Email อนุญาตให้ทำการจัดการต่อไปนี้กับข้อความเมื่ออ่านจากไฟล์ MBOX:

แปลงข้อความจาก MBOX ไปเป็น PST โดยคงไฟล์แนบ TNEF

EmlLoadOptions emlLoadOptions = new EmlLoadOptions();
emlLoadOptions.setPreserveTnefAttachments(true);
MailStorageConverter.setMboxMessageOptions(emlLoadOptions);
// Convert messages from mbox to pst preserving tnef attachments.
PersonalStorage storage = MailStorageConverter.mboxToPst("Input.mbox", "Output.pst");

MailStorageConverter.MboxMessageOptions() คุณสมบัติ - รับหรือกำหนดตัวเลือกการโหลดอีเมลเมื่อแยกวิเคราะห์ที่จัดเก็บ Mbox.

อ่านข้อความโดยคงไฟล์แนบ TNEF

MboxrdStorageReader reader = new MboxrdStorageReader("Input.mbox", new MboxLoadOptions());
// Read messages preserving tnef attachments.
EmlLoadOptions emlLoadOptions = new EmlLoadOptions();
emlLoadOptions.setPreserveTnefAttachments(true);
MailMessage eml = reader.readNextMessage(emlLoadOptions);

MboxrdStorageReader.readNextMessage(EmlLoadOptions options) method - พารามิเตอร์ EmlLoadOptions ระบุตัวเลือกเมื่ออ่านข้อความจากที่เก็บ Mbox.

วนรอบข้อความโดยคงไฟล์แนบ TNEF

EmlLoadOptions emlLoadOptions = new EmlLoadOptions();
emlLoadOptions.setPreserveTnefAttachments(true);
// Enumerate messages preserving tnef attachments.
for (MailMessage message : reader.enumerateMessages(emlLoadOptions)) {
    // do something
}

MboxrdStorageReader.enumerateMessages(EmlLoadOptions options) method - ระบุ EmlLoadOptions เมื่ออ่านข้อความจากที่เก็บ Mbox.

สกัดข้อความจาก MBOX ตามรหัสประจำตัว

บางครั้งอาจจำเป็นต้องสกัดข้อความที่เลือกตามรหัสประจำตัว ตัวอย่างเช่น แอปพลิเคชันของคุณเก็บรหัสประจำตัวไว้ในฐานข้อมูลและสกัดข้อความตามความต้องการ นี่เป็นวิธีที่มีประสิทธิภาพเพื่อหลีกเลี่ยงการวนตรวจสอบที่เก็บทั้งหมดทุกครั้งเพื่อหาข้อความที่ต้องการสกัด เพื่อทำคุณลักษณะนี้สำหรับไฟล์ MBOX, Aspose.Email มีเมธอดและคลาสต่อไปนี้:

ตัวอย่างโค้ดด้านล่างแสดงวิธีสกัดข้อความจาก MBOX ตามรหัสประจำตัว:

MboxStorageReader reader = MboxStorageReader.createReader("my.mbox", new MboxLoadOptions());

for (MboxMessageInfo msgInfo : reader.enumerateMessageInfo()) {
    MailMessage eml = reader.extractMessage(msgInfo.getEntryId(), new EmlLoadOptions());
}

หมายเหตุ: รหัสข้อความ (Message ID) มีความเฉพาะเจาะจงภายในไฟล์ที่เก็บ ไอดีเหล่านี้สร้างโดย Aspose.Email และไม่สามารถใช้ในไลบรารีหรือแอปพลิเคชันการประมวลผล MBOX ของบุคคลที่สามได้.

กรองและค้นหาอีเมลในไฟล์ MBOX

Aspose.Email สำหรับ Java ให้ความสามารถในการกรองหรือค้นหาข้อความภายในไฟล์ MBOX ด้วยการใช้คิวรี ซึ่งช่วยให้ดึงข้อความที่ตรงตามเกณฑ์เท่านั้น วิธีนี้จะช่วยปรับปรุงประสิทธิภาพและการใช้งานของแอปพลิเคชันเมื่อทำงานกับไฟล์ MBOX ขนาดใหญ่.

ตัวอย่างโค้ดด้านล่างจะแสดงวิธีนำคุณลักษณะนี้ไปใช้โดยการทำงานของเมธอดต่อไปนี้:

  • enumerateMessages(MailQuery query) - คืนค่าคอลเลกชันที่สามารถวนลูปของ MailMessage ที่ตรงตามเงื่อนไขที่ระบุ

  • enumerateMessageInfo(MailQuery query) - คืนค่าคอลเลกชันที่สามารถวนลูปของ MboxMessageInfo ที่ตรงตามเงื่อนไขที่ระบุ

MboxStorageReader reader = MboxStorageReader.createReader("input.mbox", new MboxLoadOptions());
MailQueryBuilder mqb = new MailQueryBuilder();
mqb.getSubject().contains("Project Update");
mqb.getSentDate().before(new Date());

for (MailMessage message : reader.enumerateMessages(mqb.getQuery())) {
    System.out.println("Subject: " + message.getSubject());
}

การดึงข้อความแบบแบ่งหน้าจากไฟล์ MBOX

Aspose.Email สำหรับ Java รองรับการดึงข้อความแบบแบ่งหน้าจากไฟล์ MBOX คุณลักษณะนี้ช่วยให้ประมวลผลไฟล์ MBOX ขนาดใหญ่ได้อย่างมีประสิทธิภาพด้วยการดึงข้อความเป็นชุดเล็ก ๆ ลดการใช้หน่วยความจำและปรับปรุงประสิทธิภาพ.

ตัวอย่างโค้ดด้านล่างจะแสดงวิธีนำคุณลักษณะนี้ไปใช้โดยการทำงานของเมธอดต่อไปนี้:

  • enumerateMessages(int startIndex, int count) - ดึง MailMessage จำนวนที่ระบุเริ่มจากดัชนีที่กำหนด

  • enumerateMessageInfo(int startIndex, int count) - ดึง MboxMessageInfo จำนวนที่ระบุเริ่มจากดัชนีที่กำหนด

MboxStorageReader reader = MboxStorageReader.createReader("input.mbox", new MboxLoadOptions());
int startIndex = 0;
int count = 10; // Retrieve messages in batches of 10

for (MailMessage message : reader.enumerateMessages(startIndex, count)) {
    System.out.println("Subject: " + message.getSubject());
}

การเขียนข้อความ

นี้ MboxrdStorageWriter คลาสนี้ให้ความสามารถในการเขียนข้อความใหม่ไปยังไฟล์ที่เก็บเมลของ Thunderbird เพื่อเขียนข้อความ:

  1. เปิดไฟล์ที่เก็บของ Thunderbird ใน FileStream.
  2. สร้างอินสแตนซ์ของ MboxrdStorageWriter คลาสและส่งสตรีมที่กล่าวถึงข้างต้นไปยังคอนสตรัคเตอร์.
  3. เตรียมข้อความใหม่โดยใช้ MailMessage คลาส.
  4. เรียกใช้ WriteMessage() เมธอดและส่งค่าที่กล่าวถึงข้างต้น MailMessage อินสแตนซ์เพื่อเพิ่มข้อความไปยังที่เก็บของ Thunderbird.
  5. ปิดสตรีมทั้งหมด.

โค้ดตัวอย่างต่อไปนี้จะแสดงวิธีเขียนข้อความไปยังที่เก็บเมลของ Thunderbird.

//Getting marker information while writing messages to Mbox storage file
try (FileOutputStream writeStream = new FileOutputStream(dataDir + "inbox")) {
    try (MboxrdStorageWriter writer = new MboxrdStorageWriter(writeStream, false)) {
        MailMessage msg = MailMessage.load(dataDir + "Message.msg");
        String[] fromMarker = {null};
        writer.writeMessage(msg, fromMarker);
        System.out.println(fromMarker[0]);
    }
}

รับจำนวนข้อความทั้งหมดจากไฟล์ MBox

นี้ MboxrdStorageReader คลาสนี้ให้ความสามารถในการอ่านจำนวนรายการที่มีในไฟล์ MBox ซึ่งสามารถใช้พัฒนาแอปพลิเคชันเพื่อแสดงความคืบหน้าของกิจกรรมขณะประมวลผลไฟล์ดังกล่าวได้.

MboxLoadOptions lo = new MboxLoadOptions();
try (MboxrdStorageReader reader = new MboxrdStorageReader("inbox.dat", lo)) {
    System.out.println("Total number of messages in Mbox file: " + reader.getTotalItemsCount());
}

รับขนาดข้อความปัจจุบัน

FileInputStream stream = new FileInputStream(dataDir + "ExampleMbox.mbox");
MboxLoadOptions lo = new MboxLoadOptions();
try (MboxrdStorageReader reader = new MboxrdStorageReader(stream, lo)) {
    MailMessage msg = null;
    while ((msg = reader.readNextMessage()) != null) {
        //returns the number of bytes read
        long currentDataSize = reader.getCurrentDataSize();
        System.out.println("Bytes read: " + currentDataSize);
    }
}

กำหนดการเข้ารหัสข้อความที่ต้องการเมื่อโหลดไฟล์ Mbox

นี้ setPreferredTextEncoding(Charset value) เมธอดของ MboxLoadOptions คลาสนี้รับหรือกำหนดการเข้ารหัสที่ต้องการสำหรับข้อความ สร้างตัวอ่านสำหรับไฟล์ Mbox ด้วยตัวเลือกการโหลดที่ระบุและข้อความของคุณที่มีเนื้อหาเข้ารหัสจะถูกอ่านและประมวลผลอย่างถูกต้อง ตัวอย่างโค้ดต่อไปนี้แสดงวิธีนำคุณลักษณะนี้ไปใช้ในโปรเจกต์:

MboxLoadOptions lo = new MboxLoadOptions();
lo.setPreferredTextEncoding(Charset.forName("utf-8"));
MboxrdStorageReader reader = new MboxrdStorageReader("sample.mbox", lo);
MailMessage message = reader.readNextMessage();

แยกที่เก็บ Mbox เป็นส่วนย่อย

Aspose.Email มีส่วนประกอบต่อไปนี้ออกแบบมาเพื่อให้ควบคุมการประมวลผลที่เก็บ Mbox ได้มากขึ้น ช่วยให้คุณแยกไฟล์ขนาดใหญ่เป็นส่วนที่จัดการได้และทำการกระทำที่กำหนดเองระหว่างกระบวนการ:

  • MboxStorageReader.SplitInto(long chunkSize, String outputPath) method - ช่วยให้คุณแยกที่เก็บ Mbox เป็นส่วนย่อย ๆ ทำให้จัดการและประมวลผลไฟล์ Mbox ขนาดใหญ่ได้ง่ายขึ้น.

MboxStorageReader.SplitInto(long chunkSize, String outputPath, String partFileNamePrefix) เป็นรูปแบบหนึ่งของเมธอดก่อนหน้า ซึ่งเวอร์ชันนี้ยังให้คุณระบุคำนำหน้าที่กำหนดเองสำหรับชื่อไฟล์ Mbox ที่ถูกแยก.

เหตุการณ์ MboxStorageReader.setEmlCopyingEventHandler เหตุการณ์นี้เกิดขึ้นก่อนที่อีเมลจะถูกคัดลอกไปยังไฟล์ Mbox ใหม่ คุณสามารถปรับแต่งการทำงานก่อนที่อีเมลจะถูกประมวลผลได้.

เหตุการณ์ MboxStorageReader.setEmlCopiedEventHandler เหตุการณ์นี้เกิดขึ้นหลังจากที่อีเมลถูกคัดลอกไปยังไฟล์ Mbox ใหม่ คุณสามารถทำการประมวลผลต่อหลังจากอีเมลได้.

เหตุการณ์ MboxStorageReader.setMboxFileCreatedEventHandler เหตุการณ์นี้เกิดขึ้นเมื่อมีการสร้างไฟล์ Mbox ใหม่ คุณสามารถจัดการเหตุการณ์นี้เพื่อทำการตอบสนองต่อการสร้างไฟล์ได้.

MboxStorageReader.setMboxFileFilledEventHandler Event เหตุการณ์นี้เกิดขึ้นเมื่อไฟล์ Mbox ใหม่ถูกเติมด้วยอีเมล คุณสามารถตอบสนองต่อการที่ไฟล์เต็มด้วยอีเมลได้

NewStorageEventHandler(Object sender, NewStorageEventArgs e) แสดงตัวมอบหมายสำหรับจัดการเหตุการณ์ที่เกิดขึ้นหลังจากไฟล์ที่เก็บใหม่ถูกสร้างหรือประมวลผล

MimeItemCopyEventHandler(Object sender, MimeItemCopyEventArgs e) แสดงตัวมอบหมายสำหรับจัดการเหตุการณ์ที่เกี่ยวกับการคัดลอก Mime items โดยปกติใช้ในสถานการณ์ที่วัตถุ MailMessage ถูกคัดลอกจากที่เก็บหนึ่งไปยังอีกที่หนึ่ง

NewStorageEventArgs แสดงอาร์กิวเมนต์ที่ใช้ในเหตุการณ์ที่เกิดขึ้นหลังจากไฟล์ที่เก็บใหม่ถูกสร้างหรือหลังจากประมวลผลแล้ว

MimeItemCopyEventArgs แสดงอาร์กิวเมนต์ของเหตุการณ์ที่เกี่ยวข้องกับการคัดลอกวัตถุ MailMessage จากที่เก็บหนึ่งไปยังอีกที่หนึ่ง ไม่ว่าจะก่อนการคัดลอกเริ่มหรือหลังจากเสร็จสมบูรณ์

ตัวอย่างโค้ดด้านล่างแสดงวิธีโต้ตอบกับไฟล์ Mbox, จัดการเหตุการณ์ที่เกี่ยวข้องกับไฟล์เหล่านี้, และทำงานเช่นการแบ่งส่วนจัดเก็บ Mbox เป็นส่วนย่อยพร้อมติดตามจำนวนข้อความและจำนวนส่วน

messageCount = 0;
partCount = 0;

// Create an instance of MboxrdStorageReader
MboxLoadOptions lo = new MboxLoadOptions();
lo.setLeaveOpen(false);
MboxrdStorageReader mbox = new MboxrdStorageReader("my.mbox", lo);

// Subscribe to events
mbox.setMboxFileCreatedEventHandler(new NewStorageEventHandler() {
    public void invoke(Object sender, NewStorageEventArgs e) {
        System.out.println("New Mbox file created: " + e.getFileName());
        partCount++;
    }
});

mbox.setMboxFileFilledEventHandler(new NewStorageEventHandler() {
    public void invoke(Object sender, NewStorageEventArgs e) {
        System.out.println("Mbox file filled with messages: " + e.getFileName());
    }
});

mbox.setEmlCopiedEventHandler(new MimeItemCopyEventHandler() {
    public void invoke(Object sender, MimeItemCopyEventArgs e) {
        System.out.println("Message added to new Mbox file. Subject: " + e.getItem().getSubject());
        messageCount++;
    }
});

// Split the Mbox storage into smaller parts
mbox.splitInto(10000000, testOutPath, "Prefix");

// Output the final messageCount and partCount
System.out.println("Total messages added: " + messageCount);
System.out.println("Total parts created: " + partCount);