python으로 메일 보내기 - smtplib, email
24 Mar 2020 | python smtplib email MIME파이썬에서 메일을 보내기 위해서는 외부 라이브러리가 별도로 필요하지 않으며, smtplib
이라는 기본 라이브러리를 제공한다.
SMTP(Simple Mail Transfer Protocol) : 인터넷 상의 유효한 이메일 아이디로 이메일을 보내는 데에 사용되는 메세지 전송용 프로토콜
smtplib
class smtplib.SMTP(host='', port=0, local_hostname=None, [timeout,]source_address=None)
host
: 지메일과 같은 특정 메일을 사용하기 위한 SMTP 변수 지메일은smtp.gmail.com
port
: 포트번호. 지메일은 587
SMTP 인스턴스는 SMTP 연결을 캡슐화한다.
선택적 호스트와 포트 매개 변수가 제공되면, 초기화 중에 해당 매개 변수로 SMTP connect()
메서드가 호출된다.
connect()
호출이 성공 코드 이외의 것을 반환하면 SMTPConnectError 가 발생한다. 선택적 timeout 매개 변수는 연결 시도와 같은 블로킹 연산을 위한 시간제한을 초로 지정한다. (지정하지 않으면 전역 기본 시간제한 설정이 사용된다.) 시간제한이 만료되면 socket.timeout
이 발생한다. 선택적 source_address 매개 변수를 통해 기계의 특정 소스 주소 또는 특정 소스 TCP 포트에 바인딩할 수 있도록 한다. 연결 전에 소켓이 sorecu address로 할 2-튜블(host, port)를 취한다. 생략되면 OS 기본 동작이 사용된다.
일반적으로
- 초기화/연결
sendmail()
SMTP.quit()
메서드만이 필요하다.
SMTP 클래스는 with
문을 지원한다. with문이 종료될 때 SMTP quit
명령이 자동으로 발행된다.
from smtplib import SMTP
with SMTP("domain.org") as smtp:
smtp.noop()
...
...
(250, b'Ok')
SMTP 객체
SMTP.set_debuglevel(level)
: 디버그 출력 수준을 설정한다. level의 값이 1이면 연결 및 서버와 주고받는 모든 메시지에 대한 디버그 메시지가 생성된다 level의 값이 2이면 이러한 메시지에 타임 스탬프가 추가된다.SMTP.connect(host='localhost', port=0)
: 지정된 포트(port)의 호스트(host)에 연결한다 기본값은 표준 SMTP 포트(25)로 로콜 호스트에 연결하는 것이다. 연결 응답에서 서버가 보낸 응답 코드와 메시지의 2-튜플을 반환한다.SMTP.starttls(keyfile=None, certfile=None, context=None)
: SMTP 연결을 TLS(Transport Layer Security) 모드로 전환한다. 뒤따르는 모든 SMTP 명령은 암호화된다. 그런 다음ehlo()
를 다시 호출해야 한다. 이 세션에 앞선EHLO
나HELO
명령이 없었으면, 이 메서드는 ESMTPEHLO
를 먼저 시도한다.SMTP.login(user, password, *, initial_response_ok=True)
: 인증이 필요한 SMTP 서버에 로그인한다. 인자는 인증할 사용자 이름과 비밀번호이다.SMTP.sendmail(from_addr, to_addrs, msg, mail_options=(), rcpt_options=())
: 메일을 보낸다.SMTP.quit()
: SMTP 세션을 종료하고 연결을 닫는다.
msg 부분에는 email패키지를 사용하여 MIME 메시지를 보낼 수 있다.
email 패키지는 전자 메일 메시지를 관리하기 위한 라이브러리이다.
email.mime : 처음부터 (from scratch) 이메일과 MIME 객체를 생성하는 모듈
공식 문서에서는 이 부분이 아직 번역되어 있기 때문에 미흡하나마 전문의 번역을 실었다.
이 모듈은 전통적인 (Compat32) email API의 일부분이다. 이것의 기능은 새로운 API에서 contentmanager에 의해 부분적으로 대체되었다. 하지만 어떤 어플리케이션에서는 이 클래스들이 유용할 것이다. (전통적이지 않은 code에서도)
일반적으로 메세지 객체 구조는 file이나 어떤 text를 파서에 넘김으로써 획득될 수 있다. 파서는 text를 분석하고 메세지의 root 객체를 리턴한다. 하지만 우리는 완전한 메세지 구조를 무에서부터, 혹은 개인적인 Message 오브젝트로부터 직접 완성할 수도 있다. 사실 이미 존재하는 구조에 새로운 Message 객체를 붙이거나, 제거할 수도 있다. 이는 MIME 메세지를 자르고 이어 붙이는 데에 있어서 매우 편안한 인터페이스를 만들어준다.
또한, Message 인스턴스를 생성하고, 첨부물이나 모든 적절한 헤더를 직접 붙임으로써 새로운 객체 구조를 만들 수도 있다. email 패키지는 이를 더 쉽게 만들어줄 몇 개의 편리한 서브클래스들을 제공한다.
Comments