poplib — POP3 프로토콜 클라이언트

소스 코드: Lib/poplib.py


이 모듈은 POP3 서버에 대한 연결을 캡슐화하고 RFC 1939에 정의된 대로 프로토콜을 구현하는 클래스 POP3를 정의합니다. POP3 클래스는 RFC 1939의 최소(minimal)와 선택적인(optional) 명령 집합을 모두 지원합니다. POP3 클래스는 이미 맺어진 연결에서 암호화된 통신을 활성화하기 위해 RFC 2595에서 도입된 STLS 명령도 지원합니다.

또한, 이 모듈은 SSL을 하부 프로토콜 계층으로 사용하는 POP3 서버에 연결하기 위한 지원을 제공하는 클래스 POP3_SSL을 제공합니다.

POP3는 광범위하게 지원되지만 노후화되었음에 유의하십시오. POP3 서버의 구현 품질은 매우 다양하며, 그중 너무 많은 것들이 형편없습니다. 여러분의 메일 서버가 IMAP을 지원한다면, IMAP 서버가 더 잘 구현되는 경향이 있으므로 imaplib.IMAP4 클래스를 사용하는 것이 좋습니다.

poplib 모듈은 두 가지 클래스를 제공합니다:

class poplib.POP3(host, port=POP3_PORT[, timeout])

이 클래스는 실제 POP3 프로토콜을 구현합니다. 인스턴스가 초기화될 때 연결이 만들어집니다. port를 생략하면, 표준 POP3 포트(110)가 사용됩니다. 선택적 timeout 매개 변수는 연결 시도의 제한 시간을 초로 지정합니다 (지정하지 않으면, 전역 기본 제한 시간 설정이 사용됩니다).

class poplib.POP3_SSL(host, port=POP3_SSL_PORT, keyfile=None, certfile=None, timeout=None, context=None)

SSL 암호화된 소켓을 통해 서버에 연결하는 POP3의 서브 클래스입니다. port가 지정되지 않으면, 표준 POP3-over-SSL 포트(995)가 사용됩니다. timeoutPOP3 생성자에서처럼 동작합니다. context는 선택적인 ssl.SSLContext 객체인데, SSL 구성 옵션, 인증서 및 개인 키를 단일 (잠재적으로 수명이 긴) 구조로 묶을 수 있도록 합니다. 모범 사례는 보안 고려 사항을 읽으십시오.

keyfilecertfilecontext의 레거시 대안입니다 - SSL 연결을 위해 각각 PEM 형식의 개인 키와 인증서 체인 파일을 가리킬 수 있습니다.

버전 3.2에서 변경: context 매개 변수가 추가되었습니다.

버전 3.4에서 변경: 클래스는 이제 ssl.SSLContext.check_hostname을 통한 호스트 이름 검사와 서버 이름 표시(Server Name Indication)를 지원합니다 (ssl.HAS_SNI를 참조하십시오).

버전 3.6부터 폐지: keyfilecertfile은 폐지되었고, context로 대체합니다. 대신 ssl.SSLContext.load_cert_chain()을 사용하거나, ssl.create_default_context()가 시스템의 신뢰할 수 있는 CA 인증서를 선택하도록 하십시오.

한가지 예외가 poplib 모듈의 어트리뷰트로 정의됩니다:

exception poplib.error_proto

이 모듈로부터 비롯된 모든 에러에서 발생하는 예외 (socket 모듈에서 비롯된 에러는 잡지 않습니다). 예외의 이유는 문자열로 생성자에 전달됩니다.

더 보기

모듈 imaplib

표준 파이썬 IMAP 모듈.

Frequently Asked Questions About Fetchmail

fetchmail POP/IMAP 클라이언트에 대한 FAQ는 POP 프로토콜에 기반하는 응용 프로그램을 작성해야 할 때 유용할 수 있는 POP3 서버 다양성과 RFC 위반에 대한 정보를 수집합니다.

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)

POP3 서버에 로그인하기 위해 더 안전한 APOP 인증을 사용합니다.

POP3.rpop(user)

POP3 서버에 로그인하기 위해 RPOP 인증(유닉스 r-명령과 유사합니다)을 사용합니다.

POP3.stat()

우편함 상태를 가져옵니다. 결과는 2개의 정수의 튜플입니다: (message count, mailbox size).

POP3.list([which])

메시지 목록을 요청합니다, 결과는 (response, ['mesg_num octets', ...], octets) 형식입니다. which가 설정되면, 목록에 표시할 메시지입니다.

POP3.retr(which)

전체 메시지 번호 which를 가져오고 읽었음을 알리는 플래그를 설정합니다. 결과는 (response, ['line', ...], octets) 형식입니다.

POP3.dele(which)

메시지 번호 which를 삭제로 표시합니다. 대부분 서버에서 삭제는 실제로 QUIT 때까지 수행되지 않습니다 (주된 예외는 Eudora QPOP인데, 모든 연결 단절 시 계류 중인 삭제를 수행하여 의도적으로 RFC를 위반합니다).

POP3.rset()

우편함에 대한 모든 삭제 표시를 제거합니다.

POP3.noop()

아무것도 하지 않습니다. 연결 유지로 사용될 수 있습니다.

POP3.quit()

로그아웃: 변경 내용 커밋, 우편함 잠금 해제, 연결 끊기.

POP3.top(which, howmuch)

메시지 번호 which의 메시지 헤더와 메시지의 howmuch 개 줄을 가져옵니다. 결과는 (response, ['line', ...], octets) 형식입니다.

이 메서드가 사용하는 POP3 TOP 명령은, RETR 명령과 달리, 메시지의 읽었음을 알리는 플래그를 설정하지 않습니다; 불행히도, TOP은 RFC에서 부실하게 기술되어 있고 종종 유명하지 않은 서버에서 망가져 있습니다. 사용할 POP3 서버를 신뢰하기 전에 이 메서드를 수동으로 테스트하십시오.

POP3.uidl(which=None)

메시지 다이제스트 (고유 ID) 목록을 반환합니다. which가 지정되면, 결과에는 해당 메시지의 고유 ID가 'response mesgnum uid 형식으로 포함됩니다. 그렇지 않으면, 결과는 목록 (response, ['mesgnum uid', ...], octets)입니다.

POP3.utf8()

UTF-8 모드로의 전환을 시도합니다. 성공하면 서버 응답을 반환하고, 그렇지 않으면 error_proto를 발생시킵니다. RFC 6856에서 정의되었습니다.

버전 3.5에 추가.

POP3.stls(context=None)

RFC 2595에 지정된 대로 활성 연결에서 TLS 세션을 시작합니다. 사용자 인증 전에만 허용됩니다.

context 매개 변수는 ssl.SSLContext 객체인데, SSL 구성 옵션, 인증서 및 개인 키를 단일 (잠재적으로 수명이 긴) 구조로 묶을 수 있도록 합니다. 모범 사례는 보안 고려 사항을 읽으십시오.

이 메서드는 ssl.SSLContext.check_hostname을 통한 호스트 이름 검사와 서버 이름 표시(Server Name Indication)를 지원합니다 (ssl.HAS_SNI를 참조하십시오)

버전 3.4에 추가.

POP3_SSL의 인스턴스에는 추가 메서드가 없습니다. 이 서브 클래스의 인터페이스는 그 부모와 같습니다.

POP3 예제

다음은 우편함을 열고 모든 메시지를 가져와서 인쇄하는 (에러 검사 없는) 최소한의 예입니다:

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)

모듈의 끝에는, 더욱 광범위한 사용 예제가 포함된 테스트 섹션이 있습니다.