Programming/Python

파이썬 지메일 발송 기본 형식

remake 2024. 2. 20. 14:40

 

파이썬에서 지메일 발송하는 기본 형태입니다.

 

파이썬 메일 발송

 

기본적으로 폴더에 저장된 파일을 첨부파일로 하는 메일 발송 양식입니다. 작업하기전 

 

파이썬에서 이메일을 보내기 위해서는 파이썬 내장 라이브러리(PIL)의 smtplib와 email 모듈을 사용해야하고,

여기서 smtplib의 SMTP(Simple Mail Transfer Protocol)는 메일을 보내는데 사용되는 프로토콜입니다.

다음으로 구글 계정 보안-Google에 로그인 에서 2단계 인증을 해주고, 앱 비밀번호를 추가해줘야 합니다. 앱 비밀번호에서는 메일-추가할 기기(Windows 컴퓨터) 를 클릭해주고 비밀번호를 생성합니다. 생성 뒤 나타나는 16자리 코드를 잘 기억하여 위 코드에서 app_password 변수에 넣어주면 됩니다.

 

import smtplib

from email.mime.text import MIMEText
from email.mime.application import MIMEApplication
from email.mime.multipart import MIMEMultipart
import os
import datetime
import pandas as pd


suffix = datetime.datetime.now().strftime("%y%m%d")
#filename = "_".join([basename, suffix])

#파일정보

s = smtplib.SMTP('smtp.gmail.com', 587)
sendEmail = "발신메일"
recvEmail = "메일1", "메일2"


fileDirs = list()
fileExt = r'.xlsx'
fileDir = r'./log/yt'
me_fileDir = r'./log/me'
allDir =  r'./log'

#폴더 없으면 생성 filedirs에 폴더 추가

folders = ('yt','me')

if os.listdir(fileDir):
    fileDirs.append(fileDir)

if os.listdir(me_fileDir):
    fileDirs.append(me_fileDir)


i = 0

files = list()

#파일 리스트 추가
for k in fileDirs:
    i = i+ 1
    globals()["list_{}".format(i)] = [_ for _ in os.listdir(k) if _.endswith(fileExt)]
    globals()["list_{}".format(i)].sort()
    globals()["file_{}".format(i)] = k+'/'+globals()["list_{}".format(i)][-1]
    files.append(globals()["file_{}".format(i)])



n = 0
merge_df = pd.DataFrame()

#엑셀 파일 추가
for i in files:
    j = n +1
    #print(i)
    df = pd.read_excel(i)
    merge_df = merge_df.append(df)


file_name1 = allDir+suffix+'.xlsx'
merge_df.to_excel(file_name1)



# TLS 보안 시작
s.starttls()

# 로그인 인증
s.login('@gmail.com', '암호')


# 보낼 메시지 설정

msg = MIMEMultipart()

msg['Subject'] = suffix+"메일제목"
msg['From'] = sendEmail
msg['To'] = recvEmail


 #본문 추가

text = "본문 내용"
contentPart = MIMEText(text) #MIMEText(text , _charset = "utf8")
msg.attach(contentPart)

with open(file_name1, 'rb') as etcFD :
    etcPart = MIMEApplication( etcFD.read() )
    #첨부파일의 정보를 헤더로 추가
    etcPart.add_header('Content-Disposition','attachment', filename=file_name1[-14:])
    msg.attach(etcPart)


# 메일 보내기

s.sendmail("@gmail.com", ["메일1","메일2"], msg.as_string())

# 세션 종료

s.quit()

 

파일첨부는 아래와 같은 방식으로 진행합니다.

 

파일 첨부 (데이터파일, 이미지파일, 음악파일)
# 데이터 파일 첨부하기
from email.mime.application import MIMEApplication # 메일의 첨부 파일을 base64 형식으로 변환

file_name = "file.xlsx"

with open(file_name, 'rb') as excel_file : 
    attachment = MIMEApplication( excel_file.read() )
    #첨부파일의 정보를 헤더로 추가
    attachment.add_header('Content-Disposition','attachment', filename=file_name) 
    msg.attach(attachment)
Content-Disposition : 컨텐츠가 브라우저에 inline 되어야 하는 웹페이지 자체이거나 웹페이지의 일부인지, 아니면 attachment로써 다운로드 되거나 로컬에 저장될 용도록 쓰이는 것인지를 알려주는 헤더
attachment : 반드시 다운로드 받아야 하며 대부분의 브라우저는 'Save as'(새이름으로저장) 창을 보여줌
filename :  메일 수신자에서 설정되는 파일 이름

 

 

 

https://docs.python.org/ko/3/library/email.examples.html#email-examples

 

email: Examples

Here are a few examples of how to use the email package to read, write, and send simple email messages, as well as more complex MIME messages. First, let’s see how to create and send a simple text ...

docs.python.org