# `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 매개 변수는 연결 시도의 제한 시간을 초로 지정합니다 (지정하지 않으면, 전역 기본 제한 시간 설정이 사용됩니다).

  `self`, `host`, `port`를 인자로 감사 이벤트(auditing event) `poplib.connect`를 발생시킵니다.

  `self`, `line`을 인자로 감사 이벤트(auditing event) `poplib.putline`을 발생시킵니다.

  버전 3.9에서 변경: timeout 매개 변수가 0으로 설정되면, 비 블로킹 소켓이 만들어지지 않도록 `ValueError`를 발생시킵니다.

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

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

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

  `self`, `host`, `port`를 인자로 감사 이벤트(auditing event) `poplib.connect`를 발생시킵니다.

  `self`, `line`을 인자로 감사 이벤트(auditing event) `poplib.putline`을 발생시킵니다.

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

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

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

  버전 3.9에서 변경: timeout 매개 변수가 0으로 설정되면, 비 블로킹 소켓이 만들어지지 않도록 `ValueError`를 발생시킵니다.

한가지 예외가 `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)

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