본문 바로가기
카테고리 없음

나도코딩 업무자동화(RPA) 프로젝트 연습(2)

by 사자(2) 2025. 1. 19.

나도코딩 업무자동화(RPA)는 이메일 자동화이다. 실제 업무에서 이메일 자동화 쓸지 모르겠다. 코드 짜는데 시간이 더 걸림; 하여튼 프로젝트 내용은 1) 5명이 파이썬 특강 신청 메일을 나에게 보내면 2) 선착순 3명 선정, 나머지는 탈락이다. 각각 선정(신청번호 부여) / 탈락(대기번호 부여) 메일을 회신하고, 3) 선정자 명단은 엑셀 파일로 저장하면 완료. 1, 2단계는 내가 코드를 직접 짜고 선생님 코드와 비교해 보았고, 3단계 엑셀 파일 저장은 못했다. 비교해 보니 내가 짠 2단계 코드는 결과물은 비슷한데 실제 작동하는데 한계는 있을 것 같다.


2.  선정/탈락 메일 보내기 

강의 영상 https://www.youtube.com/watch?v=exgO1LFl9x8&list=PLMsa_0kAjjrd8hYYCwbAuDsXZmHpqHvlV&index=5&t=31169s

 

import smtplib
from imap_tools import MailBox
from account import *
from email.message import EmailMessage

EMAIL_ADDRESS = "email@gmail.com"
EMAIL_PASSWORD = " " # 앱 비밀번호

max_val = 3 # 최대 선정자 수
applicant_list = []

print("[1. 지원자 메일 조회]")

with MailBox("imap.gmail.com", 993).login(EMAIL_ADDRESS, EMAIL_PASSWORD, initial_folder="INBOX") as mailbox:
index = 1
for msg in mailbox.fetch('(SENTSINCE 18-Jan-2025)'):
if "파이썬 특강" in msg.subject:
name, tel = msg.text.strip().split("/")
# print("순번: {} 이름: {} 전화번호: {}".format(index, name, tel))
applicant_list.append((msg, index, name, tel))
index += 1

print("[2. 선정 / 탈락 메일 발송]")

with smtplib.SMTP("smtp.gmail.com", 587) as smtp:
smtp.ehlo() # smtp 서버 연결 잘 되는지 확인
smtp.starttls() # 모든 내용이 암호화되어 전송
smtp.login(EMAIL_ADDRESS, EMAIL_PASSWORD) # 로그인

for applicant in applicant_list:
to_addr = applicant[0].from_ # 수신 메일 주소
index, name, tel = applicant[1:]

title = None
content = None

if index <= max_val:
title = "파이썬 특강 안내 [선정]]"
content = "{}님 축하드립니다. 특강 대상자로 선정되셨습니다. (선정순번 {}번)".format(name, index)
else:
title = "파이썬 특강 안내 [탈락]"
content = "{}님 아쉽게도 탈락입니다. 취소 인원이 발생하는 경우 연락드리겠습니다. (대기순번 {}번)".format(name, index - max_val)

msg = EmailMessage()
msg["Subject"] = title
msg["From"] = "email@gmail.com" # 보내는 사람
msg["To"] = "email@gmail.com" # 받는 사람
msg.set_content(content)
smtp.send_message(msg)
print("{} 님에게 메일 발송 완료".format(name))

 

import smtplib
from account import *
from email.message import EmailMessage
import random

EMAIL_ADDRESS = "email@gmail.com"
EMAIL_PASSWORD = " " # 앱 비밀번호

selected_list = ["유재석", "박명수", "정형돈"]
unselected_list = ["노홍철", "하하"]
selected_num = 1
wait_num = 1

# 선정 안내 메일
msg = EmailMessage()
msg["Subject"] = "파이썬 특강 안내 [선정]"
msg["From"] = "email@gmail.com" # 보내는 사람
msg["To"] = "email@gmail.com" # 받는 사람

for selected_name in selected_list:
msg.set_content("{}님 축하드립니다. 특강 대상자로 선정되셨습니다. (선정순번 {}번)".format(selected_name, selected_num)) # 본문
selected_num += 1

with smtplib.SMTP("smtp.gmail.com", 587) as smtp:
smtp.ehlo() # smtp 서버 연결 잘 되는지 확인
smtp.starttls() # 모든 내용이 암호화되어 전송
smtp.login(EMAIL_ADDRESS, EMAIL_PASSWORD) # 로그인
smtp.send_message(msg)

# 탈락 안내 메일
msg = EmailMessage()
msg["Subject"] = "파이썬 특강 안내 [탈락]"
msg["From"] = "email@gmail.com" # 보내는 사람
msg["To"] = "email@gmail.com" # 받는 사람

for unselected_name in unselected_list:
msg.set_content("{}님 아쉽게도 탈락입니다. 취소 인원이 발생하는 경우 연락드리겠습니다. (대기순번 {}번)".format(unselected_name, wait_num)) # 본문
wait_num += 1

with smtplib.SMTP("smtp.gmail.com", 587) as smtp:
smtp.ehlo() # smtp 서버 연결 잘 되는지 확인
smtp.starttls() # 모든 내용이 암호화되어 전송
smtp.login(EMAIL_ADDRESS, EMAIL_PASSWORD) # 로그인
smtp.send_message(msg)

 

위는 선생님 코드, 아래는 내 코드. 나는 수동으로 선정자, 탈락자 리스트를 나눠서 메일을 각각 발송해버림. 결과물은 같지만 매번 관리자 메일함에서 선정자, 탈락자를 수동으로 나눠 작업해야 한다; 선생님은 먼저 관리자 메일함에서 신청자 메일을 조회하여 applicant_list에 저장했다. if 조건문 써서 index <=3 (max_val 변수)이면 선정, 아니면 탈락 나눠서 각각 메일 발송했다. 선정번호는 index, 대기번호는 index-max_val로 간단히 처리했다. 이래서 사람은 배워야 한다; 


3. 선정자 명단 엑셀 저장하기 

import smtplib
from imap_tools import MailBox
from account import *
from email.message import EmailMessage
from openpyxl import Workbook

EMAIL_ADDRESS = "email@gmail.com"
EMAIL_PASSWORD = " " # 앱 비밀번호

max_val = 3 # 최대 선정자 수
applicant_list = []

print("[1. 지원자 메일 조회]")

with MailBox("imap.gmail.com", 993).login(EMAIL_ADDRESS, EMAIL_PASSWORD, initial_folder="INBOX") as mailbox:
index = 1
for msg in mailbox.fetch('(SENTSINCE 18-Jan-2025)'):
if "파이썬 특강 신청합니다" in msg.subject:
name, tel = msg.text.strip().split("/")
# print("순번: {} 이름: {} 전화번호: {}".format(index, name, tel))
applicant_list.append((msg, index, name, tel))
index += 1

print("[2. 선정 / 탈락 메일 발송]")

with smtplib.SMTP("smtp.gmail.com", 587) as smtp:
smtp.ehlo() # smtp 서버 연결 잘 되는지 확인
smtp.starttls() # 모든 내용이 암호화되어 전송
smtp.login(EMAIL_ADDRESS, EMAIL_PASSWORD) # 로그인

for applicant in applicant_list:
to_addr = applicant[0].from_ # 수신 메일 주소
index, name, tel = applicant[1:]

title = None
content = None

if index <= max_val:
title = "파이썬 특강 안내 [선정]]"
content = "{}님 축하드립니다. 특강 대상자로 선정되셨습니다. (선정순번 {}번)".format(name, index)
else:
title = "파이썬 특강 안내 [탈락]"
content = "{}님 아쉽게도 탈락입니다. 취소 인원이 발생하는 경우 연락드리겠습니다. (대기순번 {}번)".format(name, index - max_val)

msg = EmailMessage()
msg["Subject"] = title
msg["From"] = "email@gmail.com" # 보내는 사람
msg["To"] = "email@gmail.com" # 받는 사람
msg.set_content(content)
smtp.send_message(msg)
print("{} 님에게 메일 발송 완료".format(name))
 
print("[3. 선정자 명단 파일 생성]")

wb = Workbook()
ws = wb.active
ws.append(["순번", "이름", "전화번호"])

for applicant in applicant_list[:max_val]:
ws.append(applicant[1:])

wb.save("result.xlsx")

print("모든 작업이 완료되었습니다.")

 

openpyxl 라이브러리로 엑셀 파일 저장. 선생님은 배웠다고 했는데 왜 처음 보는 것 같지?


관련글 보기

2025.01.19 - [분류 전체보기] - 나도코딩 업무자동화(RPA) 이메일 보내기 연습

 

나도코딩 업무자동화(RPA) 이메일 보내기 연습

나도코딩 웹 스크래핑 강의 끝내고 업무자동화(RPA) 강의로 넘어왔다. 엑셀 자동화를 공부하면 실무에 많이 사용할 것 같아 기대했는데, 아이맥이라 따라하기 어려웠다. 엑셀 자동화, 데스크탑 UI

long-season.tistory.com

2025.01.19 - [분류 전체보기] - 나도코딩 업무자동화(RPA) 프로젝트 연습(1)

 

나도코딩 업무자동화(RPA) 프로젝트 연습(1)

나도코딩 업무자동화(RPA)는 이메일 자동화이다. 실제 업무에서 이메일 자동화 쓸지 모르겠다. 코드 짜는데 시간이 더 걸림; 하여튼 프로젝트 내용은 1) 5명이 파이썬 특강 신청 메일을 나에게 보

long-season.tistory.com