본문 바로가기

프로그램&DB/Python

파이썬 메일 읽어오기

파이썬 메일 읽어오기



# =============================================================================
# -*- coding: euc-kr -*-
# =============================================================================
# Title : Mail 가져오기
# =============================================================================
# 대용량 파일 가겨올때는 오류 발생한다 고쳐보기 귀찮아...

# 필요하신분 가져다 사용하세요

# 원본 출처 : http://www.cherrynet.co.kr/bbs_view.php?s=78&pseq=8&mnid=1
import os, sys
import poplib
import email
import mimetypes
from email import Header
from datetime import *
import time
reload(sys); sys.setdefaultencoding('euc-kr')

def decodeHeader(headerMsg) :
 result = Header.decode_header(headerMsg)
 return ''.join([t[0] for t in result])


def readMail(host, userid, passwd) :
 mbox = poplib.POP3(host)
 mbox.user(userid)
 mbox.pass_(passwd)
  noMsg, tsize = mbox.stat()
 sToDay =  str(fnMakeDatTime())
 nStartCnt = 0

 if noMsg > 0 :
  for i in range(nStartCnt,noMsg):
   (server_msg, body, octets) = mbox.retr(int( i+1))
   message = '\n'.join(body)
   msg = email.message_from_string(message)
   sFromEmail =  str(str(decodeHeader(msg['from'])))
   sToEmail  =  str(decodeHeader(msg['to']))
   sSubJect =  str(decodeHeader(msg['subject']))
   sMailDate =  str(msg['date'])
   for part in msg.walk() :
    if part.get_content_maintype().lower() == 'multipart':
     continue
    filename = part.get_filename()
    filename = decodeHeader(filename)
#파일명이 없는경우 None로 저장된다.
    if filename == "None" :
     ext = mimetypes.guess_extension(part.get_content_type())
    else:
#파일명이 있는경우 [.]아래부터 짤라서  처리한다.    
     nPos = filename.find('.')
     ext = filename[nPos:]
     filename = filename
    if not ext:
     ext = '.bin'
#첨부파일이 있는경우 메일 본문내용이 .ksh로 저장된다.
#이를 html로 변경해주면됨.      
    if ext == ".ksh":
     ext =".html"
    if filename == "None":
#1. 순번으로 저장할대 사용     
     filename = 'pat-%03d%s' % (i, ext)

    print filename + ' : file Saved'
    fp = open(filename, 'wb')
    sText = part.get_payload(decode=1)
    fp.write(sText)
    fp.close()

 mbox.quit()
 
if __name__ == '__main__': 
 print '------------- Start  Get Mail -------------'
 #readMail('pop.mail.com','사용자ID','패스워드')
 print '------------- End  Get Mail -------------'