본문 바로가기
사이드 프로젝트/뉴스구독 웹서비스

AWS What's new 뉴스레터2 | 이메일 전송 사전준비 및 이해

by 카프리썬 2021. 4. 18.
728x90

지금까지 이전에 진행했던 부분까지 수정을 완료했다.

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를 보통 메일을 발송할때 사용된다고 보면 된다.

 

 이메일 전송 흐름 (출처 : http://blog.naver.com/PostView.nhn?blogId=lsh00124&logNo=220533056400)

위에서 보는것 처럼

맨처음 메일을 만들어서 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.mime이 없다는데?

그 이유는 구글링에서 알게 되었는데, 내 파이썬 파일명이 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()

실제로 해당 파이썬코드를 실행시켜보니 메일이 발송되었다.

 

출처

메일전송프로세스 참고한 곳(네이버-네이버)

ai-creator.tistory.com/306

나중에 엑셀명단에서 불러와서 대량으로 이메일보내기로 변경해야지
hleecaster.com/python-email-automation/

underflow101.tistory.com/33

날씨정보나 뉴스를 크롤링해서 이메일전송 자동화도 되겠다 coder38611.tistory.com/117

나중에 스케쥴링으로 반복전송하기도 해야겟다

dev200ok.blogspot.com/2020/06/1.html

반응형

$(document).ready(function() { var $toc = $("#toc"); $toc.toc({content: ".tt_article_useless_p_margin", headings: "h2,h3,h4"}); });