Python에서 IMAP 이메일 검색 및 필터링

메일함의 모든 메시지를 가져오려면 Aspose.Email은 ’list_messages’ 메서드를 제공합니다 ImapClient 클래스. 특정 조건을 만족하는 메시지만 가져오려면, 해당 조건을 받아들이는 오버로드된 ’list_messages’ 메서드를 사용할 수 있습니다. MailQuery 을 인수로 사용합니다. MailQuery 클래스는 날짜, 제목, 발신자, 수신자와 같은 다양한 조건을 정의할 수 있는 여러 속성을 제공합니다.

첫 번째 코드 샘플은 날짜와 제목을 모두 기준으로 메시지를 필터링하는 방법을 보여줍니다. 추가 예제에서는 다른 기준으로 필터링하고 보다 복잡한 쿼리를 구성하는 방법을 소개합니다. 또한 API는 정확한 필터링을 위해 대소문자 구분 검색 기준을 지원하며, 메일함에서 메시지를 필터링할 때 검색 문자열의 인코딩을 지정할 수 있습니다.

IMAP 서버에서 메시지 필터링 및 가져오기

간단한 IMAP 쿼리 만들기

다음 코드 스니펫을 사용하여 IMAP 메일함에 연결하고 오늘 도착했으며 제목에 "newsletter" 단어가 포함된 메시지를 가져옵니다.

  1. 사용자 이름과 비밀번호를 사용해 포트 993으로 IMAP 서버에 연결합니다.
  2. "Inbox" 폴더를 선택하여 수신 이메일을 작업합니다.
  3. 다음의 인스턴스를 생성합니다 ImapQueryBuilder 검색 쿼리를 구성합니다.
  4. 검색 기준을 지정합니다. 예를 들어, 이메일 제목에 "Newsletter"가 포함되고 내부 날짜가 오늘 날짜와 일치하도록 합니다.
  5. 빌더에서 검색 쿼리를 가져와 생성합니다.
  6. 쿼리를 사용하여 기준에 맞는 메시지를 나열합니다.
  7. 검색 기준과 일치하는 메시지 총수를 출력합니다.

복합 검색 기준 구축

Aspose.Email은 전송 날짜, 범위 내, 특정 발신자, 특정 도메인 또는 특정 수신자와 같은 이메일 메시지를 쿼리하고 필터링하기 위한 복합 검색 기준을 구축할 수 있게 합니다. 이를 위해 MailQueryBuilder 클래스와 그 속성들. 아래 코드 샘플은 특정 기준으로 메시지를 가져오는 방법을 보여줍니다.

오늘 날짜별 이메일 필터링

전송 날짜별로 메시지를 가져오려면, 해당 클래스의 ‘internal_date’ 속성을 사용하십시오 MailQueryBuilder 클래스는 아래 코드 샘플에 표시된 바와 같습니다:

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’ 속성을 사용하십시오 MailQueryBuilder 클래스는 아래 코드 샘플에 표시된 바와 같습니다:

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")

내부 날짜별 메시지 필터링

"internal date" 및 "subject contains"와 같은 지정된 조건에 대한 쿼리를 구축합니다. "internal date"는 이메일이 수신되었거나 이메일 서버에 추가된 날짜와 시간을 의미하며, 해당 클래스의 ‘internal_date’ 속성을 사용하여 설정할 수 있습니다. ImapQueryBuilder 클래스. 아래 코드 샘플은 제목 및 날짜 기준에 따라 받은 편지함에서 특정 이메일을 가져오는 방법을 보여줍니다:

import aspose.email as ae
from datetime import datetime

client = ae.clients.imap.ImapClient("imap.domain.com", 993, "user@domain.com", "pwd")
client.select_folder("Inbox")

# Set conditions, Subject contains "Newsletter", Emails that arrived today
builder = ae.clients.imap.ImapQueryBuilder()
builder.subject.contains("Newsletter")
builder.internal_date.on(datetime.now())

# Build the query and Get list of messages
query = builder.get_query()
messages = client.list_messages(query)
for info in messages:
    print(f"Internal Date: {info.internal_date}")

사용자 정의 키워드 플래그별 메시지 필터링

특정 사용자 정의 키워드 플래그인 "custom1" 및 "custom2"가 포함된 이메일을 검색하기 위한 IMAP 메일함 쿼리를 생성합니다. 쿼리를 구축하려면 다음을 사용하십시오 ImapQueryBuilder IMAP 서버에서 이메일을 검색할 때 필터링하는 클래스.

시작하려면 쿼리 빌더의 인스턴스를 생성하십시오. 다음을 사용하여 has_flags 메서드에 조건을 추가하여 지정된 IMAP 키워드 플래그를 포함하는 이메일만 포함하도록 합니다. IMAP의 사용자 정의 키워드(사용자 정의 플래그)는 사용자가 다양한 목적(예: 상태 표시)으로 이메일에 태그를 붙이거나 분류할 수 있게 합니다.

다음 코드 스니펫은 사용자 정의 키워드 플래그를 기반으로 이메일을 검색하는 쿼리를 만드는 방법을 보여줍니다:


builder = ae.clients.imap.ImapQueryBuilder()
builder.has_flags(ae.clients.imap.ImapMessageFlags.keyword("custom1"))
builder.has_flags(ae.clients.imap.ImapMessageFlags.keyword("custom2"))

복잡한 쿼리 구축

때때로 하나 이상의 쿼리를 만족해야 할 필요가 있습니다. 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 연산자를 사용해 쿼리를 결합하는 방법을 보여줍니다.


builder.either(builder.subject.contains("test"), builder.from_address.contains("noreply@host.com"))

대소문자 구분 필터 적용

API는 또한 대소문자를 구분하는 기준에 따라 사서함에서 이메일을 필터링할 수 있는 기능을 제공합니다. 다음 메서드들은 StringComparisonField 클래스는 대소문자 구분 플래그를 지정하여 이메일을 검색할 수 있는 기능을 제공합니다.

  • StringComparisonField.contains(value, ignore_case)
  • StringComparisonField.equals(value, ignore_case)
  • StringComparisonField.not_contains(value, ignore_case)
  • StringComparisonField.not_equals(value, ignore_case)

다음 코드 스니펫은 이 기능을 프로젝트에 구현하는 방법을 보여줍니다:


builder = ae.tools.search.MailQueryBuilder()
builder.from_address.contains("noreply@host.com", True)

맞춤 검색 쿼리 수행

첨부 파일이 있는 이메일이라는 맞춤 Gmail 검색 기준에 따라 IMAP 메일함을 필터링하는 검색 쿼리를 생성합니다.

다음의 인스턴스를 생성하여 시작합니다 ImapQueryBuilder, 이는 복잡한 IMAP 검색 쿼리를 구축하는 데 도움이 됩니다. 다음을 사용하십시오 custom_search 쿼리 빌더에 Gmail 전용 검색 문자열을 추가하는 메서드.

검색 문자열 X-GM-RAW "has:attachment"은 Gmail 확장 IMAP 속성 X-GM-RAW를 활용하여 IMAP 쿼리 내에서 Gmail의 강력한 웹메일 검색 구문을 사용할 수 있게 합니다. 여기서 has:attachment 연산자는 첨부 파일이 포함된 모든 이메일을 반환합니다.

다음 코드 스니펫은 첨부 파일이 있는 모든 메시지를 가져오기 위해 이메일을 필터링하는 방법을 보여줍니다:


builder = ae.clients.imap.ImapQueryBuilder()
builder.custom_search("X-GM-RAW \"has:attachment\"")

mailQuery = builder.get_query()

이 메서드는 고급 Gmail 전용 필터링을 통해 대상 이메일을 가져올 수 있게 합니다.