본문 바로가기

Dev/Python

python과 구글 smtp 서버를 이용해 email을 전송해보자

 주식종목분석기에 따른 일일별 결과를 자동으로 메일링 받아보는 기능도 만들어두면 좋을것 같아서 구글링을 통해 메일 전송 기능도 구현해 보았다. 블로그에 포스팅 하는 것과 별개로 KOSPI, KOSDAQ 모든 종목들의 기술지표를 엑셀 시트로 뽑아서 나름 이것저것 분석해보는 작업도 해보는지라 파일 첨부 기능도 추가로 구현하였다.

import smtplib
import os
import markdown
from config.config import config
from email import encoders  
from email.mime.base import MIMEBase
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

class MailService:
  smtp = None

  def open_smtp(self, id, password):
    self.smtp = smtplib.SMTP('smtp.gmail.com', 587)
    self.smtp.ehlo()
    self.smtp.starttls()
    self.smtp.login(id, password)

  def send_mail(self, mail_to, title, contents, mimetype, attachments):
    msg = MIMEMultipart()  # msg obj.
    msg['Subject'] = title
    msg['To'] = mail_to
    contents = MIMEText(contents, mimetype)
    msg.attach(contents)
    if attachments is not None:
      for attach in attachments:
        with open(attach['path'], 'rb') as f:
          part = MIMEBase("application", "octet-stream")
          part.set_payload(f.read())
          encoders.encode_base64(part)
          part.add_header('Content-Disposition', 'attachment', filename=attach['filename'])
          msg.attach(part)
    self.smtp.sendmail(config["GOOGLE"]["LOGIN_ID"], mail_to, msg.as_string())
    print("[EMAIL] from: %s to: %s" %(config["GOOGLE"]["LOGIN_ID"], mail_to))

  def close_smtp(self):
    self.smtp.quit()

  def __init__(self, date):
    # 특정 폴더에 첨부파일이 있을때..
    filenames = [f for f in os.listdir(config["REPORT"]["PATH"])]
    title = "타이틀"
    contents = "내용.\n"
    attachments = []
    for filename in filenames:
      item = {}
      item['filename'] = filename
      item['path'] = config["REPORT"]["PATH"] + date + "/" + filename
      attachments.append(item)

    self.open_smtp(config["GOOGLE"]["LOGIN_ID"], config["GOOGLE"]["PASSWORD"])
    for mailto in config["MAILTO"]["DATA"]:
      self.send_mail(mailto, title, contents, 'plain', attachments)
    self.close_smtp()

 소스코드에 있는 config에 대한 부분은 설정값을 읽어들이는 코드인데, 의미만 이해하고 각자의 정보로 치환하면 된다. 이부분에 대한 소스코드가 필요하다면, 아래 링크를 통해 참고할 수 있다.
https://woongbinni.tistory.com/entry/json%ED%8C%8C%EC%9D%BC%EB%A1%9C%EB%B6%80%ED%84%B0-%EC%84%A4%EC%A0%95%EA%B0%92%EC%9D%84-%EC%9D%BD%EC%96%B4%EB%93%A4%EC%9D%B4%EB%8A%94-python-code

 

json파일로부터 설정값을 읽어들이는 python code

https://woongbinni.tistory.com/entry/Python%EA%B3%BC-%ED%8B%B0%EC%8A%A4%ED%86%A0%EB%A6%AC-API%EB%A5%BC-%ED%99%9C%EC%9A%A9%ED%95%98%EC%97%AC-%EA%B8%80%EC%9D%84-%EC%9E%91%EC%84%B1%ED%95%98%EA%B8%B0-%E..

woongbinni.tistory.com