Python을 사용하여 Outlook과 Excel 연동하기(1) - 개발 본문
학부생 수업의 조교를 맡게 되었다.
일거리가 늘어났지만 나 또한 학부생때 들었던 수업이라 열심히 하려고 한다.
매주 학부생들은 한 챕터가 끝날때마다 수업에 대한 퀴즈를 풀고, 조교에게 메일로 퀴즈결과를 전송한다.
조교의 업무 중 하나는 매주 메일을 확인하여 제출을 완료 한 학생을 엑셀에 표시하는 것.
매우 단순한 일이다.
다만 문제는 매주 174개의 메일이 온다는것....
메일 내용에 있는 챕터 번호와 학번을 일일히 확인하고 엑셀에 해당 학번을 검색해서 "o"를 표시하면 되는데....
20개쯤 하다보니 현타가 왔다.
... 내가 지금 뭘 하는거지 ....
공부할 것도 산더미 인데... 이렇게 시간낭비를 할수는 없다. 사실 귀찮다...
인터넷에서 이런말을 봤다.
파이썬과 구글만 있으면 못할게 없다고.
나는야 대학원생. 불가능은 없지.
따라서 python으로 outlook에 들어온 메일을 자동으로 확인하고, excel에 표시해 저장하는 자동화툴을 만들기로 했다.
Outlook에서 메일을 읽어오기 위한 라이브러리는 win32com.client, excel을 사용할 수 있는 라이브러리는 openpyxl이 있다는것 알았다.
먼저 outlook에서 메일을 긁어와 메일의 갯수와 보낸사람을 뽑아보자.
1
2
3
4
5
6
7
8
9
10
11
|
import win32com.client as cli #outlook API
outlook = cli.Dispatch("Outlook.Application").GetNamespace("MAPI") # 아웃룩
inbox = outlook.GetDefaultFolder(6) # 받은편지함
msg = inbox.Items #메세지 정보
msg_counter = msg.count # 총갯수
print("메세지 갯수 : "+str(msg_counter))
for ms in msg:
print("보낸사람 : "+str(ms.SenderName))
|
cs |

오.... 정상적으로 동작한다.
내가 확인해야하는 메일은 "no~"이라는 고정된 메일 주소로부터 오는 메일이다.
이제 그 메일 주소로 온 메일의 내용을 긁어와보자.
1
2
3
4
5
6
7
8
9
10
11
12
13
|
import win32com.client as cli #outlook API
outlook = cli.Dispatch("Outlook.Application").GetNamespace("MAPI") # 아웃룩
inbox = outlook.GetDefaultFolder(6) # 받은편지함
msg = inbox.Items #메세지 정보
msg_counter = msg.count # 총갯수
print("메세지 갯수 : "+str(msg_counter))
for ms in msg:
if(ms.SenderName == "no~"): # 특정 메일주소만!
print("보낸사람 : " + str(ms.SenderName))
print("내용 : "+str(ms.Body))
|
cs |
정상적으로 보낸 메일주소와 메일의 내용을 긁어왔다.
이제 확인해야하는 것은 챕터 번호와 학생의 학번(Section ID)을 확인해야한다.
다행이도 파이썬에는 String내에서 내가 원하는 String을 찾아 인덱스를 반환해주는 find()함수가 있으니 다음과 같이 코드를 짤 수 있다.
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
|
import win32com.client as cli #outlook API
outlook = cli.Dispatch("Outlook.Application").GetNamespace("MAPI") # 아웃룩
inbox = outlook.GetDefaultFolder(6) # 받은편지함
msg = inbox.Items #메세지 정보
msg_counter = msg.count # 총갯수
for ms in msg:
if(ms.SenderName == "no~"):
article = ms.Body
# 챕터넘버 확인
chap_index = article.find("Chapter: Chapter ") # 챕터번호가 시작하는 지점의 인덱스 가져옴
chap = article[chap_index+len("Chapter: Chapter ")] # Chapter 번호앞자리
if(article[chap_index+len("Chapter: Chapter ")+1].isdigit()): # 챕터번호가 두자리수 일 경우
chap=chap+article[chap_index+len("Chapter: Chapter ")+1] # 한개 더 붙여서 챕터번호 완성
#학번
student_index = article.find("Section ID: ") # 학생의 학번이 시작하는 지점의 인덱스 가져옴
student_id = article[student_index+len("Section ID: ")] # 학번의 맨 앞자리
for j in range(1,10): #학번은 10자리 이므로 뒤에 9개를 더 가져옴
student_id = student_id+article[student_index+len("Section ID: ")+j]
print("-----------------------")
print("챕터 번호 : "+str(chap))
print("학번 : "+str(student_id))
|
cs |
메일과 하나하나 비교해보니 정상적으로 동작하는것을 확인했다.
이제 해당 학번을 엑셀에서 찾아 해당 챕터 번호에 체크만 하면 끝!
엑셀 연동은 다음글에서 다루겠다.
'ETC' 카테고리의 다른 글
Cursor AI 사용기 (9) | 2024.11.07 |
---|---|
MST (Minimum Spanning Tree) 최소 신장 트리 (0) | 2022.04.07 |
벨만포드 알고리즘 (0) | 2022.04.05 |
다익스트라(Dijkstra) 알고리즘 (0) | 2022.03.29 |
Python을 사용하여 Outlook과 Excel 연동하기(2) - 개발 (2) | 2021.11.25 |