파이썬 이메일 보내기, 자동으로 하는 방법은?!

2021. 10. 28. 09:52

파이썬으로 가공한 데이터나 자료를 이메일로 받으면 편리하다. 카톡이나 텔레그램 같은 메신저에 간단한 메시지를 보내는 것도 좋지만, 내용이 많은 경우에는 한계가 있다. 파이썬에서 자동으로 이메일 보내는 방법은 어렵지 않다. 오늘은 파이썬 통해 이메일을 보내는 방법에 대해서 알아보도록 하겠다.

 

 

파이썬 이메일 자동 발송



인터넷에서 웹페지를 전송하기 위해서 HTTP프로토콜을 사용하는 것처럼 이메일을 전송하기 위해서는 SMTP(Simple Mail Transfer Protocol)프로토콜을 사용해야 한다. 파이썬에는 smtplib라는 패키지가 있어 쉽게 메일을 발송할 수 있다. 아나콘다 배포판을 설치하였다면 해당 라이브러리는 설치가 돼 있다.

import smtplib

 

 

다음으로 사용하는 이메일 계정의 smtp 서버 도메인 이름을 입력해야 한다. smtp로 검색하면 사용해야 하는 서버와 포트를 찾을 수 있다. gmail의 경우에는 도메인 이름은 smtp.gmail.com이고, 포트는 587이었다.

smtp_gmail = smtplib.SMTP('smtp.gmail.com', 587)

 

 

도메인 이름과 포트를 등록하고 나면 아래의 3가지 작업을 해 주어야 한다. 서버 연결을 설정하고, 연결을 암호화하고, 로그인을 한다. 

# 서버 연결을 설정하는 단계
smtp_gmail.ehlo()
 
# 연결을 암호화
smtp_gmail.starttls()
 
#로그인
smtp_gmail.login('[gmail아이디]@gmail.com','[비밀번호]')

 

 

로그인을 할 때 에러가 발생할 수 있다. 위와 같이 연결하기 위해서는 '보안 수준이 낮은 앱에서 계정에 액세스하도록 허용'이 돼 있어야 한다. 허용이 되어 있지 않다면 'smtplib.SMTPAuthenticationError: (534~' 와 같은 에러 메시지를 받았을 것이다.

아래 주소로 방문하여 보안 수준이 낮은 앱 허용을 사용하면 문제가 해결된다.

( https://myaccount.google.com/lesssecureapps )

보안 수준이 낮은 앱 허용

 


로그인까지 완료되면 sendmail함수를 이용해서 메일을 보낼 수 있다. 다만 제목과 메시지를 구분하거나 첨부파일을 보내는 것이 용이하지 않다. EmailMessage 패키지를 이용하면 편리하게 메시지를 구성할 수 있다. 해당 라이브러리를 import한다. 이 역시 아나콘다 배포판을 사용했다면 이미 설치돼 있다.

from email.message import EmailMessage

 

 

이제 아래와 같이 초기화하고 제목, 메일 내용, 보내는 사람과 받는 사람 이메일 주소를 입력하면 메일을 발송할 수 있다.

msg=EmailMessage()
 
# 제목 입력
msg['Subject']="제목입니다"
 
# 내용 입력
msg.set_content("내용입니다")
 
# 보내는 사람
msg['From']='보내는 이메일 주소'
 
# 받는 사람
msg['To']='받는 이메일 주소'
 
smtp_gmail.send_message(msg)

 

 

첨부파일을 보내려면 send_message 이전에 add_attachment함수를 이용해서 첨부파일을 등록해야 한다. 파일을 읽고 type과 파일명을 지정해서 호출하면 된다. 이미지를 보낼 때는 maintype과 subtype이 바뀌는 듯 한다.

file='./test.csv'
fp = open(file,'rb')
file_data=fp.read()
msg.add_attachment(file_data,maintype='text',subtype='plain',filename="test.csv")

 

 

오늘은 이렇게 파이썬으로 이메일을 보내는 방법에 대해서 알아보았다. smtp라이브러리가 있어 생각보다 쉽게 메일을 보낼 수 있었다. 이제 Open API를 통해 데이터를 받아오는 부분은 자동화하고 결과를 메일로 받아볼 수 있을 듯 하다.

댓글()