학교 공지 사항 자동화를 해보자 - 4
Intro. 이제 메일로 전송해보자!
이메일에 담을 내용은 이제 모두 준비가 되었다!
smtp와 email 라이브러리를 사용하면 파이썬으로 구글 이메일을 전송 할 수 있다.
주의 해야 할 점은 구글 기준으로 앱 비밀번호를 생성해서 넣어야 한다. 일반 비밀번호를 입력하면 에러가 발생한다
또 신경 썼던게 있다면, 환경 변수로 내 개인 정보를 감춘 것이다.
나중에 github action을 쓸 때도 마찬가지고, 개인 정보를 추상화하는 것은 기본이기에 os.environ
을 사용해서 개인 정보를 숨겼다
아래 코드를 보면 알 수 있지만, 보내는 사람,받는 사람, 제목 등을 입력 할 수 있다.
앞서 말한 앱 비밀번호만 유의하자
예외 처리는 메일 발송 과정에서 전송 실패 등의 이슈가 발생 할 수가 있다.
아직 미흡한 부분이 몇가지 있는데 고쳐지지 않아 준비를 하였다.
코드
SOJOONG = "소프트웨어 중심 사업단"
JNUSW = "소프트웨어 공학과"
def sendEmail(message,subTitle ,category):
try:
EMAIL_ADDRESS, EMAIL_PASSWORD =os.environ.get('EMAIL_ADDRESS'),os.environ.get('EMAIL_PASSWORD')
print(f"{datetime.now()} Email sending... " )
msg = MIMEMultipart()
msg["Subject"] = f"[{category}] " + subTitle
msg["To"] = EMAIL_ADDRESS
msg["From"] = EMAIL_ADDRESS
msg.attach(MIMEText(message))
# 메일송신처리
server = smtplib.SMTP("smtp.gmail.com", 587)
server.starttls()
server.login(EMAIL_ADDRESS, EMAIL_PASSWORD)
server.send_message(msg)
server.quit()
print("Success: Email sent!")
except Exception as e:
print("Email failed to send.")
print(f"An error occured: {e}")
def start():
category = [SOJOONG,JNUSW]
posts = [getTodayJnuSW(), getTodaySojoong()]
for c,post in zip(category,posts):
if post ==None:
continue
for p in post:
subTitle,message =p[0],p[1]
try:
sendEmail(message,subTitle,c)
except Exception as e:
print(f"An error occured while sending email: {e}")
sendEmail(f"An error occured while sending email: {e}","Error Occured in sending Message",c)
start()
- 포스트가 없다면 그대로 넘어가고, 있다면 메일을 전송하는 프로세스이다.
- 위의 코드는 main.py의 일부로 깃허브 액션에서는 해당 스크립트만 실행 시킬 것이다
다음 시간에는 깃허브 액션을 사용해서 crontab을 구동하는 것을 할 것이다.
레퍼런스
'프로젝트 > 사이드 프로젝트' 카테고리의 다른 글
BlindTok (1) - 프로젝트 초기 세팅 (0) | 2023.03.29 |
---|---|
학교 공지 사항 자동화를 해보자 - 5 (0) | 2023.03.23 |
학교 공지 사항 자동화를 해보자 - 3 (0) | 2023.03.22 |
학교 공지 사항 자동화를 해보자 - 2 (0) | 2023.03.22 |
학교 공지 사항 자동화를 해보자 - 1 (0) | 2023.03.22 |