본문 바로가기
파이썬/데이터 다루기

[240911] 파이썬 #11 - 이메일 보내기

by 황오독 2024. 9. 11.

**필수로 외워야 하는 것은 아니고, 알아두자는 목적으로 작성.

((1단계)) : 필요한 라이브러리 불러오기
# 라이브러리를 불러오기
import smtplib
from email.mime.text import MIMEText

((2단계)) : 이메일 보내기 준비
# smtp 주소
s = smtplib.SMTP('smtp.gmail.com', 587)

# TLS 보안 시작
s.starttls()

# 로그인 인증
s.login('내가 가진 구글 계정', '보안 암호')

((3단계)) : 이메일 내용 구성
# 본문
msg = MIMEText('''
이거 파이썬으로 메일 보낸거당
참말참말 대다나징
얼렁 칭찬해줘
''')

# 제목
msg['Subject'] = '우리집 고양이는 복실 고냥'


((4단계)) : 이메일 보내기
# 메일 보내기
s.sendmail('발신계정', '수신계정', msg.as_string())
s.quit()

 

남자친구한테 보냈는데 아주 잘 받았다고 했다!

 

 

실습 문제 2문제 중 1개는 못풀고 1개는 맞았다.

- 간단한 내용이지만, 마음이 급해서가 컸던 것 같다.

실습 #2: [심화] 마감일 통보 이메일 보내기

# 라이브러리를 불러오기
import smtplib
from email.mime.text import MIMEText

내용에 포함된 날짜는 시스템으로 오늘 날짜를 받아와서 5일을 더하여 내용에 포함되게 하세요.

힌트: f'''문자열{변수}...''' 형태를 활용해 봅니다.
제목: 제출 마감이 5일 남았습니다.
내용:
안녕하세요?
과제 제출 마감이 5일 남았습니다.
0000년 00월 00일까지 반드시 제출바랍니다.
감사합니다!

# 로그인
s = smtplib.SMTP('smtp.gmail.com', 587)      # 세션 생성
s.starttls()                                 # TLS 보안 시작
s.login('계정', '보안코드')                   # 로그인 인증

#본문
msg = MIMEText(f'''안녕하세요?
과제 제출 마감이 5일 남았습니다.
{datetime.today().year}년 {datetime.today().month}월 {datetime.today().day + 5}일까지 반드시 제출바랍니다.
감사합니다!''')

msg['Subject'] = '제출 마감이 5일 남았습니다.'

s.sendmail('발신메일', '수신메일', msg.as_string())
s.quit()

 

- 다음 문제가 더 어려웠는데 차근차근 풀었더니 쏘옥 풀렸음

실습 #3: [심화] 오늘의 과일 안내 이메일 보내기
엑셀 파일 마지막 실습 결과인 Fruit6.xlsx 파일을 읽어서 다음의 내용으로 이메일을 보내세요.
Fruit6.xlsx의 세번째 열의 0~6 사이의 숫자가 요일을 의미합니다.
오늘의 요일에 해당되는 과일 이름을 읽어서 아래 메일 내용을 구성하세요.
제목: 오늘의 과일은 OOO 입니다.
내용:
안녕하세요?
오늘의 과일은 OOO입니다.
건강을 위해 오전에 꼭 챙겨 드시기 바랍니다.
감사합니다!
힌트
datetime.today().weekday()를 통해 오늘의 요일을 얻을 수 있습니다.
if 조건문을 사용하여 오늘의 요일과 Fruit6.xlsx의 세 번째 열의 값을 비교해 보세요.
값이 일치할 경우 해당하는 행의 첫 번째 열의 값이 오늘의 요일에 해당하는 과일이 됩니다.

# 로그인
s = smtplib.SMTP('smtp.gmail.com', 587)      # 세션 생성
s.starttls()                                 # TLS 보안 시작
s.login('메일주소', '보안 암호')           # 로그인 인증

# Fruits6.xlsx 파일 불러오기
import openpyxl as xl
wb = xl.load_workbook('Fruit6.xlsx')

sheet2 = wb['Sheet2']


for i in range(sheet2.min_row, sheet2.max_row + 1):
    if datetime.today().weekday() == i:
        fruit = sheet2.cell(i+1, 1).value


#본문
msg = MIMEText(f'''안녕하세요?
오늘의 과일은 {fruit}입니다.
건강을 위해 오전에 꼭 챙겨 드시기 바랍니다.
감사합니다!''')

msg['Subject'] = f'오늘의 과일은 {fruit} 입니다.'

s.sendmail('발신메일', '수신메일', msg.as_string())
s.quit()

 

<모범 답안>

# 라이브러리 불러오기
import openpyxl as xl
from datetime import datetime, timedelta
import smtplib
from email.mime.text import MIMEText

# 엑셀 파일 열기
wb = xl.load_workbook('Fruit6.xlsx')
sheet2 = wb['Sheet2']

# 오늘 요일 얻기
weekday = datetime.today().weekday()

# 오늘의 과일 확인
for i in range(0, 7):
    if weekday == sheet2.cell(i+1, 3).value: # 오늘의 요일과 3열(요일)의 값이 일치할 경우
        fruit = sheet2.cell(i+1, 1).value    # 1열(과일)의 값을 변수 fruit에 저장

# 메일 보내기 준비
s = smtplib.SMTP('smtp.gmail.com', 587)
s.starttls()
s.login('jangrae@gmail.com', '키입력')

# 본문과 제목
msg = MIMEText(f'''
안녕하세요?
오늘의 과일은 {fruit}입니다.
건강을 위해 오전에 꼭 챙겨 드시기 바랍니다.
''')
msg['Subject'] = f'오늘의 과일은 {fruit} 입니다.'

# 메일 보내기
s.sendmail('발신메일', '수신메일>', msg.as_string())
s.quit()

 

■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■