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 이메일 저장소에서 메시지를 읽는 방법을 보여줍니다:

  1. FileStream에서 Thunderbird 저장소 파일을 엽니다.
  2. 다음의 인스턴스를 생성합니다. MboxrdStorageReader 클래스를 사용하고 위의 스트림을 생성자에 전달합니다.
  3. 호출하십시오 ReadNextMessage() 첫 번째 메시지를 가져오기 위해.
  4. 같은 것을 사용하십시오 ReadNextMessage() while 루프에서 모든 메시지를 읽습니다.
  5. 모든 스트림을 닫습니다.

다음 코드 스니펫은 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 클래스:

아래 코드 샘플은 시작 인덱스와 배치 크기를 정의하여 메일 아카이브에서 특정 범위의 메시지를 읽는 방법을 보여줍니다. 예제에서는 해당 메서드가 인덱스 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();
    }
}