지금까지 이전에 진행했던 부분까지 수정을 완료했다.
2021.04.16 - AWS what's new 뉴스레터 | MongoDB를 써볼까?!
2021.04.16 - AWS what's new 뉴스레터 | python에서 mongoDB 사용하기
RSS형태로 제공되는 AWS what's new 소식을 크롤링해서 데이터를 수집하고, 저장하는 방식이다.
그전에는 엑셀에 저장해두는데에서 그쳤다면, 지금은 mongoDB에 저장하는 방식으로 업데이트 했다.
아 그리고 추가로 그전에는 AWS translate API를 써서 Title를 번역했다면, 구글번역 API로 변경했다
2021.04.17 - 구글번역API 사용하기 | googletrans 4.0.0 으로 설치해야한다
이제는 조금더 업그레이드 된 기능이 필요하다.
그게 바로 메일 전송이다. 이 미니프로젝트를 시작하게 된 이유이기도 하다.
AWS what's new 소식을 카테고리 별로 분류하고, 원하는 카테고리를 선택한 사람에게 메일을 전송하는 것이다.
이게 핵심적인 뉴스레터 기능인데 이게 어떻게 가능할지는 아직 잘 모르겠다.
그래서 우선, 파이썬에서 '메일'을 전송할 수 있는지를 알아보았다.
그러니까 메일이 전송되는 로직을 이해해보았다,
메일은 어떻게 전송되는가?
우선, 메일만을 위해서 사용되는 아래의 3가지 프로토콜이 있다.
2021.04.18 - 메일서버 | SMTP ,POP3, IMAP
-SMTP : Simple Mail Transfer Protocol
-POP3 : Post Office Protocol
-IMAP : Inertnet Message Access Protocol
이 프로토콜이 마치 우체국처럼 메일들이 모였다가 전송되는 메일서버인데
STMP를 보통 메일을 발송할때 사용된다고 보면 된다.
위에서 보는것 처럼
맨처음 메일을 만들어서 STMP서버에게 이런 메일로 보내달라고 요청한다.
그러면 우체국처럼 SMTP서버가 가지고 있다가, 받을 사람의 서버인 POP서버나 IMAP서버로 전송한다.
그래서 이런 흐름으로 메일을 주고받을 수 있게 된다.
메일전송 in Python 사전준비
파이썬에서 메일을 보내기 위해서는 아래와 같은 두가지가 필요하다
1. 라이브러리 2. 발신메일 SMTP활성화 3.수신메일 POP3/IMAP 활성화
먼저, 라이브러리는 smtplib와 email라이브러리가 필요하다.
smtplib의 목적은 메세지전송이다.
기본설치 라이브러리로 별도 설치는 필요없다. <--혹시 모르니 smtplib 라이브러리 문서
email의 목적은 이메일 메세지를 관리하고, 한글이나 파일을 첨부해서 보낼때 사용한다.
마찬가지로 기본설치 라이브러리로 별도 설치는 필요없다. <-- email 라이브러리 문서
▼ ▼ ▼띠용? 근데 왜 email 라이브러리가 안먹히는데? ▼▼ ▼
나의 경우 아래와 같이 패키지를 선언했는데도 안먹혔다.
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
그 이유는 구글링에서 알게 되었는데, 내 파이썬 파일명이 email이였던 것이다.
그래서 라이브러리랑 이름이 같아서 잘못인식된것.
파이썬 파일명을 다르게 바꾸니까 해결됐다.
출처 stackoverflow.com/questions/33313858/importerror-no-module-named-email-mime-email-is-not-a-package
다음으로, 메일을 보내는 메일(sender)에 SMTP를 활성화 해야한다.
나의 경우는 구글메일이 sender, 네이버메일을 receiver로 설정했다.
그래서 메일을 발송하는 구글 Gmail의 SMTP를 활성화 하기 위해서 아래와 같이 앱 비빌번호를 설정했다.
1) 구글계정 로그인
2) <보안>-<2단계인증>
3) <보안>-<앱 비밀번호> 아래와 같이 앱을 '메일'로 선택한다.
4) 생성완료 후 패스워드가 발급된다.
그리고 구글메일의 SMTP 서버명과 포트번호를 확인한다.
발신메일서버(지메일) smtp.gmail.com이며 포트는 465를 사용한다.
이렇게 메일을 보내는 쪽의 설정은 완료되었으니, 메일을 받는 쪽에 설정도 필요하다.
마지막으로,메일을 받는 메일(receiver)에 POP3/IMAP를 활성화한다.
네이버메일의 환경설정에서 POP3/IMAP 설정을 확인할 수 있다.
그리고 네이버메일의 IMAP서버명과 포트번호를 확인한다.
수신메일서버(네이버)은 imap.naver.com 이며 포트는 993를 사용한다.
이렇게 메일을 보내는 쪽과 받는쪽의 서버와 포트명이 확인되며 설정이 완료되었다.
메일전송 in Python
일단 간단하게 테스트해볼 수 있었다. 이제 이걸 바탕으로 내가 하고싶은 내용에 맞춰서 변경하면 된다.룰루
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
# basic information
sender = "발송메일주소@gmail.com"
receiver = "수신메일주소@naver.com"
password = "구글앱비밀번호"
# 메일콘텐츠 설정
message = MIMEMultipart('alternative')
message['Subject'] = "메일전송 테스트"
message['From'] = sender
message['To'] = receiver
# Email Body
html = '<h3>hello Email!</h3>'
body = MIMEText(html, 'html')
message.attach(body)
# Send Email
stmp = smtplib.SMTP_SSL('smtp.gmail.com')
stmp.login(sender, password)
stmp.sendmail(sender, receiver, message.as_string())
stmp.quit()
실제로 해당 파이썬코드를 실행시켜보니 메일이 발송되었다.
출처
메일전송프로세스 참고한 곳(네이버-네이버)
나중에 엑셀명단에서 불러와서 대량으로 이메일보내기로 변경해야지
hleecaster.com/python-email-automation/
날씨정보나 뉴스를 크롤링해서 이메일전송 자동화도 되겠다 coder38611.tistory.com/117
나중에 스케쥴링으로 반복전송하기도 해야겟다
'사이드 프로젝트 > 뉴스구독 웹서비스' 카테고리의 다른 글
AWS What's new 뉴스레터5 | 작업스케쥴이 안돌아갔네?시작거부 (0) | 2021.05.04 |
---|---|
AWS What's new 뉴스레터4 | 매주 화요일마다 메일이 전송됩니다~ (0) | 2021.04.20 |
AWS What's new 뉴스레터3 | 크롤링데이터를 이메일로 전송하기 (0) | 2021.04.18 |
AWS what's new 뉴스레터1 | python에서 mongoDB 사용하기 (0) | 2021.04.16 |
AWS What's new 뉴스레터1 | MongoDB를 써볼까?! (0) | 2021.04.16 |
티스토리 포스트 캘린더5 | 깃허브API를 응용해보자 (0) | 2021.04.15 |