Lập trình với Thunderbird
Đọc tin nhắn từ MBOX
Mozilla Thunderbird là một khách hàng email mã nguồn mở, đa nền tảng, được phát triển bởi Mozilla Foundation. Nó lưu trữ email trong cấu trúc tệp riêng, quản lý chỉ mục tin nhắn và thư mục con qua các định dạng tệp độc quyền. Aspose.Email có thể làm việc với cấu trúc lưu trữ thư của Thunderbird. The MboxrdStorageReader lớp cho phép các nhà phát triển đọc tin nhắn từ tệp lưu trữ thư của Mozilla Thunderbird. Bài viết này chỉ cách đọc các tin nhắn từ bộ lưu trữ email của Thunderbird:
- Mở tệp lưu trữ của Thunderbird trong FileStream.
- Tạo một đối tượng của MboxrdStorageReader lớp và truyền luồng trên vào hàm khởi tạo.
- Gọi ReadNextMessage() để lấy tin nhắn đầu tiên.
- Sử dụng cùng ReadNextMessage() trong vòng lặp while để đọc tất cả các tin nhắn.
- Đóng tất cả các luồng.
Đoạn mã dưới đây cho bạn thấy cách đọc tất cả các tin nhắn từ bộ lưu trữ thư của 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]);
}
}
}
Cấu hình tùy chọn tải khi đọc tin nhắn từ MBOX
API Aspose.Email cho phép các thao tác sau với tin nhắn khi đọc chúng từ tệp MBOX:
Chuyển đổi tin nhắn từ MBOX sang PST giữ nguyên tệp đính kèm 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() thuộc tính - Lấy hoặc đặt các tùy chọn tải email khi phân tích một lưu trữ Mbox.
Đọc tin nhắn giữ nguyên tệp đính kèm 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) phương thức - Tham số EmlLoadOptions chỉ định các tùy chọn khi đọc tin nhắn từ lưu trữ Mbox.
Duyệt tin nhắn giữ nguyên tệp đính kèm 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) phương thức - Chỉ định EmlLoadOptions khi đọc tin nhắn từ lưu trữ Mbox.
Trích xuất tin nhắn từ MBOX theo định danh
Đôi khi cần trích xuất các tin nhắn được chọn theo định danh. Ví dụ, ứng dụng của bạn lưu các định danh trong cơ sở dữ liệu và trích xuất tin nhắn khi cần. Đây là cách hiệu quả để tránh duyệt qua toàn bộ lưu trữ mỗi lần để tìm một tin nhắn cụ thể cần trích xuất. Để triển khai tính năng này cho các tệp MBOX, Aspose.Email cung cấp các phương thức và lớp sau:
- MboxMessageInfo lớp với EntryId thuộc tính - Lấy định danh mục nhập.
- enumerateMessageInfo() phương thức của MboxStorageReader lớp - Tiết lộ trình lặp, cho phép duyệt qua các tin nhắn trong lưu trữ.
- extractMessage(String id) phương thức của MboxStorageReader lớp - Lấy tin nhắn từ MBOX.
Đoạn mã mẫu dưới đây minh họa cách trích xuất tin nhắn từ MBOX theo định danh:
MboxStorageReader reader = MboxStorageReader.createReader("my.mbox", new MboxLoadOptions());
for (MboxMessageInfo msgInfo : reader.enumerateMessageInfo()) {
MailMessage eml = reader.extractMessage(msgInfo.getEntryId(), new EmlLoadOptions());
}
Lưu ý: ID tin nhắn là duy nhất trong tệp lưu trữ. Các ID được tạo bởi Aspose.Email và không thể dùng trong các thư viện hoặc ứng dụng xử lý MBOX của bên thứ ba.
Lọc và tìm kiếm email trong tệp MBOX
Aspose.Email for Java cung cấp khả năng lọc hoặc tìm kiếm tin nhắn trong các tệp MBOX bằng truy vấn. Điều này cho phép chỉ lấy những tin nhắn phù hợp với tiêu chí cụ thể. Nhờ đó, bạn có thể cải thiện hiệu năng và khả năng sử dụng của ứng dụng khi làm việc với các tệp MBOX lớn.
Đoạn mã mẫu dưới đây minh họa cách triển khai tính năng này bằng cách thực hiện các phương thức sau:
-
enumerateMessages(MailQuery query)- trả về một tập hợp có thể lặp lại các đối tượng MailMessage phù hợp với truy vấn đã chỉ định. -
enumerateMessageInfo(MailQuery query)- trả về một tập hợp có thể lặp lại các đối tượng MboxMessageInfo phù hợp với truy vấn đã chỉ định.
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());
}
Truy xuất tin nhắn phân trang từ tệp MBOX
Aspose.Email for Java hỗ trợ truy xuất phân trang các tin nhắn từ tệp MBOX. Tính năng này cho phép xử lý hiệu quả các tệp MBOX lớn bằng cách lấy tin nhắn theo các lô nhỏ, giảm tiêu thụ bộ nhớ và cải thiện hiệu năng.
Đoạn mã mẫu dưới đây minh họa cách triển khai tính năng này bằng cách thực hiện các phương thức sau:
-
enumerateMessages(int startIndex, int count)- truy xuất một số lượng xác định các đối tượng MailMessage bắt đầu từ một chỉ mục cho trước. -
enumerateMessageInfo(int startIndex, int count)- truy xuất một số lượng xác định các đối tượng MboxMessageInfo bắt đầu từ một chỉ mục cho trước.
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());
}
Ghi tin nhắn
Cái MboxrdStorageWriter lớp cung cấp khả năng ghi các tin nhắn mới vào tệp lưu trữ thư của Thunderbird. Để ghi tin nhắn:
- Mở tệp lưu trữ Thunderbird trong FileStream.
- Tạo một đối tượng của MboxrdStorageWriter lớp và truyền luồng trên vào hàm khởi tạo.
- Chuẩn bị một tin nhắn mới bằng cách sử dụng MailMessage lớp.
- Gọi WriteMessage() phương thức và truyền những giá trị ở trên MailMessage đối tượng để thêm tin nhắn vào bộ lưu trữ Thunderbird.
- Đóng tất cả các luồng.
Đoạn mã dưới đây cho bạn thấy cách ghi các tin nhắn vào bộ lưu trữ thư của 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]);
}
}
Lấy tổng số tin nhắn từ tệp MBox
Cái MboxrdStorageReader lớp cung cấp khả năng đọc số lượng mục có trong tệp MBox. Điều này có thể được sử dụng để phát triển các ứng dụng hiển thị tiến độ hoạt động khi xử lý tệp như vậy.
MboxLoadOptions lo = new MboxLoadOptions();
try (MboxrdStorageReader reader = new MboxrdStorageReader("inbox.dat", lo)) {
System.out.println("Total number of messages in Mbox file: " + reader.getTotalItemsCount());
}
Lấy kích thước tin nhắn hiện tại
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);
}
}
Đặt mã hóa văn bản ưu tiên khi tải tệp Mbox
Cái setPreferredTextEncoding(Charset value) phương thức của MboxLoadOptions lớp lấy hoặc đặt mã hóa ưu tiên cho các tin nhắn. Tạo một reader cho tệp Mbox với các tùy chọn tải được chỉ định và các tin nhắn của bạn với nội dung đã mã hóa sẽ được đọc và xử lý đúng cách. Đoạn mã mẫu dưới đây cho thấy cách triển khai tính năng này vào dự án:
MboxLoadOptions lo = new MboxLoadOptions();
lo.setPreferredTextEncoding(Charset.forName("utf-8"));
MboxrdStorageReader reader = new MboxrdStorageReader("sample.mbox", lo);
MailMessage message = reader.readNextMessage();
Chia lưu trữ Mbox thành các phần nhỏ hơn
Aspose.Email cung cấp các thành phần sau được thiết kế để kiểm soát tốt hơn quá trình xử lý lưu trữ Mbox, cho phép bạn chia các tệp lớn thành các phần có thể quản lý và thực hiện các hành động tùy chỉnh trong quá trình xử lý:
- MboxStorageReader.SplitInto(long chunkSize, String outputPath) phương thức - Cho phép bạn chia lưu trữ Mbox thành các phần nhỏ hơn, giúp dễ quản lý và xử lý các tệp Mbox lớn.
MboxStorageReader.SplitInto(long chunkSize, String outputPath, String partFileNamePrefix) Một biến thể của phương thức trước, phiên bản này cho phép bạn chỉ định tiền tố tùy chỉnh cho tên các tệp Mbox đã chia.
MboxStorageReader.setEmlCopyingEventHandler Event Sự kiện này xảy ra trước khi một email được sao chép vào tệp Mbox mới. Bạn có thể tùy chỉnh các hành động trước khi email được xử lý.
MboxStorageReader.setEmlCopiedEventHandler Event Sự kiện này xảy ra sau khi một email được sao chép vào tệp Mbox mới. Bạn có thể thực hiện các hành động xử lý hậu kỳ trên email.
MboxStorageReader.setMboxFileCreatedEventHandler Event Sự kiện này xảy ra khi một tệp Mbox mới được tạo. Bạn có thể xử lý sự kiện này để phản hồi khi tạo tệp.
MboxStorageReader.setMboxFileFilledEventHandler Sự kiện này xảy ra khi một tệp Mbox mới được lấp đầy bằng các email. Bạn có thể phản hồi khi tệp được điền các email.
NewStorageEventHandler(Object sender, NewStorageEventArgs e) Đại diện cho một delegate để xử lý các sự kiện xảy ra sau khi một tệp lưu trữ mới được tạo hoặc được xử lý.
MimeItemCopyEventHandler(Object sender, MimeItemCopyEventArgs e) Đại diện cho một delegate để xử lý các sự kiện liên quan đến việc sao chép các mục Mime, thường được sử dụng trong các kịch bản mà một đối tượng MailMessage được sao chép từ một kho lưu trữ sang kho khác.
NewStorageEventArgs Đại diện cho các đối số được sử dụng trong các sự kiện được kích hoạt sau khi một tệp lưu trữ mới được tạo hoặc sau khi nó được xử lý.
MimeItemCopyEventArgs Đại diện cho các đối số sự kiện liên quan đến việc sao chép một đối tượng MailMessage từ một kho lưu trữ sang kho khác, có thể trước khi sao chép bắt đầu hoặc sau khi hoàn tất.
Đoạn mã mẫu dưới đây trình bày cách tương tác với các tệp Mbox, xử lý các sự kiện liên quan đến các tệp này, và thực hiện các thao tác như chia kho lưu trữ Mbox thành các phần nhỏ hơn đồng thời theo dõi số lượng tin nhắn và số phần.
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);