imaplib — IMAP4 프로토콜 클라이언트
imaplib — IMAP4 프로토콜 클라이언트
imaplib 모듈은 IMAP4(Internet Message Access Protocol, version 4) 프로토콜 클라이언트를 정의해요. 이 모듈은 RFC 2060에 기술된 IMAP4rev1 프로토콜을 구현하고, IMAP4rev2(RFC 9051), IDLE(RFC 2177), AUTH=PLAIN(RFC 4616) 및 기타 여러 선택 명령을 지원합니다.
참고: 과도하게 방대한 IMAP4 서버 목록은 클라이언트 자원을 소모할 수 있어요. 이 모듈은 제어권을 클라이언트에 두기 때문에,
list()나search()같은 호출이 끝없이 걸리지 않도록 수신 데이터 크기에 상한을 두는 게 좋습니다.
출처: Python 표준 라이브러리
클래스
IMAP4
class imaplib.IMAP4(host='', port=IMAP4_PORT, timeout=None)
IMAP4 서버와의 연결을 나타내요. 이 클래스는 IMAP4_SSL과 IMAP4_stream의 기반이기도 합니다. host는 서버 호스트 이름이고, port는 기본적으로 IMAP4 포트(143)예요. 연결은 선택적 timeout 초 안에 이뤄져야 합니다.
클라이언트 오류는 IMAP4.error로, 서버 응답 오류는 IMAP4.abort로, 연결이 닫힌 상태에서의 호출은 IMAP4.readonly 같은 하위 클래스를 통해 보고됩니다.
IMAP4_SSL
class imaplib.IMAP4_SSL(host='', port=IMAP4_SSL_PORT, keyfile=None, certfile=None, ssl_context=None, timeout=None)
SSL 연결로 IMAP4 서버와 통신해요. ssl_context가 주어지면 SSL 소켓을 만들 때 그 컨텍스트를 사용합니다. keyfile과 certfile은 레거시 인자입니다.
>>> import imaplib
>>> M = imaplib.IMAP4_SSL('imap.example.com')
IMAP4_stream
class imaplib.IMAP4_stream(command, **kwargs)
IMAP4 서버에 직접 연결하는 대신 미리 열린 셸 명령의 표준 입출력을 통해 통신해요. 예를 들어 command로 ssh imap.example.com 같은 것을 주면, 그 셸이 서버와 대화합니다. SSH 터널링을 쓸 때 유용해요.
주요 메서드
IMAP4.login(user, password)— 서버에 로그인해요. 성공하면OK를 반환합니다.IMAP4.select(mailbox='INBOX', readonly=False)— 사서함을 선택하고 선택된 메일 개수를 반환해요.IMAP4.list(directory='""', pattern='*')— 사서함 이름 목록을 반환해요.IMAP4.fetch(message_set, message_parts)— 메시지의 일부(전체 텍스트, 헤더, 플래그 등)를 가져와요.message_parts는 예를 들어'(RFC822)','(FLAGS)'같은 문자열입니다.IMAP4.search(charset=None, criterion, *...)— 조건에 맞는 메시지 번호 목록을 검색해요.IMAP4.store(message_set, command, flags)— 메시지의 플래그를 변경해요(예:'+FLAGS'로 읽음 표시).IMAP4.copy(message_set, new_mailbox)— 메시지를 다른 사서함으로 복사.IMAP4.expunge()— 삭제 표시된 메시지를 영구 제거.IMAP4.logout()— 서버 연결을 정리하고 닫아요.
각 IMAAP 명령 메서드는 서버 응답을 (typ, data) 튜플로 반환하며, typ은 'OK', 'NO', 'BAD' 중 하나예요.
예제
다음은 IMAP 서버에 연결해 받은 편지함의 메시지 ID를 나열하는 간단한 예입니다:
import imaplib
import getpass
M = imaplib.IMAP4_SSL('imap.example.com')
M.login('username', getpass.getpass())
M.select()
typ, data = M.search(None, 'ALL') # search all messages
for num in data[0].split():
typ, msg_data = M.fetch(num, '(RFC822)')
# process msg_data
M.logout()
메일의 제목만 추출하고 싶다면 '(BODY.PEEK[HEADER.FIELDS (SUBJECT)])' 같은 메시지 부품을 써서 헤더만 가져올 수 있어요.
모듈 상수
imaplib.IMAP4_PORT— 기본 IMAP4 포트143.imaplib.IMAP4_SSL_PORT— 기본 IMAP4 over SSL 포트993.imaplib.IMAP4.imaplib._MAXLINE등 내부 상수도 존재합니다.
더 알아보기
- Python 표준 라이브러리의
poplib모듈 — POP3 클라이언트 - Python 표준 라이브러리의
smtplib모듈 — SMTP 클라이언트 - RFC 2060 / RFC 9051 — IMAP4 프로토콜 명세
- Python 공식 문서: imaplib