from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import smtplib
# 환경 설정
SETTING = {
'SERVER': 'smtp.daum.net', # SMTP 서버 주소
'PORT': 465, # SMTP 포트
'USER': '이메일 계정', # SMTP 서버 로그인 계정
'PASSWORD': '비밀번호' # SMTP 서버 로그인 비밀번호
}
# 이메일 주소 등록
emails = ['kzkzmang@naver.com', 'kzkz']
# 이메일 주소 체크
def email_check(email):
import re;
# 이메일 체크 정규식
regex = '^[a-zA-Z0-9+-_.]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$'
if re.match(regex, email):
return True
else:
return False
def send_email(emails, subject, content, attach=None):
for email in emails:
if not email_check(email):
print('메일주소를 확인해주세요 => ' + email)
return
# MIME 형식 설정
if attach:
#첨부파일이 존재할 경우
mime = MIMEMultipart('mixed')
else:
mime = MIMEMultipart('alternative')
mime['From'] = SETTING.get('USER')
mime['To'] = email
mime['Subject'] = subject
contents = content
text = MIMEText(_text = contents, _charset = 'utf-8')
mime.attach(text)
if attach:
from email.mime.base import MIMEBase
from email import encoders
import os
data = MIMEBase('application', 'octect-stream')
data.set_payload(open(attach, 'rb').read())
encoders.encode_base64(data)
filename = os.path.basename(attach)
data.add_header('Content-Disposition', 'attachment', filename=('UTF-8', '', filename))
mime.attach(data)
smtp = smtplib.SMTP_SSL(SETTING.get('SERVER'), SETTING.get('PORT'))
smtp.login(SETTING.get('USER'), SETTING.get('PASSWORD'))
smtp.sendmail(SETTING.get('USER'), email, mime.as_string())
smtp.close()
print('메일 발송 완료 ==> ' + email)
send_email(emails, '제목', '내용')
실제로 테스트해 본 이미지이다.
테스트 완료파일을 첨부하여 보냈을 때
대량으로 이메일 전송하기가 끝이 났다. 생각보다 이메일 전송은 쉽게 할 수 있고, 여기서 더 나아가 성공, 실패를 카운트하여 그래프를 그려도 되고, Restful 하게 만들어 메일 전송의 반환 값을 받아오면 메일 전송 실패 상세 원인까지 가져올 수 있으니 활용도는 다양하다.
하지만, 이건 엄연히 다른 회사의 SMTP 서버를 빌려서 전송하는거라 쉽고, 실제로 SMTP서버를 구성하여 메일 보내기를 하면 생각보다(?) 어렵다.