예제> 파이썬에서 SMTP로 메일을 보내는 코드 테스트이다.

 

import smtplib

smtp = smtplib.SMTP('smtp.gmail.com',587)
print(type(smtp))
print(smtp.ehlo())
print(smtp.starttls())
print(smtp.login('지메일 아이디', '패스워드'))

smtp.sendmail('보내는 이메일 주소','받는 이메일 주소',
              'Subject: TEST3 \n Take Care!')

smtp.quit()

 

 GMAIL 설정은 좀 복잡해서 이 포스팅 하나에서 전부 다룰수는 없다. 먼저 사용할 지메일 계정의 IMAP 설정을 사용(ENABLED)으로 바꿔야 한다.

 

위 코드를 실행하면 메일 발송 성공 시에 아래와 같은 내용이 콘솔에 출력된다.

 

250, 220, 235 의 숫자가 서버에서 보낸 응답 결과이다. 이 과정에서 요청에 실패하면 예외 메시지를 볼 수 있다.

 

파이썬의 모듈로 지메일의 이메일 서버에 접속하여 메일을 보내는 것이다. 본인의 PC에 별도의 SMTP 서버를 구축할 수도 있겠지만 지메일에 계정이 있다면 구글의 SMTP 서버를 통해 메일을 보낼 수 있기 때문에 특수한 메일 서버를 구축할게 아니라면 그냥 Gmail을 쓰면 된다. 구글의 웹문서에 도움말들을 참고하여 코드를 수정한다.

 

sendmail 메서드로 내용을 담아 메일을 보낼 수 있다. 여기서는 간단하게 보내는 사람 주소와 받는 사람 주소, 그리고 제목만 보내는 것으로 테스트한다.

 

이메일의 다른 기능들은 python api docuementation 을 참고한다.

 

https://docs.python.org/3/library/smtplib.html

 

smtplib — SMTP protocol client — Python 3.9.0 documentation

smtplib — SMTP protocol client Source code: Lib/smtplib.py The smtplib module defines an SMTP client session object that can be used to send mail to any Internet machine with an SMTP or ESMTP listener daemon. For details of SMTP and ESMTP operation, cons

docs.python.org

예제> IMAP 로 받은 이메일의 테스트이다.

 

import imapclient
import pprint

imap = imapclient.IMAPClient('imap.gmail.com', ssl=True)
print(imap.login('이메일 아이디', '이메일 패스워드'))
pprint.pprint((imap.list_folders()))
imap.select_folder('INBOX',readonly=True)
UID = imap.search(['FROM','보낸 이메일 아이디'])
print(UID)

msg = imap.fetch(UID,['BODY[]'])
print(msg)

imapclient는 외부 모듈이다. pip install 명령어로 설치한다.

 

마찬가지로 로그인 한다. 보안 설정은 ssl 에 한다.

 

폴더 리스트를 출력한 후 INBOX (구글의 받은 메일함)에 접속한다.

 

UID는 선택하려는 보낸 메일 주소이다.

 

fetch 는 가져오는 것이다. UID 로 검색한 주소에서 보낸 메일들의 본분을 가져온다.

 

print(msg)를 하더라도 거의 암호문 같은 코드들을 볼 수 있을 것이다.

 

필요한 메시지를 추리기 위해서는 pyzmail 같은 별도의 모듈과 작업이 필요하다. 여기서는 테스트가 목적이기 때문에 콘솔창에 무슨 메시지가 나오는지만 확인한다. 만약 요청이 실패하면 파이썬은 예외를 발생시킬 것이다.

(참고로 pyzmail 은 pip 인스톨이 잘 안되서 pyzmail36을 했더니 설치가 되었다. 설치했으면 import pyzmail 을 한다.

 

msg = imap.fetch(UID,['BODY[]'])
# msgPyz = pyzmail.PyzMessage.factory(msg[10]['BODY[]'])
# pprint.pprint(msg)
pyz = pyzmail.PyzMessage.factory(msg[565][b'BODY[]'])
print(pyz.get_subject())
print(pyz.get_addresses('from'))
print(pyz.get_addresses('to'))
print(pyz.text_part.get_payload().decode(str(pyz.text_part.charset)))
print(pyz.text_part.charset)

위의 코드는 pyzmail 의 테스트이다. 텍스트만 가져오기 위해서 decode 부분에 text_part를 사용했다.

 

스팀에서 보낸 이메일의 텍스트만 가져온 것이다. UID는 imap.search 를 통해서 알아내야 할 것이다.

 

 

하다보면 개별적 설정이 많아서 온라인 문서들과 API DOCUMENTATION을 참고하는 것이 좋다.

 

구글 검색시 python smtp tutorial 같은 검색어를 사용하면 찾을 수 있을 것이다.

 

 

 

공유하기

facebook twitter kakaoTalk kakaostory naver band