imaplib — IMAP4 프로토콜 클라이언트
imaplib — IMAP4 프로토콜 클라이언트
imaplib 모듈은 IMAP4 서버에 대한 연결을 캡슐화하고 RFC 3501에 정의된 IMAP4rev1 클라이언트 프로토콜의 큰 부분을 구현하는 세 클래스, IMAP4, IMAP4_SSL, IMAP4_stream을 정의해요. 이 모듈은 IMAP4(RFC 1730) 서버와 하위 호환되지만, STATUS 명령이 IMAP4에서 지원되지 않는다는 점을 유의하세요. 이 모듈은 WASI에서 동작하지 않거나 사용할 수 없어요.
본문
클래스
class imaplib.IMAP4(host='', port=IMAP4_PORT, timeout=None) — 실제 IMAP4 프로토콜을 구현해요. host가 지정되지 않으면 ''(로컬 호스트)가 사용되고, port가 생략되면 표준 IMAP4 포트(143)가 사용돼요. 선택적 timeout 파라미터는 연결 시도에 대한 제한 시간(초)을 지정해요. IMAP4 클래스는 with 문을 지원하며, with 문이 종료되면 IMAP4 LOGOUT 명령이 자동으로 발행돼요.
>>> from imaplib import IMAP4
>>> with IMAP4("domain.org") as M:
... M.noop()
...
('OK', [b'Nothing Accomplished. d25if65hy903weo.87'])
IMAP4 클래스의 속성으로 세 가지 예외가 정의돼요:
exception IMAP4.error— 어떤 오류에서도 발생.exception IMAP4.abort— IMAP4 서버 오류가 발생할 때 발생.IMAP4.error의 하위 클래스.exception IMAP4.readonly— 쓰기 가능한 메일박스의 상태가 서버에 의해 변경될 때 발생.IMAP4.error의 하위 클래스.
class imaplib.IMAP4_SSL(host='', port=IMAP4_SSL_PORT, *, ssl_context=None, timeout=None) — SSL 암호화 소켓을 통해 연결하는 IMAP4의 하위 클래스예요. port가 생략되면 표준 IMAP4-over-SSL 포트(993)가 사용돼요. ssl_context는 SSL 구성 옵션, 인증서, 개인 키를 단일 구조에 묶는 ssl.SSLContext 객체예요.
기본 ssl_context로는 연결이 암호화되지만 서버 인증서와 호스트 이름은 검증되지 않아요. 검증하려면 ssl.create_default_context()로 만든 콘텍스트를 전달해요.
class imaplib.IMAP4_stream(command) — command를 subprocess.Popen()에 전달해 만든 stdin/stdout 파일 디스크립터에 연결하는 IMAP4의 하위 클래스예요.
유틸리티 함수
imaplib.Internaldate2tuple(resp)— IMAP4INTERNALDATE응답을 포함하는 bytes 유사 객체를 파싱하고 해당 로컬 시간을 반환해요.time.struct_time튜플 또는 형식이 잘못되면None.imaplib.Int2AP(num)—[A .. P]집합의 문자를 사용해 정수를 bytes 표현으로 변환해요.imaplib.ParseFlags(resp)— IMAP4FLAGS응답을 포함하는 bytes 유사 객체를bytes로 개별 플래그의 튜플로 변환해요.imaplib.Time2Internaldate(date_time)—date_time을 IMAP4INTERNALDATE표현으로 변환해요. 반환값은"DD-Mmm-YYYY HH:MM:SS +HHMM"형태(큰따옴표 포함)의 문자열이에요.
IMAP4 객체
모든 IMAP4rev1 명령은 대문자 또는 소문자로 된 같은 이름의 메서드로 표현돼요. 모든 명령 인자는 AUTHENTICATE와 APPEND의 마지막 인자를 제외하고 문자열로 변환돼요. 대부분의 명령은 (type, [data, ...]) 튜플을 반환하며, type은 보통 'OK' 또는 'NO'이에요.
message_set 옵션은 단일 메시지 번호('1'), 메시지 번호 범위('2:4'), 또는 쉼표로 구분된 비연속 범위 그룹('1:3,6:9')을 지정하는 문자열이에요.
주요 메서드:
IMAP4.append(mailbox, flags, date_time, message) — 명명된 메일박스에 메시지를 추가해요. IMAP4.authenticate(mechanism, authobject) — 인증 명령. IMAP4.check() — 서버에서 메일박스를 체크포인트. IMAP4.close() — 현재 선택된 메일박스 닫기. IMAP4.copy(message_set, new_mailbox) — 메시지를 새 메일박스 끝으로 복사. IMAP4.create(mailbox) — 새 메일박스 생성. IMAP4.delete(mailbox) — 메일박스 삭제. IMAP4.expunge() — 선택된 메일박스에서 삭제된 항목을 영구적으로 제거. IMAP4.fetch(message_set, message_parts) — 메시지 (부분) 가져오기. IMAP4.idle(duration=None) — RFC 2177의 IMAP4 IDLE 명령을 구현하는 Idler를 반환. IMAP4.list(directory='', pattern='*') — 패턴과 일치하는 메일박스 이름 나열. IMAP4.login(user, password) — 일반 텍스트 비밀번호로 클라이언트 식별. IMAP4.logout() — 서버 연결 종료. IMAP4.noop() — 서버에 NOOP 전송. IMAP4.open(host, port, timeout=None) — host의 port에 소켓을 연다. IMAP4.partial(message_num, message_part, start, length) — 메시지의 잘린 부분 가져오기. IMAP4.recent() — 서버에 업데이트 요청. IMAP4.rename(oldmailbox, newmailbox) — 메일박스 이름 변경. IMAP4.response(code) — 수신된 응답 코드의 데이터 반환. IMAP4.search(charset, criterion[, ...]) — 일치하는 메시지 검색. IMAP4.select(mailbox='INBOX', readonly=False) — 메일박스 선택. IMAP4.setacl(mailbox, who, what) — 메일박스에 ACL 설정. IMAP4.socket() — 서버에 연결하는 데 사용된 소켓 인스턴스 반환. IMAP4.sort(...) — 정렬 의미를 가진 search 변형. IMAP4.starttls(ssl_context=None) — STARTTLS 명령 전송. IMAP4.status(mailbox, names) — 메일박스의 명명된 상태 조건 요청. IMAP4.store(message_set, command, flag_list) — 메시지의 플래그 배치 변경. IMAP4.subscribe(mailbox) — 새 메일박스 구독. IMAP4.thread(...) — 스레딩 의미를 가진 search 변형. IMAP4.uid(command, arg[, ...]) — 메시지 번호가 아닌 UID로 식별되는 메시지로 명령 실행. IMAP4.unsubscribe(mailbox) — 메일박스 구독 취소. IMAP4.unselect() — 서버 리소스 해제. IMAP4.xatom(name[, ...]) — 단순 확장 명령 허용.
IMAP4 인스턴스에 정의된 속성: capabilities(서버가 광고하는 기능 튜플), PROTOCOL_VERSION, debug(디버깅 출력 제어), utf8_enabled.
IMAP4 예시
메일박스를 열고 모든 메시지를 검색·출력하는 최소 예시(오류 검사 없음):
import getpass, imaplib
M = imaplib.IMAP4(host='example.org')
M.login(getpass.getuser(), getpass.getpass())
M.select()
typ, data = M.search(None, 'ALL')
for num in data[0].split():
typ, data = M.fetch(num, '(RFC822)')
print('Message %s\n%s\n' % (num, data[0][1]))
M.close()
M.logout()
참고
프로토콜을 설명하는 문서와 이를 구현하는 서버의 소스는 워싱턴 대학교의 IMAP 정보 센터에서 찾을 수 있어요.