본문 바로가기

코딩/업무자동화

[파이썬/업무자동화] Outlook 메일 파싱(parsing) 정리 - 1

반응형

※ 이 글을 쓰는 사람은 SW 비전공자입니다.

※ 개인 공부를 위해 정리하는 글이며, 작성한 코드들은 효율성, 깔끔함(?) 등과는 거리가 멀 수 있습니다.

 

 outlook 자동화 관련편

1편 : 2021.03.01 - [코딩/Python] - [Python/파이썬] Outlook 메일 파싱(parsing) 정리 - 1

2편 : 2021.03.02 - [코딩/Python] - [Python/파이썬] Outlook 메일 파싱(parsing) 정리 - 2

3편 : 2021.03.23 - [코딩/Python] - [Python/파이썬] Outlook 여러 메일 첨부 파일 한번에 받기

4편 : 2021.04.28 - [코딩/Python] - [Python/파이썬] Outlook 메일 첨부 엑셀파일의 내용 자동 취합하기


  회사에서 사용하는 사내 이메일(Outlook)의 내부 내용을 파싱하여 원하는 정보를 추출해보고 싶었다.

구글링을 해보니 파이썬의 win32.client(pywin32) 모듈을 사용하면 된다는 정보를 입수함.

Outlook 파싱 테스트를 위해 아래와 같이 '받은편지함'에 test폴더를 만들고 임의의 이메일 몇개를 작성하였음

<Outlook 받은편지함>

 

위 메일의 내용을 읽어오기 위해 아래와 같이 test 코드를 작성함.

import win32com.client

# test라는 outlook COM 객체 생성(Dispatch)
# 생성한 test 객체를 통해 Outlook을 제어할 수 있다.
test = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")

#6 : 받은 편지함(inbox folder)를 의미함.
inboxfolder = test.GetDefaultFolder(6)
messages = inboxfolder.Items

#받은편지함에 있는 메일 개수를 입력받는 변수 : msg_count
msg_count = messages.count
print("받은편지함 메시지 수 : " + str(msg_count) + "건")

 

1. win32com.clinet 모듈을 import하고 test라는 Outlook COM 객체를 생성함.

2. 받은 편지함(inboxFolder)에 접근하여 내부 메일 개수를 읽어옴

3.  GetDefaultFolder(6)에서 6이라는 숫자가 InboxFolder(받은편지함) 을 읽어오는 index이다.

   index에 대한 자세한 정보는 아래 microsoft 공식 홈페이지에서 설명하고 있다.

   (docs.microsoft.com/ko-kr/office/vba/api/Outlook.OlDefaultFolders)

4. 코드를 돌려보면 위 메일함의 메일 3건이라는 결과를 확인할 수 있다.

 

다음으로는 각 메일의 제목과 내용을 출력해보고자 했다.

위 코드에 이어 아래 test코드를 작성하였다

3건의 메일를 loop을 활용하여 각 내용을 출력하는 코드이다.

i=1 #출력을 위한 index 번호
# 받은편지함 messgae를 각각 루프문을 돌아 필요한 내용 파싱
for ms in messages:

    print(str(i) + "번째 메일의 발신인 : " + ms.SenderName)
    print(str(i) + "번째 메일의 수신인 : " + ms.To)
    print(str(i) + "번째 메일의 제목 : " + ms.Subject)
    print(str(i) + "번째 메일의 받은시간 : " + str(ms.ReceivedTime))
    print(str(i) + "번째 메일의 내부내용 : " + ms.Body)
    print('\n')
    i = i+1

 

<결과>

 

위와 같이 결과를 확인하였는데 내부내용이 출력되지 않는 것으로 확인하였다.

프로그램 실행도 정상적으로 되고 아무 오류메시지가 출력되지 않는다. 메일 내용이 아무것도 없는 것이 아닌데

출력이 되지 않는다.

(코드 중 ms.Body 부분 해당)

 

원인을 확인해보니 outlook 2016 초기버전에 발생하는 버그라고 한다.

해당 메일을 .msg파일로 첨부시 빈칸으로 보이거나 파이썬으로 접근시 Body 내용이 빈칸으로 출력되는 현상이다.

버그를 해결하려면 microsoft에서 제공하는 업데이트를 다운받아 설치하면 된다.

아래 블로그에서 잘 정리해주셔서 참고하여 해결하였다.

heroeskdw.tistory.com/entry/OUTLOOK-2016-MSG-%ED%8C%8C%EC%9D%BC-%EB%B2%84%EA%B7%B8-%EC%88%98%EC%A0%95-%ED%8C%A8%EC%B9%98-%EB%B2%84%EC%A0%84

 

OUTLOOK 2016 MSG 파일 버그 수정 패치 버전

OUTLOOK  2016 버그 중에 첨부 파일이 있는 메일을 파일로 저장해보면 그 안에 내용이 하나도 안보이는 버그가 있었습니다. .msg 파일 입니다. 해당 경로를 알려드립니다. 64bit 아래 경로입니다. https:

heroeskdw.tistory.com

 

업데이트 후 코드 실행시 아래와 같이 메일 본문 내용이 출력되는 것으로 확인

<업데이트 후 결과>

 

전체코드는 아래 첨부

test2.py
0.00MB

 

728x90