การเขียนโปรแกรมด้วย Thunderbird
อ่านข้อความจาก MBOX
Mozilla Thunderbird เป็นไคลเอนต์อีเมลแบบโอเพ่นซอร์สที่ทำงานข้ามแพลตฟอร์ม พัฒนาโดย Mozilla Foundation มันเก็บอีเมลในโครงสร้างไฟล์ของตนเอง จัดการดัชนีข้อความและโฟลเดอร์ย่อยผ่านรูปแบบไฟล์เฉพาะกรรมสิทธิ์ Aspose.Email สามารถทำงานกับโครงสร้างการเก็บเมลของ Thunderbird ได้. MboxrdStorageReader คลาสนี้ให้ผู้พัฒนาสามารถอ่านข้อความจากไฟล์ที่เก็บเมลของ Mozilla Thunderbird บทความนี้แสดงวิธีอ่านข้อความจากที่เก็บเมลของ Thunderbird:
- เปิดไฟล์ที่เก็บของ Thunderbird ใน FileStream.
- สร้างอินสแตนซ์ของ MboxrdStorageReader คลาสและส่งสตรีมที่กล่าวถึงข้างต้นไปยังคอนสตรัคเตอร์.
- เรียก ReadNextMessage() เพื่อรับข้อความแรก.
- ใช้แบบเดียวกัน ReadNextMessage() ในลูป while เพื่ออ่านข้อความทั้งหมด.
- ปิดสตรีมทั้งหมด.
โค้ดตัวอย่างต่อไปนี้แสดงวิธีอ่านข้อความทั้งหมดจากที่เก็บเมลของ 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 มีเมธอดและคลาสต่อไปนี้:
- MboxMessageInfo คลาสที่มี EntryId property - รับตัวระบุรายการ (entry identifier).
- enumerateMessageInfo() เมธอดของ MboxStorageReader คลาส - เปิดเผยตัววนรอบ (enumerator) ที่รองรับการวนรอบข้อความในที่เก็บ.
- extractMessage(String id) เมธอดของ MboxStorageReader คลาส - ดึงข้อความจาก MBOX.
ตัวอย่างโค้ดด้านล่างแสดงวิธีสกัดข้อความจาก 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 เพื่อเขียนข้อความ:
- เปิดไฟล์ที่เก็บของ Thunderbird ใน FileStream.
- สร้างอินสแตนซ์ของ MboxrdStorageWriter คลาสและส่งสตรีมที่กล่าวถึงข้างต้นไปยังคอนสตรัคเตอร์.
- เตรียมข้อความใหม่โดยใช้ MailMessage คลาส.
- เรียกใช้ WriteMessage() เมธอดและส่งค่าที่กล่าวถึงข้างต้น MailMessage อินสแตนซ์เพื่อเพิ่มข้อความไปยังที่เก็บของ Thunderbird.
- ปิดสตรีมทั้งหมด.
โค้ดตัวอย่างต่อไปนี้จะแสดงวิธีเขียนข้อความไปยังที่เก็บเมลของ 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);