MBOX 파일 읽기
Aspose.Email 읽기 기능
Mozilla Thunderbird Mozilla Foundation에서 개발한 오픈소스 크로스 플랫폼 이메일 클라이언트입니다. 자체 파일 구조에 이메일을 저장하며, 메시지 인덱스와 하위 폴더를 독자적인 파일 형식으로 관리합니다. Thunderbird는 각 이메일 폴더(예: Inbox, Sent, Trash)마다 하나의 .mbox 파일을 생성하고, 이 파일들을 사용자의 프로필 디렉터리에 저장합니다. 각 파일은 해당 폴더의 모든 메시지를 연결된 형태로 포함합니다.
Aspose.Email for .NET은 Thunderbird .mbox 파일에서 메시지를 읽기 위한 API를 제공하며, 사용 방법은 MboxrdStorageReader 개발자가 할 수 있도록 하는 클래스:
- 메시지를 순차적으로, 하나씩 열고 읽습니다
- 전체 내용을 로드하지 않고 Subject, From, To, Date 등 메타데이터를 검색합니다
- 고유 식별자(EntryId)를 사용하여 개별 메시지를 추출합니다
- 인코딩, TNEF 첨부 파일 및 서식 유지
- 대용량 아카이브에서 성능을 향상시키기 위해 파일을 비동기적으로 읽기
MBOX 파일을 동기적으로 읽기
Mozilla Thunderbird 메일 저장 파일에서 메시지를 읽습니다. 이 문서는 Thunderbird 이메일 저장소에서 메시지를 읽는 방법을 보여줍니다:
- FileStream에서 Thunderbird 저장소 파일을 엽니다.
- 다음의 인스턴스를 생성합니다. MboxrdStorageReader 클래스를 사용하고 위의 스트림을 생성자에 전달합니다.
- 호출하십시오 ReadNextMessage() 첫 번째 메시지를 가져오기 위해.
- 같은 것을 사용하십시오 ReadNextMessage() while 루프에서 모든 메시지를 읽습니다.
- 모든 스트림을 닫습니다.
다음 코드 스니펫은 Thunderbird 메일 저장소에서 모든 메시지를 읽는 방법을 보여줍니다.
// The path to the File directory.
var dataDir = RunExamples.GetDataDir_Thunderbird();
// Open the storage file with FileStream
var stream = new FileStream(dataDir + "ExampleMbox.mbox", FileMode.Open, FileAccess.Read);
// Create an instance of the MboxrdStorageReader class and pass the stream
var reader = new MboxrdStorageReader(stream, false);
// Start reading messages
var message = reader.ReadNextMessage();
// Read all messages in a loop
while (message != null)
{
// Manipulate message - show contents
Console.WriteLine("Subject: " + message.Subject);
// Save this message in EML or MSG format
message.Save(message.Subject + ".eml", SaveOptions.DefaultEml);
message.Save(message.Subject + ".msg", SaveOptions.DefaultMsgUnicode);
// Get the next message
message = reader.ReadNextMessage();
}
// Close the streams
reader.Dispose();
stream.Close();
MBOX 파일을 비동기적으로 읽기
대용량 MBOX 파일을 처리할 때 성능 및 반응성을 향상시키기 위해 Aspose.Email for .NET은 다음을 통해 비동기 MBOX 읽기를 제공합니다: CreateReaderAsync 이 메서드. 이 기능은 대용량 이메일 아카이브를 처리하거나 백그라운드 스레드나 웹 서비스에서 I/O 중심 작업을 수행하는 애플리케이션에 특히 유용합니다. 아래 코드 샘플은 Aspose.Email 스토리지 리더를 사용하여 MBOX 파일에서 이메일 메시지를 비동기적으로 읽는 방법을 보여줍니다:
string mboxFilePath = "emails.mbox";
// Create a reader for the MBOX file asynchronously
using (var reader = await MboxrdStorageReader.CreateReaderAsync(mboxFilePath, CancellationToken.None))
{
Console.WriteLine("MBOX reader initialized.");
// Read messages from the MBOX file
while (reader.ReadNextMessage() is var message && message != null)
{
Console.WriteLine($"Subject: {message.Subject}");
}
}
페이지 매김을 지원하는 배치 단위 이메일 메시지 읽기
메일함 파일에 저장된 메시지에 대해 페이지화된 접근을 얻습니다. 이 기능은 메시지를 작은 부분으로 가져와 대용량 이메일 아카이브를 보다 효율적으로 처리할 수 있게 하여 성능을 향상하고 메모리 부하를 감소시킵니다. 다음 메서드를 사용하십시오: MboxStorageReader 클래스:
-
EnumerateMessages(int startIndex, int count) - 지정된 인덱스부터 시작하여 주어진 개수만큼 제한된 MailMessage 인스턴스의 열거 가능한 컬렉션을 반환합니다.
-
EnumerateMessageInfo(int startIndex, int count) - 메타데이터만 포함한 MboxMessageInfo 객체의 열거 가능한 컬렉션을 반환하며, 인덱스와 개수에 따라 페이지화됩니다.
아래 코드 샘플은 시작 인덱스와 배치 크기를 정의하여 메일 아카이브에서 특정 범위의 메시지를 읽는 방법을 보여줍니다. 예제에서는 해당 메서드가 인덱스 0부터 시작하여 10개의 메시지를 가져옵니다.
using Aspose.Email.Storage.Mbox;
using Aspose.Email;
var reader = MboxStorageReader.CreateReader("input.mbox", new MboxLoadOptions());
int startIndex = 0;
int count = 10; // Retrieve messages in batches of 10
foreach (var message in reader.EnumerateMessages(startIndex, count))
{
Console.WriteLine("Subject: " + message.Subject);
}
MBOX 파일을 읽을 때 선호 텍스트 인코딩 설정
인코딩 옵션은 다음에 사용할 수 있습니다. MboxrdStorageReader 클래스. 이는 mbox 파일을 로드하기 위한 추가 옵션을 제공하며, 인코딩된 내용이 있는 메시지가 올바르게 읽히고 처리되도록 보장합니다. 다음 코드 조각은 필요에 맞는 텍스트 인코딩을 설정하는 방법을 보여줍니다:
var reader = new MboxrdStorageReader("sample.mbox", new MboxLoadOptions() { PreferredTextEncoding = Encoding.UTF8});
var message = reader.ReadNextMessage();
MBOX 파일의 총 메시지 수 가져오기
다음은 MboxrdStorageReader 클래스는 MBox 파일에 존재하는 항목 수를 읽을 수 있는 기능을 제공합니다. 이는 파일을 처리하는 동안 작업 진행 상황을 표시하는 애플리케이션 개발에 사용할 수 있습니다.
// The path to the File directory.
var dataDir = RunExamples.GetDataDir_Thunderbird();
using (var stream = new FileStream(dataDir + "ExampleMbox.mbox", FileMode.Open, FileAccess.Read))
using (var reader = new MboxrdStorageReader(stream, false))
{
Console.WriteLine("Total number of messages in Mbox file: " + reader.GetTotalItemsCount());
}
현재 메시지 크기 가져오기
using (var stream = new FileStream(dataDir + "ExampleMbox.mbox", FileMode.Open, FileAccess.Read))
using (var reader = new MboxrdStorageReader(stream, false))
{
MailMessage msg;
while ((msg = reader.ReadNextMessage()) != null)
{
long currentDataSize = reader.CurrentDataSize;
msg.Dispose();
}
}