업무자동화(RPA) 3-2편 - 메일 받기, 검색하기

이번에는 파이썬을 활용해 메일을 받아보고 활용해보자.

메일 받기

메일을 받기 위해서는 imap_tools 를 사용해주면 된다. imap_tools>MailBox를 임포트해준다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
from imap_tools import MailBox
from mail_address import *

mailbox = MailBox("imap.gmail.com", 993)
mailbox.login(EMAIL_ADDRESS, EMAIL_PASSWORD, initial_folder="INBOX")  # INBOX : 받은편지함

for msg in mailbox.fetch(limit=10, reverse=True):  # limit = 제한숫자, reverse = 뒤집어서 가져옴(최신 순)
    print("제목 : ", msg.subject)
    print("발신자 : ", msg.from_)
    print("수신자 : ", msg.to)
    # 참조자 msg.cc 비밀참조자 msg.bcc
    print("날짜 : ", msg.date)
    print("본문 : ", msg.text)
    # print("HTML 메시지 : ", msg.html)
    print("=" * 55)

    # 첨부 파일 가져오기
    for att in msg.attachments:
        print("첨부파일 : ", att.filename)
        print("파일 타입 : ", att.content_type)
        print("파일 사이즈 : ", att.size)

        # 파일 다운로드
        with open("download_" + att.filename, "wb") as f:
            f.write(att.payload)
            print("첨부 파일 다운로드 완료 : ", att.filename)

mailbox.logout()

# https://pypi.org/project/imap-tools/

mailbox.login(EMAIL_ADDRESS, EMAIL_PASSWORD, initial_folder="INBOX") # INBOX : 받은편지함 이 부분의 INBOX는 메일의 ‘받은편지함’을 받아오겠다는 뜻이다.

for msg in mailbox.fetch(limit=10, reverse=True): # limit = 제한숫자, reverse = 뒤집어서 가져옴(최신 순) for문을 활용해 메일박스 모듈로 받은 메일들을 변수 msg에 배열로 저장하고, limit와 reverse 옵션을 추가해주었다.

만약 더 많은 imap-tools 기능을 보고 싶다면 imap-tools를 참고하자.

메일 검색하기

메일을 받아올 때 특정 검색 조건을 만들어 줄 수 있다. 그러면 메일박스는 특정 검색 조건을 만족한 메일만을 가지고 와서 변수에 저장해준다.

1
2
3
4
5
6
7
mailbox.fetch('UNSEEN') # 읽지 않은 메일 가져오기
mailbox.fetch('FROM 98tech.savvy@gmail.com') # 특정인이 보낸 메일 가져오기
mailbox.fetch('(TEXT "내용")') # 어떤 글자를 포함하는 메일(제목과 본문) 내용안에는 띄어쓰기로 구분하고 각각의 단어를 포함하는 메일을 찾음.
mailbox.fetch('(SUBJECT "내용")') # 어떤 글자를 포함하는 메일(제목)
한글의 경우는 아직 지원을 하지 않기 때문에 for  안에 특정 문자의 if문을 넣어줘서 찾아주면 된다.
mailbox.fetch('(SENTSINCE 날짜(00-MONTH-0000))') # 특정 날짜 이후에 온 메일
mailbox.fetch('(ON 날짜)') # 특정 날짜에 온 메일

mailbox.fetch 부분에 위의 코드들을 넣어주면 된다. 만약 위의 코드들 외에 일정의 조건을 원한다면 fetch 아래에 if문을 넣어서 활용해주면 된다.

댓글남기기