poplib — POP3 프로토콜 클라이언트
poplib — POP3 프로토콜 클라이언트
소스 코드: Lib/poplib.py
이 모듈은 POP3 서버에 대한 연결을 캡슐화하고 RFC 1939에 정의된 프로토콜을 구현하는 클래스 POP3를 정의해요. POP3 클래스는 RFC 1939의 최소 및 선택 명령 집합을 모두 지원해요. POP3 클래스는 이미 설정된 연결에서 암호화 통신을 가능하게 하는 RFC 2595에 도입된 STLS 명령도 지원해요.
또한 이 모듈은 기본 프로토콜 계층으로 SSL을 사용하는 POP3 서버에 연결을 지원하는 POP3_SSL 클래스도 제공해요.
POP3는 널리 지원되지만 쇠퇴한 프로토콜이에요. POP3 서버의 구현 품질은 매우 다양하고, 너무 많은 서버가 상당히 좋지 않아요. 메일 서버가 IMAP을 지원한다면, IMAP 서버가 더 잘 구현되는 경향이 있으므로 imaplib.IMAP4 클래스를 사용하는 편이 나아요.
poplib 모듈은 두 개의 클래스를 제공해요:
출처: Python 표준 라이브러리
class poplib.POP3(host, port=POP3_PORT[, timeout])
실제 POP3 프로토콜을 구현하는 클래스예요. 연결은 인스턴스가 초기화될 때 생성돼요. port가 생략되면 표준 POP3 포트(110)가 사용돼요. 선택적 timeout 매개변수는 연결 시도의 초 단위 타임아웃을 지정해요(지정하지 않으면 전역 기본 타임아웃 설정이 사용돼요).
인자 self, host, port와 함께 감사 이벤트 poplib.connect를 발생시켜요. 모든 명령은 인자 self와 line(원격 호스트로 보내질 바이트)과 함께 감사 이벤트 poplib.putline을 발생시켜요.
버전 3.9에서 변경: timeout 매개변수가 0으로 설정되면 비블로킹 소켓 생성을 막기 위해 ValueError를 발생시킴.
class poplib.POP3_SSL(host, port=POP3_SSL_PORT, *, timeout=None, context=None)
SSL 암호화 소켓을 통해 서버에 연결하는 POP3의 하위 클래스예요. port가 지정되지 않으면 표준 POP3-over-SSL 포트인 995가 사용돼요. timeout은 POP3 생성자와 동일하게 동작해요. context는 선택적 ssl.SSLContext 객체로, SSL 구성 옵션, 인증서, 개인 키를 단일(잠재적으로 긴 수명의) 구조로 묶을 수 있어요. 모범 사례는 보안 고려 사항을 읽어 보세요.
인자 self, host, port와 함께 감사 이벤트 poplib.connect를 발생시켜요. 모든 명령은 인자 self와 line과 함께 감사 이벤트 poplib.putline을 발생시켜요.
버전 3.2에서 변경: context 매개변수 추가.
버전 3.9에서 변경: timeout 매개변수가 0으로 설정되면 ValueError를 발생시킴.
버전 3.12에서 변경: 폐기된 keyfile과 certfile 매개변수가 제거됨.
poplib 모듈의 속성으로 예외 하나가 정의돼요:
exception poplib.error_proto
이 모듈의 어떤 오류에서든 발생하는 예외예요(socket 모듈의 오류는 잡히지 않아요). 예외의 원인이 문자열로 생성자에 전달돼요.
본문
POP3 객체
모든 POP3 명령은 같은 이름의 소문자 메서드로 표현되며, 대부분은 서버가 보낸 응답 텍스트를 돌려줘요.
POP3 인스턴스에는 다음 메서드들이 있어요.
POP3.set_debuglevel(level)
인스턴스의 디버깅 레벨을 설정해요. 이것이 출력되는 디버깅 출력의 양을 제어해요. 기본값 0은 디버깅 출력을 만들지 않아요. 1은 적당한 양의 디버깅 출력(보통 요청당 한 줄)을 만들어요. 2 이상은 최대 디버깅 출력을 만들어 제어 연결에서 보내고 받는 각 줄을 기록해요.
POP3.getwelcome()
POP3 서버가 보낸 인사 문자열을 돌려줘요.
POP3.capa()
RFC 2449에 명시된 대로 서버의 기능을 조회해요. {'name':['param'...]} 형태의 사전을 돌려줘요.
버전 3.4에 추가.
POP3.user(username)
user 명령을 보내요. 응답은 비밀번호가 필요함을 나타내야 해요.
POP3.pass_(password)
비밀번호를 보내요. 응답에는 메시지 수와 사서함 크기가 포함돼요. 참고: quit()을 호출할 때까지 서버의 사서함이 잠겨 있어요.
POP3.apop(user, secret)
더 안전한 APOP 인증을 사용해 POP3 서버에 로그인해요.
POP3.rpop(user)
RPOP 인증(UNIX r-commands와 비슷)을 사용해 POP3 서버에 로그인해요.
POP3.stat()
사서함 상태를 가져와요. 결과는 (messagecount, mailboxsize) 2-정수 튜플이에요.
POP3.list([which])
메시지 목록을 요청해요. 결과는 (response, ['mesg_numoctets', ...], octets) 형태예요. which가 설정되면 목록으로 나열할 메시지예요.
POP3.retr(which)
전체 메시지 번호 which를 검색하고 seen 플래그를 설정해요. 결과는 (response, ['line', ...], octets) 형태예요.
POP3.dele(which)
메시지 번호 which를 삭제 대상으로 표시해요. 대부분의 서버에서 삭제는 QUIT 때까지 실제로 수행되지 않아요(주요 예외는 Eudora QPOP로, 어떤 연결 해제에서도 보류 중인 삭제를 수행해 의도적으로 RFC를 위반해요).
POP3.rset()
사서함의 모든 삭제 표시를 제거해요.
POP3.noop()
아무것도 하지 않아요. keep-alive로 사용될 수 있어요.
POP3.quit()
서명(signoff)해요. 변경을 커밋하고, 사서함을 잠금 해제하고, 연결을 끊어요.
POP3.top(which, howmuch)
메시지 번호 which의 메시지 헤더와 헤더 뒤의 howmuch 줄을 검색해요. 결과는 (response, ['line', ...], octets) 형태예요.
이 메서드가 사용하는 POP3 TOP 명령은 RETR 명령과 달리 메시지의 seen 플래그를 설정하지 않아요. 안타깝게도 TOP은 RFC에서 제대로 규정되지 않았고 비공식 서버에서 자주 고장나요. 신뢰하기 전에 사용할 POP3 서버에 대해 직접 테스트해 보세요.
POP3.uidl(which=None)
메시지 다이제스트(고유 ID) 목록을 돌려줘요. which가 지정되면 결과에 'responsemesgnumuid 형태로 그 메시지의 고유 ID가 포함돼요. 그렇지 않으면 결과는 (response, ['mesgnumuid', ...], octets) 리스트예요.
POP3.utf8()
UTF-8 모드로 전환하려고 시도해요. 성공하면 서버 응답을 돌려주고, 그렇지 않으면 error_proto를 발생시켜요. RFC 6856에 규정돼 있어요.
버전 3.5에 추가.
POP3.stls(context=None)
RFC 2595에 명시된 대로 활성 연결에서 TLS 세션을 시작해요. 이것은 사용자 인증 전에만 허용돼요.
context 매개변수는 SSL 구성 옵션, 인증서, 개인 키를 단일 구조로 묶을 수 있는 ssl.SSLContext 객체예요. 모범 사례는 보안 고려 사항을 읽어 보세요.
이 메서드는 ssl.SSLContext.check_hostname과 Server Name Indication(ssl.HAS_SNI 참고)으로 호스트 이름 검사를 지원해요.
버전 3.4에 추가.
POP3_SSL의 인스턴스에는 추가 메서드가 없어요. 이 하위 클래스의 인터페이스는 부모와 동일해요.
예제 (POP3 Example)
사서함을 열고 모든 메시지를 검색해 출력하는 최소 예제(오류 검사 없음)예요:
import getpass , poplib M = poplib . POP3 ( 'localhost' ) M . user ( getpass . getuser ()) M . pass_ ( getpass . getpass ()) numMessages = len ( M . list ()[ 1 ]) for i in range ( numMessages ): for j in M . retr ( i + 1 )[ 1 ]: print ( j )
모듈 끝에는 더 광범위한 사용 예제를 담은 테스트 섹션이 있어요.
더 알아보기
imaplib모듈 — 표준 Python IMAP 모듈.- Fetchmail에 대한 FAQ — POP/IMAP 클라이언트 fetchmail의 FAQ로, POP 프로토콜 기반 애플리케이션을 작성해야 할 때 유용한 POP3 서버 변형과 RFC 비준수 정보를 수집해 둠.