728x90
반응형

파이썬 메일 보내는 방법 

파이썬에서 메일 보내는 방법에 대한 코드 공유입니다. 

리눅스에 설치된 SendMail 서버를 통해 첨부 파일과 함께 메일을 보내는 예제입니다. 

코드양은 많지 않아 별도로 설명 하지는 않습니다. 

 

조금씩 수정해 보면서 사용자 용도에 맞게 변경해서 적용해 보세요

Python STMT Mail Send 코드

  • python2.7 환경에서 작성되었습니다. 
  • 메일주소는 테스트할 주소에 맞게 수정해서 테스트하세요 
  • 메일서버 구성은 해당 글을 참고 하세요 
#!/usr/bin/python
# -*- coding:utf-8 -*-

import sys
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
import smtplib
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email.mime.multipart import MIMEMultipart
from email.header import Header
from email.encoders import encode_base64
from email import Utils
from email import Encoders 
import os

sys.setdefaultencoding("utf-8")

STMT_HOST='localhost'
PORT = 25

COMMASPACE = ", "
class StmtMail:
    def __init__(self):
        self.stmt_host = STMT_HOST
        self.port = PORT
        self.from_user = ''
        self.to_user = ''

    def sendmail(self,from_user, to_user, cc_users, subject, contents, attach):
        
        try:
            print " Mail Send "        
            msg = MIMEMultipart()
            #msg = MIMEMultipart("alternative")
            msg["From"] = from_user
            msg["To"] = to_user
            msg["Cc"] = COMMASPACE.join(cc_users)
            msg["Subject"] = Header(s=subject, charset="utf-8")
            msg["Date"] = Utils.formatdate(localtime = 1)
            msg.attach(MIMEText(contents, "html", _charset="utf-8"))
        
            if (attach != None):
                    part = MIMEBase("application", "octet-stream" ,charset="utf8")
                    part.set_payload(open(attach, "rb").read())
                    Encoders.encode_base64(part)
                    part.add_header("Content-Disposition", 'attachment; filename="%s"' % os.path.basename(attach))
                    msg.attach(part)

            smtp = smtplib.SMTP(self.stmt_host, self.port)
            smtp.sendmail(from_user, cc_users, msg.as_string())
            smtp.close()
        except Exception, e:
            exc_type, exc_value, exc_traceback = sys.exc_info()
            print "[-] Error       : %s " % e
            print "[-] line number :  " , exc_traceback.tb_lineno


if __name__=="__main__":

    try:
        print " Mail Send "
        stmtmail = StmtMail()
        stmtmail.sendmail("example@co.kr", "example@co.kr", ["example@co.kr"] \
                , "Python Send Mail Test " \
                , "TEST MAIL" \
                , None) 

    except Exception, e:
        exc_type, exc_value, exc_traceback = sys.exc_info()
        print "[-] Error       : %s " % e
        print "[-] line number :  " , exc_traceback.tb_lineno

 

테스트 결과 

  • sendmail.py 실행
(py27) [pythontest@centos7:/home/pythontest/venv/py27/test]$ python sendmail.py 
 Mail Send 
 Mail Send 

스팸 메일로 정상적으로 메일이 전송되었습니다. 

728x90
반응형

+ Recent posts