ㅁ 개요
O 프로그램 소개
- 이번 글은 이전글(2022.12.21 - [분류 전체보기] - (프로젝트) QR코드로 사랑하는 사람에게 감사의 메시지를 보내세요.~ - 2. QR코드 이미지 생성)에 이은 3번째 첨부파일을 포함한 이메일 발송 방법에 대하여 알아보겠습니다.
O 완성된 프로그램 실행 화면
1. 프로그램을 실행하면 아래와 같이 지정된 이메일 주소로 우리가 이전글에서 생성한 QR코드이미지가 정상적으로 발송된 것을 확인할 수 있습니다.
첫번째 메일 수신자 : pygichacha@gmail.com (secuhelper가 보낸메일)
아래에서 첨부된 이미지가 잘 전송된 것을 볼 수 있습니다.
(메일 수신자는 나(pygichacha)와 secuhelper 2명이며, 메일 발송자는 secuhelper)
두번째 메일 수신자 : secuhelper@naver.com (secuhelper가 보낸메일)
마찬가지로 2번째 수신자의 경우에도 받은메일함에서 정상적으로 이미지 파일을 확인할 수 있습니다.
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 설정 > '사용함' 으로 선택 후 '저장' 클릭
위와 같이 되셨다면 이메일을 발송할 수 있는 준비가 되었으며, 다음 단계로 넘어가실 수 있습니다.
ㅁ 세부 내용
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.소스코드에서 먼저 이메일 관련 모듈을 임포트 해줍니다.
아래 소스에 대한 자세한 내용은 하단의 "소스 분석"을 참고하여 주시기 바라며, 간단히 요약 하면 아래와 같습니다.
보낼 메일에 대한 발신자,수신자, 날짜, 제목, 본문을 설정 후 첨부파일(이미지)을 붙여 줍니다.
첨부파일이 여러개 있을 수 있으므로 for루프로 처리하였고, 이후 메일서버 설정 후 메일 발송이 정상적으로 되었는지 확인하기 위하여 디버그를 설정해 주었습니다.
최종적으로 메일서버에 로그인 후 작성한 메시지를 발송하고 서버와의 연결을 종료 합니다.
2. 프로그램을 실행하면 아래와 같이 실행됩니다.
디버그 모드를 "True"로 설정하였으므로 아래와 같이 자세한 정보(서버와 주고 받은 내용)가 나오며, 하단에 보낸 이메일 주소와 받은 이메일주소를 볼 수 있습니다.
디버그 내용 중 아래쪽에 'retcode (250)' 와 같은 내용이 있다면 정상적으로 이메일이 발송된 것입니다.
3.실제 지메일에 가서 확인한 모습입니다.
아래를 보니 secuhelper이 보낸사람이고, 받는사람은 pygichacha@gmail.com 입니다.
클릭하여 메일 본문을 확인해 보니, 정상적으로 우리가 보낸 이미지가 보입니다.
4.메일 발송시 수신자를 2명(secuhelper, pygichacha)으로 했었는데, 네이버 메일도 확인해 보니,
아래와 같이 잘 받아진것을 확인할 수 있습니다.
클릭하여 메일 본문을 보니 이미지도 잘 받아졌습니다.
5. 네이버 메일로 발송을 했었는데, 발송자가 누구인지 확인한 결과 아래와 같이 'secuhelper@naver.com'으로 예상했던 대로 나오고 있습니다.
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 |