Python poplib 모듈 개요
Python 표준 라이브러리의 poplib 모듈은 POP3와 POP3_SSL, 두 가지 클래스를 제공합니다.
POP3 클래스는 POP3 서버와의 연결을 캡슐화하며, RFC 1939에 정의된 프로토콜을 그대로 구현합니다. POP3_SSL 클래스는 SSL을 하위 프로토콜 계층으로 사용하는 POP3 서버와의 보안 연결을 지원합니다.
다만 참고할 점이 있습니다. POP3 프로토콜은 대부분의 서버에서 구현 품질이 좋지 않아 사실상 구식(obsolescent)으로 분류됩니다. 따라서 메일 서버가 IMAP을 지원한다면 imaplib.IMAP4 클래스를 사용하는 것이 좋습니다.
POP3 클래스의 주요 메서드
두 클래스는 다음과 같은 메서드를 공통으로 제공합니다.
getwelcome()
POP3 서버가 접속 시 전송한 인사말(greeting) 문자열을 반환합니다.
user(username)
USER 명령을 전송합니다. 정상적인 응답이라면 비밀번호 입력이 필요하다는 의미입니다.
pass_(password)
비밀번호를 전송하여 로그인을 완료합니다.
stat()
메일함 상태를 조회합니다. 결과는 두 개의 정수, 즉 (메시지 수, 메일함 크기) 튜플로 반환됩니다.
list()
메시지 목록을 요청합니다. 결과는 (응답, ['메시지번호 옥텟수', ...], 옥텟수) 형태로 구성됩니다.
retr(which)
지정한 인덱스의 메시지를 가져오며, 해당 메시지에 '읽음(seen)' 플래그를 설정합니다.
dele(which)
삭제할 메시지 번호에 삭제 플래그를 지정합니다. 실제 삭제는 quit() 호출 시 반영됩니다.
top(which, howmuch)
메시지 헤더와 함께, 헤더 뒤에 이어지는 본문 중 지정한 줄 수만큼만 가져옵니다.
quit()
세션을 종료(signoff)합니다. 변경 사항을 커밋하고, 메일함 잠금을 해제한 뒤 서버와의 연결을 끊습니다.
Gmail POP 서버에서 메일 가져오기 예제
다음 코드는 Gmail의 POP 서버에 접속해 모든 메시지를 하나씩 가져와 출력한 후 연결을 종료합니다.
import poplib
box = poplib.POP3_SSL('pop.googlemail.com', '995')
box.user("YourGmailUserName")
box.pass_('YourPassword')
N = len(box.list()[1])
for i in range(N):
for msg in box.retr(i + 1)[1]:
print(msg)
box.quit()
위 스크립트를 실행하기 전에는 Gmail 계정 설정에서 '보안 수준이 낮은 앱 허용' 옵션이 활성화되어 있어야 합니다. 참고로 Google의 최근 보안 정책 변경에 따라 일반 계정 비밀번호 대신 앱 비밀번호(App Password)를 발급받아 사용하거나, OAuth2 기반 인증 방식으로 전환해야 할 수도 있습니다.