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