이번 포스팅에서는 파이썬에서 이메일을 사용하는 방법에 대해 알아보자. 사실 이메일을 보내기 위해서는 필요한 것들이 꽤나 많다. 이메일을 보내기 위한 SMTP 서버 및 해당 서버를 구동시키기 위한 클라이언트가 필요한데, 이것들이 모두 Windows에서는 사용하기가 꽤 까다로웠다.
그러나, 우리는 모든 운영체제에서 (왠만하면) 유연하게 동작하는 파이썬이기에 문제없다!
smtplib 라이브러리를 통한 동작
가장 먼저, 파이썬에서 기본적으로 제공하는 라이브러리가 존재한다. 이 라이브러리는 SMTP 서버에 접근하기 위한 클라이언트같은 존재다. 즉, 실제로 이메일을 사용하기 위해선 SMTP 서버 자체도 필요하나, 굳이 이메일 하나 보내겠다고 이걸 직접 구축하는 시대는 지나갔다.
요즘은 여러 기업들에서 일반인들도 SMTP 서버를 사용할 수 있도록 오픈하고 있기 때문이다. 이들의 SMTP 서버를 사용해서 메일을 발송할 수 있다.
공개되어 있다면, 어떤걸 써도 자유지만, 해당 사이트의 계정을 사용해야 한다는 점을 명심하자. 필자는 가장 보편적으로 알려진 GMail로 실습을 해보겠다.
공개된 SMTP 서버를 이용할 경우의 단점
말그대로, 이런 SMTP 서버는 전세계에 무료로 공개되어 있으며, 이것만 이용하면 마음대로 메일봇이니, 스팸메일이니 양산해댈 수 있을 것이다. 그렇기 때문에 이것들은 보통 왠만한 잘 만들어진 사이트들에서는 모두 기본 설정으로 차단되어 있다.(네이버, 구글 등)
그러므로 해당 서버에서 오는 메일을 받아보기 위해서는 계정의 메일 설정을 따로 건드려 줘야 하는 번거로운 점이 있다.
Gmail의 경우, 메일 환경 설정에 들어가 IMAP 액세스를 활성화해야 한다.
네이버 메일에도 역시나 IMAP 설정을 확인할 수 있으니, SMTP로 받은 메일을 확인하고 싶을 경우, 활성화 해놓도록 하자.
보안 수준이 낮은 앱을 위한 Gmail 설정
Gmail은 철저한 보안 수준을 자랑하기 때문에, 신용할 수 없는 어플리케이션에서 해당 계정에 함부로 접근하려 할 경우, 비밀번호를 알고 있다고 해도 차단해버린다.
그렇기 때문에 외부의 다른 프로그램으로 접근하기 위해서는 따로 설정을 해줘야 하는데, 아래의 링크에 들어가서 체크만 하면 된다.
예제 코드
사전 준비는 끝났으니 바로 예제 코드로 넘어가자.
코드에 적힌 메소드를 차근차근 알아보도록 하자.
SMTP()
해당 smtp 서버의 도메인 및 포트를 인자로 접속한 후, 객체를 생성한다.
ehlo()
접속한 후, 프로토콜(규칙) 상 먼저 해당 SMTP 서버에 Hello 메세지를 보내야 하는데, 그걸 하는 것이 이 메소드이다.
starttls()
해당 서버의 암호화 방식을 정하는 메소드이다. TLS와 SSL 방식이 있는데 여기선 TLS 방식을 뜻한다.
SSL을 사용하는 경우 SMTP 대신 smtplib.SMTP_SSL()를 사용하고 이 메소드를 사용하지 않는다.
암호화(Encryption)은 이 해당 주제를 벗어나기에 언급하지 않겠다.
login()
기본적인 연결을 마친 후, 해당 계정 정보로 로그인 인증을 한다.
sendmail()
이 메소드가 본격적으로 메일 보내는 메소드이다. 여기서 중간 인자인 TO에 [ ] 로 리스트 처리가 되어 있는 것을 확인할 수 있는데, 수신자가 복수일 경우를 위해서 존재한다.
quit()
작업을 모두 마친 후, SMTP와의 연결을 끊기 위한 메소드이다.
해당 프로그램을 실행시키면, 이렇게 바로 메일이 도착하는 것을 확인할 수 있다.
이 방법이 일반인이 메일 서버를 따로 구축하지 않고 이메일을 보내는 방법에 있어 가장 기초적인 방법이라고 볼 수 있다. 하지만 봇 취급받으며 기본적으로 차단되고, 따로 설정도 많이 해줘야 하는 번거로운 점이 있다.
외부 API를 사용한 메일 보내기
그래서 요즘은 외부의 조금 더 신경써서 만들어진 메일 API를 사용하는 경우도 있다. 필자가 직접 써본 것으로는 mailgun이라는 API가 있다.
메일건 api를 사용하기 위해서는 해당 페이지에서 간단한 회원가입을 한 후, api key를 발급받아야 한다. 월 1만회의 무료 발신을 제공하며, 그 이상을 원할 경우 결제를 해야하는 구조인 듯 하다.
웹 API이기 때문에 실행시키기 위해서는 웹의 POST 형식으로 데이터를 보내고 받을 수 있는 라이브러리가 필요하다. 필자는 requests 라이브러리를 사용하겠다.
예제 코드
해당 데이터 값으로 요청하기만 하면 알아서 메일을 보내준다. SMTP 서버가 아니며, 애초에 내 어플리케이션도 아니다 보니, 따로 뭘 설정할 필요가 전혀 없다.
좀 더 자유롭게 메일을 보낼 방법이 없는지 알아봐야 겠다. 월 1만회나 보내지는 않을 거라고 생각하지만 제한이 있다고 생각하니 뭔가 껄끄럽다..;
[출처] [Python] 파이썬으로 이메일 보내기|작성자 IML
'About 배우고 익히는법 > Python' 카테고리의 다른 글
[Python] OpenPyXL : 설치, 읽기 (0) | 2019.01.04 |
---|---|
[Python] PyQt5 - 기본 창 띄우기 (0) | 2019.01.04 |
[Python] 웹에서 파일 다운로드 받기 (0) | 2019.01.04 |
[Python] 이미지 파일을 PDF 파일로 변환하기 (0) | 2019.01.04 |
Python으로 exe파일 만들기( cx_Freeze ) (0) | 2019.01.04 |