ㅁ 개요
O 프로그램 소개
- 이번 글은 이전글(2022.12.21 - [분류 전체보기] - (프로젝트) QR코드로 사랑하는 사람에게 감사의 메시지를 보내세요.~ - 2. QR코드 이미지 생성)에 이은 3번째 첨부파일을 포함한 이메일 발송 방법에 대하여 알아보겠습니다.
O 완성된 프로그램 실행 화면
1. 프로그램을 실행하면 아래와 같이 지정된 이메일 주소로 우리가 이전글에서 생성한 QR코드이미지가 정상적으로 발송된 것을 확인할 수 있습니다.
첫번째 메일 수신자 : pygichacha@gmail.com (secuhelper가 보낸메일)
![](https://blog.kakaocdn.net/dn/OR0Aq/btrT9WDAgI7/TjJB1tUOpDfPSbQ4rdu5BK/img.png)
아래에서 첨부된 이미지가 잘 전송된 것을 볼 수 있습니다.
(메일 수신자는 나(pygichacha)와 secuhelper 2명이며, 메일 발송자는 secuhelper)
![](https://blog.kakaocdn.net/dn/miKUK/btrT98RkPb6/CsaKoZUKSNEBhIqhHOyHQ0/img.png)
두번째 메일 수신자 : secuhelper@naver.com (secuhelper가 보낸메일)
![](https://blog.kakaocdn.net/dn/cOJVI6/btrT8qrCBt5/tqDrYFGDoZ6nNpAghKXvK0/img.png)
마찬가지로 2번째 수신자의 경우에도 받은메일함에서 정상적으로 이미지 파일을 확인할 수 있습니다.
![](https://blog.kakaocdn.net/dn/MzQtw/btrT9NUa1pB/3ErLURQqWPHlPKuGrK8KBk/img.png)
O 시작전 준비 사항
1. 프로그램을 실행하기 위해서는 아래 모듈들이 필요합니다. 아래와 같이 임포트(설치) 해줍니다.
import smtplib
from email.encoders import encode_base64
from email.header import Header
from email.mime.base import MIMEBase
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.utils import formatdate
import os
※ 설치 시 에러가 발생거나, 궁금하신 점이 있으시면 댓글로 문의 주시면 친절하게 답변드리겠습니다.
2. 추가로 메일을 발송하기 위해서는 네이버메일 '환경설정'에서 아래의 설정을 변경해 주셔야 합니다.
환경설정 > POP3/IMAP 설정 > IMAP/SMTP 설정 > '사용함' 으로 선택 후 '저장' 클릭
![](https://blog.kakaocdn.net/dn/vO6cL/btrT7GOYxNZ/KTennlinHEcQOIQutXF5bk/img.png)
위와 같이 되셨다면 이메일을 발송할 수 있는 준비가 되었으며, 다음 단계로 넘어가실 수 있습니다.
ㅁ 세부 내용
O 완성된 소스
**아래 소스는 아래 사이트를 참고하여 작성하였으며, 세부내용은 아래 사이트를 참고하여 주시기 바랍니다.
[출처] 096 이메일에 파일을 첨부하려면? ― smtplib|작성자 WikiDocs, 점프 투 파이썬 - 라이브러리 예제 편
소스 : 2.py
# -*- coding: utf-8 -*-
import smtplib
from email.encoders import encode_base64
from email.header import Header
from email.mime.base import MIMEBase
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.utils import formatdate
import os
################################################################
# 2. 이메일 발송
################################################################
msg = MIMEMultipart()
emailList = '메일 수신자 주소' # ,(콤마)로 구분하여 다수에게 메일 발송 가능(abcd@naver.com, efgh@gmail.com)
emailTitle = 'QR코드 이미지 전송 테스트'
emailContent = 'QR코드 이미지 전송 테스트'
msg['From'] = '본인의 네이버 메일 계정' #abcd@naver.com
msg['To'] = emailList
msg['Date'] = formatdate(localtime=True)
msg['Subject'] = Header(s=emailTitle, charset='utf-8')
body = MIMEText(emailContent, _charset='utf-8')
msg.attach(body)
files = list()
files.append('hello.png')
for f in files:
part = MIMEBase('application', "octet-stream")
part.set_payload(open(f, "rb").read())
encode_base64(part)
part.add_header('Content-Disposition', 'attachment; filename="%s"' % os.path.basename(f))
msg.attach(part)
debugMessage = mailServer.set_debuglevel(True) # 메일발송이 정상적인지 확인을 위해 디버그 설정
print(debugMessage, type(debugMessage))
mailServer = smtplib.SMTP_SSL('smtp.naver.com')
mailServer.login('본인의 네이버메일 계정', '본인의 네이버 계정 패스워드') # 본인 계정과 비밀번호 사용.
mailServer.send_message(msg)
mailServer.quit()
O 소스 실행 방법
O 주요 내용
1.소스코드에서 먼저 이메일 관련 모듈을 임포트 해줍니다.
![](https://blog.kakaocdn.net/dn/kIuQW/btrUabUJCQe/emsH87dtYMLsEWdKrI8y4k/img.png)
아래 소스에 대한 자세한 내용은 하단의 "소스 분석"을 참고하여 주시기 바라며, 간단히 요약 하면 아래와 같습니다.
보낼 메일에 대한 발신자,수신자, 날짜, 제목, 본문을 설정 후 첨부파일(이미지)을 붙여 줍니다.
첨부파일이 여러개 있을 수 있으므로 for루프로 처리하였고, 이후 메일서버 설정 후 메일 발송이 정상적으로 되었는지 확인하기 위하여 디버그를 설정해 주었습니다.
최종적으로 메일서버에 로그인 후 작성한 메시지를 발송하고 서버와의 연결을 종료 합니다.
![](https://blog.kakaocdn.net/dn/bgWpUF/btrUjjD18wz/NzizE9dVKeC8WU8NDp2pj1/img.png)
2. 프로그램을 실행하면 아래와 같이 실행됩니다.
디버그 모드를 "True"로 설정하였으므로 아래와 같이 자세한 정보(서버와 주고 받은 내용)가 나오며, 하단에 보낸 이메일 주소와 받은 이메일주소를 볼 수 있습니다.
![](https://blog.kakaocdn.net/dn/PBmTZ/btrUgdY2Gjf/IsLyEVu5NH83aVLMsHDcuk/img.png)
디버그 내용 중 아래쪽에 'retcode (250)' 와 같은 내용이 있다면 정상적으로 이메일이 발송된 것입니다.
![](https://blog.kakaocdn.net/dn/cSsEak/btrUfKv3yMS/zPAkGkSRMnK2LdoxTqtLQK/img.png)
3.실제 지메일에 가서 확인한 모습입니다.
아래를 보니 secuhelper이 보낸사람이고, 받는사람은 pygichacha@gmail.com 입니다.
![](https://blog.kakaocdn.net/dn/OR0Aq/btrT9WDAgI7/TjJB1tUOpDfPSbQ4rdu5BK/img.png)
클릭하여 메일 본문을 확인해 보니, 정상적으로 우리가 보낸 이미지가 보입니다.
![](https://blog.kakaocdn.net/dn/miKUK/btrT98RkPb6/CsaKoZUKSNEBhIqhHOyHQ0/img.png)
4.메일 발송시 수신자를 2명(secuhelper, pygichacha)으로 했었는데, 네이버 메일도 확인해 보니,
아래와 같이 잘 받아진것을 확인할 수 있습니다.
![](https://blog.kakaocdn.net/dn/cOJVI6/btrT8qrCBt5/tqDrYFGDoZ6nNpAghKXvK0/img.png)
클릭하여 메일 본문을 보니 이미지도 잘 받아졌습니다.
![](https://blog.kakaocdn.net/dn/MzQtw/btrT9NUa1pB/3ErLURQqWPHlPKuGrK8KBk/img.png)
5. 네이버 메일로 발송을 했었는데, 발송자가 누구인지 확인한 결과 아래와 같이 'secuhelper@naver.com'으로 예상했던 대로 나오고 있습니다.
![](https://blog.kakaocdn.net/dn/nULOV/btrUaqKYxGV/m3NaA2BFuTer8J05qP6660/img.png)
O 소스 분석
msg = MIMEMultipart() # 객채 생성
#변수 설정
emailList = 'pygichacha@gmail.com,secuhelper@naver.com'
emailTitle = 'QR코드 이미지 전송 테스트'
emailContent = 'QR코드 이미지 전송 테스트'
#msg객체에 메일 발송자,수신자, 날짜, 제목 설정
msg['From'] = 'secuhelper@naver.com'
msg['To'] = emailList
msg['Date'] = formatdate(localtime=True)
msg['Subject'] = Header(s=emailTitle, charset='utf-8')
body = MIMEText(emailContent, _charset='utf-8') # 메일 본문 설정
msg.attach(body) # 메일 본문을 attach()함수로 연결
files = list() # 파일 첨부를 위한 리스트 만듦
files.append('hello.png') # 이전 글에서 생성한 이미지를 append()함수로 붙여줌
for f in files: # 첨부파일이 여러개인 경우 for루프 처리
part = MIMEBase('application', "octet-stream") # 첨부파일은 MIMEBase('application', "octet-stream") 와 같은 명령을 사용해야 함
part.set_payload(open(f, "rb").read())
encode_base64(part)
part.add_header('Content-Disposition', 'attachment; filename="%s"' % os.path.basename(f))
msg.attach(part)
mailServer = smtplib.SMTP_SSL('smtp.naver.com') # 메일 서버 설정
debugMessage = mailServer.set_debuglevel(True)#<-- 메일 발송여부를 확인하기 위해 디버그 설정
print(debugMessage, type(debugMessage)) # 디버그 메시지에 'retcode (250)' 가 포함되어 있으면 정상 발송한 것임
mailServer.login('', '') # 본인 네이버 계정과 비밀번호 사용.
mailServer.send_message(msg) # 메일 발송
mailServer.quit() # 메일 서버 연결 종료
ㅁ 정리
O 우리가 배운 내용
오늘은 여기까지이며, 위의 내용이 유익하셨다면, 좋아요와 구독 부탁드립니다.
감사합니다.
※ 추가적인 정보는 아래 유튜브 영상에서 해당 내용을 더욱 자세히 보실 수 있습니다.
'파이썬 프로젝트 및 응용 > QR코드로 사랑하는 사람에게 감사의 메시지 보내기' 카테고리의 다른 글
(프로젝트) QR코드로 사랑하는 사람에게 감사의 메시지를 보내세요.~ - 4. QR코드이미지+이메일발송 프로그램 만들기 (3) | 2022.12.28 |
---|---|
(프로젝트) QR코드로 사랑하는 사람에게 감사의 메시지를 보내세요.~ - 2. QR코드 이미지 생성 (2) | 2022.12.28 |
(프로젝트) QR코드로 사랑하는 사람에게 감사의 메시지를 보내세요.~ - 1.소개편 (2) | 2022.12.28 |