Thunderbird 프로그래밍

MBOX 파일 읽기

Mozilla Thunderbird 는 Mozilla Foundation에서 개발한 오픈 소스 크로스 플랫폼 이메일 클라이언트입니다. 자체 파일 구조에 이메일을 저장하고, 전용 파일 형식으로 메시지 인덱스와 하위 폴더를 관리합니다. Aspose.Email는 Thunderbird 메일 저장소 구조와 연동될 수 있습니다. The MboxrdStorageReader 클래스는 개발자가 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();

메시지 속성 가져오기

MboxMessageInfo 클래스에는 메시지 정보를 검색하기 위한 다음 속성들이 포함되어 있습니다:

  • DateTime Date - 메시지 날짜를 가져옵니다.
  • MailAddress From - 발신자 주소를 가져옵니다.
  • string Subject - 메시지 제목을 가져옵니다.
  • MailAddressCollection To - 메시지 수신자를 포함하는 주소 컬렉션을 가져옵니다.
  • MailAddressCollection CC - CC 수신자를 포함하는 주소 컬렉션을 가져옵니다.
  • MailAddressCollection Bcc - 메시지의 BCC 수신자를 포함하는 주소 컬렉션을 가져옵니다.
MboxStorageReader reader = MboxStorageReader.CreateReader(fileName, new MboxLoadOptions());

foreach (var mboxMessageInfo in reader.EnumerateMessageInfo())
{
    Console.Writeline($"Subject: {mboxMessageInfo.Subject}");
    Console.Writeline($"Date: {mboxMessageInfo.Date}");
    Console.Writeline($"From: {mboxMessageInfo.From}");
    Console.Writeline($"To: {mboxMessageInfo.To}");
    Console.Writeline($"CC: {mboxMessageInfo.CC}");
    Console.Writeline($"Bcc: {mboxMessageInfo.Bcc}");
}

식별자를 사용하여 MBOX에서 메시지 추출

다음은 MboxStorageReader 클래스는 EnumerateMessageInfo() 메서드는 MBOX 파일의 각 메시지를 반복할 수 있게 해줍니다. 이 메서드를 사용하면 전체 저장소를 반복적으로 탐색할 필요 없이 개별 메시지를 추출할 수 있어 성능이 향상되고 처리 시간이 단축됩니다.

다음은 MboxMessageInfo class는 다음을 제공합니다 EntryId 속성은 MBOX 파일 내 각 메시지의 고유 식별자에 접근할 수 있게 해줍니다. 이 식별자는 데이터베이스에 저장하거나 필요 시 특정 메시지를 빠르게 찾고 추출하는 참조로 사용할 수 있습니다.

다음은 ExtractMessage(string id) 메서드가 MboxStorageReader 클래스는 개발자가 고유한 EntryId를 기반으로 메시지를 추출할 수 있도록 합니다. 이를 통해 ExtractMessage(string id) 메서드를 사용하면 저장된 EntryId를 활용해 해당 메시지를 가져오고 추가 작업을 수행할 수 있습니다.

다음 코드 예제는 식별자를 사용하여 MBOX 파일에서 메시지를 추출하는 방법을 보여줍니다.

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

foreach (MboxMessageInfo msgInfo in reader.EnumerateMessageInfo())
{
    MailMessage eml = reader.ExtractMessage(msgInfo.EntryId, new EmlLoadOptions());
}

MBOX에서 메시지를 읽을 때 로드 옵션 구성

다음 기능을 사용하면 메시지 로드 및 처리를 위한 다양한 옵션을 지정할 수 있습니다:

  • MailStorageConverter.MboxMessageOptions 속성 - Mbox 저장소를 구문 분석할 때 이메일 로드 옵션을 가져오거나 설정합니다.

  • MboxrdStorageReader.ReadNextMessage(EmlLoadOptions options) 메서드 - EmlLoadOptions 매개변수는 Mbox 저장소에서 메시지를 읽을 때 옵션을 지정합니다.

var reader = new MboxrdStorageReader(fileName, new MboxLoadOptions());
// Read messages preserving tnef attachments.
var eml = reader.ReadNextMessage(new EmlLoadOptions {PreserveTnefAttachments = true});
MailStorageConverter.MboxMessageOptions(new EmlLoadOptions {PreserveTnefAttachments = true});
// Convert messages from mbox to pst preserving tnef attachments.
var pst = MailStorageConverter.mboxToPst("Input.mbox", "Output.pst");

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();
    }
}

MBOX를 PST로 변환하면서 서명 보존 또는 제거

변환 과정에서 파일의 서명을 제거하려면 다음을 설정하십시오. MboxToPstConversionOptions.RemoveSignature 속성을 true 로 설정합니다.

다음 코드 예제는 이 속성을 활용하는 방법을 보여줍니다:

var pstDataStream = new MemoryStream();
var personalStorage = PersonalStorage.Create(pstDataStream, FileFormatVersion.Unicode);
MailStorageConverter.MboxToPst(new MboxrdStorageReader(new FileStream(fileName, FileMode.Open, FileAccess.Read), new MboxLoadOptions()),
personalStorage,
    "Inbox",
new MboxToPstConversionOptions() { RemoveSignature = true });

MBOX 파일 쓰기

다음은 MboxrdStorageWriter 클래스는 Thunderbird 메일 저장소 파일에 새 메시지를 쓰는 기능을 제공합니다. 메시지를 쓰려면:

  1. FileStream에서 Thunderbird 저장소 파일을 엽니다.
  2. 다음의 인스턴스를 생성합니다. MboxrdStorageWriter 클래스를 사용하고 위의 스트림을 생성자에 전달합니다.
  3. 다음을 사용하여 새 메시지를 준비합니다. MailMessage 클래스.
  4. 다음을 호출합니다. WriteMessage() 메서드와 위의 값을 전달합니다. MailMessage 인스턴스를 사용하여 메시지를 Thunderbird 저장소에 추가합니다.
  5. 모든 스트림을 닫습니다.

다음 코드 스니펫은 Thunderbird 메일 저장소에 메시지를 쓰는 방법을 보여줍니다.

// Open the storage file with FileStream
var stream = new FileStream(dataDir + "ExampleMbox.mbox", FileMode.Open, FileAccess.Write);

// Initialize MboxStorageWriter and pass the above stream to it
var writer = new MboxrdStorageWriter(stream, false);
// Prepare a new message using the MailMessage class
var message = new MailMessage("from@domain.com", "to@domain.com", Guid.NewGuid().ToString(), "added from Aspose.Email");
message.IsDraft = false;
// Add this message to storage
writer.WriteMessage(message);
// Close all related streams
writer.Dispose();
stream.Close();

MBOX 저장소 분할/분할 작업 취소

Aspose.Email은 Mbox 저장소를 더 작은 파트로 분할하는 메서드를 제공하여 대용량 이메일 아카이브를 보다 쉽게 처리할 수 있도록 합니다. 사용 중인 .NET 버전에 따라 사용 가능한 메서드와 매개변수가 달라질 수 있습니다. 아래는 해당 메서드들입니다. MboxStorageReader 클래스는 .NET Framework 4.5 및 .NET Core 버전뿐 아니라 4.5 이하 버전에서도 사용됩니다.

.NET Framework 4.5 및 .NET Core 버전용 멤버:

  • SplitInto(long chunkSize, string outputPath, CancellationToken token) - 지정된 청크 크기에 따라 Mbox 저장소를 작은 부분으로 나눕니다.

  • 매개변수:

    • chunkSize: 각 청크의 대략적인 크기(바이트)입니다.
    • outputPath: 청크가 생성될 폴더 경로입니다.
    • token: 작업 취소가 가능한 CancellationToken입니다.
  • SplitInto(long chunkSize, string outputPath, string partFileNamePrefix, CancellationToken token) - 각 파트에 지정된 파일명 접두사를 사용해 Mbox 저장소를 작은 부분으로 나눕니다.

  • 매개변수:

    • chunkSize: 각 청크의 대략적인 크기(바이트)입니다.
    • outputPath: 청크가 생성될 폴더 경로입니다.
    • partFileNamePrefix: 각 파트 파일 이름에 추가되는 접두사입니다.
    • token: 작업 취소가 가능한 CancellationToken입니다.

.NET Framework 4.5 이하 버전용 멤버:

다음 코드 샘플은 취소 메커니즘을 사용하여 MBOX 파일을 최대 다섯 부분으로 나누는 방법을 보여줍니다.

.NET Framework 4.5 및 .NET Core:

int partCount = 0;

var tokenSource = new CancellationTokenSource();

var mbox = new MboxrdStorageReader(fileName, new MboxLoadOptions { LeaveOpen = false });

// Subscribe to events
mbox.MboxFileCreated += (sender, e) =>
{
    partCount++;
    if (partCount >= 5)
        tokenSource.Cancel();
};

System.Threading.Tasks.Task task = mbox.SplitInto(10000000, outputPath, tokenSource.Token);
task.Wait();

.NET Framework 4.5 이하:

int partCount = 0;
var mbox = new MboxrdStorageReader(fileName, new MboxLoadOptions { LeaveOpen = false });
mbox.SplitInto(10000000, outputPath);

mbox.MboxFileCreated += (sender, e) =>
{
    partCount++;
    if (partCount >= 5)
        mbox.Cancel();
};