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

//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에서 메시지를 읽을 때 로드 옵션 구성

Aspose.Email API는 MBOX 파일에서 메시지를 읽을 때 다음과 같은 조작을 허용합니다:

TNEF 첨부 파일을 보존하면서 MBOX에서 PST로 메시지 변환

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) 메서드 - 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) 메서드 - Mbox 저장소에서 메시지를 읽을 때 EmlLoadOptions를 지정합니다.

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

때때로 식별자를 사용하여 선택된 메시지를 추출해야 할 경우가 있습니다. 예를 들어, 애플리케이션이 데이터베이스에 식별자를 저장하고 필요할 때 메시지를 추출합니다. 이는 매번 전체 저장소를 탐색하여 특정 메시지를 찾는 비효율성을 피하는 효율적인 방법입니다. MBOX 파일에 대해 이 기능을 구현하려면 Aspose.Email가 다음 메서드와 클래스를 제공합니다:

아래 코드 샘플은 식별자를 사용하여 MBOX에서 메시지를 추출하는 방법을 보여줍니다:

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

for (MboxMessageInfo msgInfo : reader.enumerateMessageInfo()) {
    MailMessage eml = reader.extractMessage(msgInfo.getEntryId(), new EmlLoadOptions());
}

참고: 메시지 ID는 저장소 파일 내에서 고유합니다. ID는 Aspose.Email에 의해 생성되며 다른 서드파티 MBOX 처리 라이브러리나 앱에서는 사용할 수 없습니다.

MBOX 파일에서 이메일 필터링 및 검색

Aspose.Email for 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 for 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 메일 저장소 파일에 새 메시지를 쓸 수 있는 기능을 제공합니다. 메시지를 쓰려면:

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

다음 코드 스니펫은 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, String partFileNamePrefix) 이전 메서드의 변형으로, 이 메서드는 분할된 Mbox 파일 이름에 대한 사용자 정의 접두사를 지정할 수도 있습니다.

MboxStorageReader.setEmlCopyingEventHandler 이벤트 이 이벤트는 이메일이 새로운 Mbox 파일로 복사되기 전에 발생합니다. 이메일이 처리되기 전에 동작을 맞춤화할 수 있습니다.

MboxStorageReader.setEmlCopiedEventHandler 이벤트 이 이벤트는 이메일이 새로운 Mbox 파일에 복사된 후 발생합니다. 이메일에 대한 후처리 작업을 수행할 수 있습니다.

MboxStorageReader.setMboxFileCreatedEventHandler 이벤트 이 이벤트는 새로운 Mbox 파일이 생성될 때 발생합니다. 파일 생성에 반응하기 위해 이 이벤트를 처리할 수 있습니다.

MboxStorageReader.setMboxFileFilledEventHandler 이벤트는 새로운 Mbox 파일에 이메일이 채워질 때 발생합니다. 파일이 이메일로 채워지는 상황에 대응할 수 있습니다.

NewStorageEventHandler(Object sender, NewStorageEventArgs e)는 새로운 스토리지 파일이 생성되거나 처리된 후에 발생하는 이벤트를 처리하기 위한 대리자를 나타냅니다.

MimeItemCopyEventHandler(Object sender, MimeItemCopyEventArgs e)는 Mime 항목 복사와 관련된 이벤트를 처리하기 위한 대리자를 나타내며, 일반적으로 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);