서버에서 메시지 작업
사서함 정보 가져오기
GetMailBoxSize() 및 GetMailBoxInfo() 메서드를 사용하여 메시지 수와 사서함 크기와 같은 사서함 정보를 얻을 수 있습니다.
- GetMailBoxSize() 메서드는 사서함의 크기를 바이트 단위로 반환합니다.
- GetMailBoxInfo() 메서드는 Pop3MailBoxInfo 유형의 객체를 반환합니다.
MessageCount 속성을 사용하여 메시지 수를, OccupiedSize 속성을 사용하여 크기를 가져올 수도 있습니다. 다음 샘플 코드는 사서함에 대한 정보를 얻는 방법을 보여줍니다. 다음을 수행하는 방법을 보여줍니다:
- 다음을 생성합니다 Pop3Client.
- POP3 서버에 연결합니다.
- 사서함의 크기를 가져옵니다.
- 사서함 정보를 가져옵니다.
- 사서함의 메시지 수를 가져옵니다.
- 사용 중인 크기를 가져옵니다.
사서함 내 이메일 수 가져오기
다음 코드 스니펫은 사서함에서 이메일 메시지 수를 계산하는 방법을 보여줍니다.
Aspose.Email은 개발자가 이메일을 다양한 방식으로 작업할 수 있도록 합니다. 예를 들어, 이메일을 다운로드할지 여부를 결정하기 전에 헤더 정보를 가져올 수 있습니다. 또는 서버에서 이메일을 가져와 파싱하지 않고 저장(빠르게)하거나 파싱한 후 저장(느리게)할 수 있습니다. 이 문서는 이메일을 검색하고 변환하는 방법을 보여줍니다.
이메일 헤더 정보 검색
이메일 헤더는 전체 이메일을 가져올지 여부를 판단하는 데 사용할 수 있는 정보를 제공합니다. 일반적으로 헤더 정보에는 발신자, 제목, 수신 날짜 등이 포함됩니다(이메일 헤더에 대한 자세한 내용은 ‘Customizing Email Headers’에 나와 있습니다. 해당 주제는 SMTP를 통한 이메일 전송에 대해 다루지만, POP3 이메일에서도 헤더 내용은 동일하게 유효합니다). 다음 예제는 메시지의 시퀀스 번호를 사용하여 POP3 서버에서 이메일 헤더를 가져오는 방법을 보여줍니다.
이메일 메시지 검색
Aspose.Email.Pop3 클래스 구성 요소는 POP3 서버에서 이메일 메시지를 가져와 MailMessage 컴포넌트를 활용해 MailMessage 인스턴스로 파싱하는 기능을 제공합니다. MailMessage 클래스는 이메일 콘텐츠를 조작하기 위한 여러 속성과 메서드를 포함합니다. Pop3Client 클래스의 FetchMessage 함수를 사용하면 POP3 서버에서 직접 MailMessage 인스턴스를 얻을 수 있습니다. 다음 코드 스니펫은 POP3 서버에서 전체 이메일 메시지를 가져오는 방법을 보여줍니다.
고유 ID를 사용한 메시지 요약 정보 가져오기
API의 POP3 클라이언트를 사용하면 메시지의 고유 ID를 이용해 서버에서 메시지 요약 정보를 가져올 수 있습니다. 이를 통해 전체 메시지를 먼저 가져오지 않고도 메시지의 간략 정보를 빠르게 확인할 수 있습니다. 다음 코드 스니펫은 메시지 요약 정보를 가져오는 방법을 보여줍니다.
멀티 연결을 사용한 메시지 목록
부하가 큰 작업을 위해 Aspose.Email은 ‘use_multi_connection’ 속성을 제공합니다: Pop3Client 클래스는 이메일을 가져오는 동안 여러 연결을 사용할 수 있게 합니다. 하지만 이 모드가 반드시 성능 향상으로 이어지는 것은 아닙니다. 다음 코드 스니펫은 POP3 서버에 연결하고, 최대 5개의 동시 연결을 허용하도록 클라이언트를 구성하고, 다중 연결 모드를 활성화하여 서버에 존재하는 메시지 정보를 가져오는 방법을 보여줍니다:
import aspose.email as ae
client = ae.clients.pop3.Pop3Client("host", 995, "username", "password", ae.clients.SecurityOptions.AUTO)
client.connections_quantity = 5
client.use_multi_connection = ae.clients.MultiConnectionMode.ENABLE
message_info_coll = client.list_messages()
서버에서 메시지를 가져와 디스크에 저장
파싱 없이 메시지를 디스크에 저장
POP3 서버에서 이메일 메시지를 파싱하지 않고 다운로드하려면 Pop3Client 클래스의 SaveMessage 함수를 사용하십시오. SaveMessage 함수는 이메일 메시지를 파싱하지 않으므로 FetchMessage 함수보다 빠릅니다. 다음 코드 스니펫은 시퀀스 번호(예: 1번)를 사용해 메시지를 저장하는 방법을 보여줍니다. SaveMessage 메서드는 메시지를 파싱하지 않고 원본 EML 형식으로 저장합니다.
저장하기 전에 메시지 파싱
생성된 클라이언트 객체의 ‘fetch_message’ 메서드를 사용합니다. Pop3Client 클래스는 특정 시퀀스 번호를 가진 메시지를 가져오는 기능을 제공합니다. 아래 샘플 코드는 특정 메시지를 가져와 그 제목을 파일 이름으로 사용해 저장하는 방법을 보여줍니다. 이는 msg 객체의 ‘save’ 메서드를 호출하여 수행됩니다.
import aspose.email as ae
client = ae.clients.pop3.Pop3Client("host", 995, "username", "password", ae.clients.SecurityOptions.AUTO)
# Fetch the message by its sequence number and Save the message using its subject as the file name
msg = client.fetch_message(1)
msg.save("first-message_out.eml", ae.SaveOptions.default_eml)
발신자, 수신자 또는 날짜 기반 메시지 필터링
Pop3Client 클래스는 POP3 서버에 연결하는 방법에 대해 설명된 바와 같이 list_messages() 메서드를 제공하여 사서함의 모든 메시지를 가져옵니다. 특정 조건에 맞는 메시지만 가져오려면 MailQuery를 인수로 받는 오버로드된 ListMessages() 메서드를 사용하십시오. MailQuery 클래스는 날짜, 제목, 발신자, 수신자 등 다양한 조건을 지정할 수 있는 속성을 제공합니다. MailQueryBuilder 클래스를 사용해 검색 표현식을 빌드합니다. 먼저 모든 조건과 제약을 설정한 뒤 MailQueryBuilder가 만든 쿼리로 MailQuery를 채웁니다. Pop3Client는 MailQuery 객체를 사용해 서버에서 필터링된 정보를 추출합니다. 이 문서는 사서함에서 이메일을 필터링하는 방법을 보여줍니다. 첫 번째 예제는 날짜와 제목을 기준으로 메시지를 필터링하는 방법을 설명합니다. 또한 다른 기준으로 필터링하는 방법과 복잡한 쿼리를 효율적으로 구성하는 방법을 보여줍니다. 또한 특정 이메일을 사서함에서 가져오기 위해 날짜와 시간 필터를 적용하는 방법도 보여줍니다. 추가로 대소문자를 구분하는 필터링 적용 방법도 포함됩니다.
사서함에서 메시지 필터링
사서함에서 메시지를 필터링하려면:
- POP3 서버에 연결하고 로그인합니다.
- MailQuery 인스턴스를 만들고 원하는 속성을 설정합니다.
- Pop3Client.list_messages(MailQuery query) 메서드를 호출하고 매개변수에 MailQuery를 전달하여 필터링된 메시지만 가져옵니다.
다음 코드 스니펫은 POP3 사서함에 연결하고 오늘 도착한 메시지 중 제목에 "newsletter"가 포함된 메시지를 가져오는 방법을 보여줍니다.
특정 기준에 부합하는 메시지 가져오기
Aspose.Email은 이메일 메시지를 쿼리하고 필터링하기 위한 복잡한 검색 기준을 구축할 수 있게 합니다. 이를 위해 다음을 사용하십시오: MailQueryBuilder 클래스와 그 속성입니다. 가져오기 기준은 다음과 같습니다:
- 전송 날짜로 메시지를 가져옵니다.
- 범위 내에서 메시지를 가져옵니다.
- 특정 발신인에서 메시지를 가져옵니다.
- 특정 도메인에서 메시지를 가져옵니다.
- 특정 수신인에게 메시지를 가져옵니다.
오늘 날짜
전송 날짜로 메시지를 가져오려면 아래 코드 예시와 같이 ‘internal_date’ 속성을 사용하십시오:
import aspose.email as ae
from datetime import datetime
builder = ae.tools.search.MailQueryBuilder()
builder.internal_date.on(datetime.now())
날짜 범위
날짜 범위 내에서 메시지를 가져오려면 동일한 ‘internal_date’ 속성을 사용해 아래 코드 예시와 같이 날짜 범위를 지정하십시오:
import aspose.email as ae
from datetime import datetime, timedelta
builder = ae.tools.search.MailQueryBuilder()
# Emails that arrived in last 7 days
builder.internal_date.before(datetime.now())
builder.internal_date.since(datetime.today() - timedelta(days=7))
특정 발신자
특정 발신인으로부터 메시지를 가져오려면 아래 코드 예시와 같이 ‘from_address’ 속성을 사용하십시오:
import aspose.email as ae
builder = ae.tools.search.MailQueryBuilder()
builder.from_address.contains("saqib.razzaq@127.0.0.1")
특정 도메인
특정 도메인에서 메시지를 가져오려면 아래 코드 예시와 같이 ‘from_address’ 속성을 사용하십시오:
import aspose.email as ae
builder = ae.tools.search.MailQueryBuilder()
builder.from_address.contains("SpecificHost.com")
특정 수신인
특정 수신인에게 메시지를 가져오려면 아래 코드 예시와 같이 ’to’ 속성을 사용하십시오:
import aspose.email as ae
builder = ae.tools.search.MailQueryBuilder()
builder.to.contains("recipient")
복잡한 쿼리 구축
때때로 하나 이상의 쿼리를 만족해야 할 필요가 있습니다. Aspose.Email은 여러 문장에서 쿼리를 결합함으로써 이를 가능하게 합니다. 다음을 생성하십시오: MailQueryBuilder 객체와 그 속성을 사용해 특정 쿼리를 작성합니다.
AND로 쿼리 결합
다음 코드 스니펫은 AND로 쿼리를 결합하는 방법을 보여줍니다.
import aspose.email as ae
from datetime import datetime, timedelta
builder = ae.tools.search.MailQueryBuilder()
builder.internal_date.before(datetime.now())
builder.internal_date.since(datetime.today() - timedelta(days=7))
builder.from_address.contains("SpecificHost.com")
OR로 쿼리 결합
다음 코드 스니펫은 OR 연산자를 사용해 쿼리를 결합하는 방법을 보여줍니다.
import aspose.email as ae
builder = ae.tools.search.MailQueryBuilder()
builder.either(builder.subject.contains("test"), builder.from_address.contains("noreply@host.com"))
대소문자 구분 필터 적용
API는 또한 대소문자를 구분하는 기준에 따라 사서함에서 이메일을 필터링할 수 있는 기능을 제공합니다. 다음 메서드들은 StringComparisonField 클래스는 대소문자 구분 플래그를 지정하여 이메일을 검색할 수 있는 기능을 제공합니다.
메서드 Aspose.Email.StringComparisonField.contains(value, ignore_case) 메서드 Aspose.Email.StringComparisonField.equals(value, ignore_case) 메서드 Aspose.Email.StringComparisonField.not_contains(value, ignore_case) 메서드 Aspose.Email.StringComparisonField.not_equals(value, ignore_case)
다음 코드 스니펫은 이 기능을 프로젝트에 구현하는 방법을 보여줍니다:
import aspose.email as ae
builder = ae.tools.search.MailQueryBuilder()
builder.from_address.contains("noreply@host.com", True)