Email SMTP and the datetime module
SMTP를 이용하여 파이썬으로 이메일을 보내는 방법
SMTP
- Simple Mail Transfer Protocol의 약자
- 이메일을 메일 서버가 어떻게 받고, 다음 메일 서버로 전달하고
인터넷을 통해 어떻게 전송하는지 결정 하는 모든 규칙이 담겨 있음
파이썬의 smtplib모듈
- SMTP를 이용해서 이메일을 인터넷의 어떤 주소로 발송할 수 있게 해줌
1️⃣ import 후 객체 생성
- 이메일 제공자의 SMTP 서버 위치를 지정해야 함
2️⃣ starttls()호출
- tls : Transport Layer Security의 약자
- 이메일 서버와의 연결을 안전하게 만드는 방식
- 이메일 전송시 다른 누군가 이메일을 가로채 읽으려 하면 작동
- 메시지가 암호화됨
3️⃣ 로그인 정보
4️⃣ 메일 전송
- 메일 제목 Subject:
- 본문 \n\n 사용해 새 라인 추가해서 본문 넣으면 됨
5️⃣ 파일 닫기
오류해결
*️⃣ close() 없이 같은 기능 하도록 with 사용
- 이메일 전송이 완료되면 자동으로 연결이 종료 됨
datetime 모듈 사용법
이메일로 월요일 동기부여 명언 전송하기
1️⃣ 사용할 모듈들 import, 현재 날짜, 요일 객체 생성
2️⃣ 명언 파일 열어서 리스트화한 후 객체 저장
3️⃣ 랜덤으로 하나 선택해서 객체 저장
4️⃣ smtplip을 이용해서 전송
생일 자동 축하기
1️⃣ 오늘 날짜가 birthdays.csv에 있는 생일과 일치하는지 확인
- 오늘 날짜 객체 생성
- pandas 이용해서 birthdays.csv를 데이터화
- 컴프리헨션 사용해서 새로운 딕셔너리 생성
- if문으로 딕셔너리 안에 날짜가 존재하는지 확인
2️⃣ if문이 참이면 무작위로 편지 뽑기
3️⃣ replace()사용해 편지 각각의 NAME플레이스 홀더를 생일자로 대체
- 날짜 키를 넣어서 키값을 구한 후 객체 생성
- 키값에 있는 name값 구해 대체
4️⃣ 편지 전송
Final Code
from datetime import datetime
import pandas
import random
import smtplib
MY_EMAIL = "dahna0915@gmail.com"
MY_PASSWORD = "*********"
today = datetime.now()
today_tuple = (today.month, today.day)
data = pandas.read_csv("birthdays.csv")
birthday_dict = {(data_row["month"], data_row["day"]): data_row for (index, data_row) in data.iterrows()}
if today_tuple in birthday_dict:
birthday_person = birthday_dict[today_tuple]
file_path = f"letter_templates/letter_{random.randint(1,3)}.txt"
with open(file_path) as letter_file:
contents = letter_file.read()
contents = contents.replace("[NAME]", birthday_person["name"])
with smtplib.SMTP("smtp.gmail.com") as connection:
connection.starttls()
connection.login(MY_EMAIL, MY_PASSWORD)
connection.sendmail(
from_addr=MY_EMAIL,
to_addrs=birthday_person["email"],
msg=f"Subject:Happy Birthday!\n\n{contents}"
)