Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import email
- import getpass, imaplib
- import os
- import sys, shutil
- import datetime
- import logging
- ##
- ## Variables to set
- ##
- detach_dir = '/tmp'
- archive_dir = 'archive'
- userName = 'uuuu'
- passwd = 'pppppppp'
- mailserver='mail.mmmm.com'
- # actual time and date
- now = datetime.datetime.now()
- if not os.path.isdir(detach_dir):
- os.mkdir(detach_dir)
- log_file=os.path.join(detach_dir,'imap.log')
- logging.basicConfig(filename=log_file,format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
- logger = logging.getLogger('imap')
- logger.setLevel(logging.DEBUG)
- if archive_dir not in os.listdir(detach_dir):
- logger.warning('archive directory does not exist, crating one..')
- os.mkdir(os.path.join(detach_dir,archive_dir))
- # create logger
- # create console handler and set level to debug
- ch = logging.StreamHandler()
- ch.setLevel(logging.DEBUG)
- # create formatter
- formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
- # add formatter to ch
- ch.setFormatter(formatter)
- # add ch to logger
- logger.addHandler(ch)
- # 'application' code
- # logger.debug('debug message')
- def get_attachments():
- try:
- # logging into account
- logger.debug('username: %s, passwd: %s' %(userName,passwd))
- imapSession = imaplib.IMAP4_SSL(mailserver)
- typ, accountDetails = imapSession.login(userName, passwd)
- logger.info('Logging answer: %s' % typ)
- if typ != 'OK':
- print 'Not able to sign in!'
- raise
- # open INBOX directory and search only for UNSEEN (unread) messages
- imapSession.select('INBOX')
- typ, data = imapSession.search(None, 'UNSEEN')
- logger.debug('Opening INBOX directory answer: %s' % typ)
- if typ != 'OK':
- print 'Error searching Inbox.'
- raise
- # Iterating over all unseen emails
- for msgId in data[0].split():
- typ, messageParts = imapSession.fetch(msgId, '(RFC822)')
- logger.debug('Fetching whole email message answer: %s' % typ)
- if typ != 'OK':
- print 'Error fetching mail.'
- raise
- emailBody = messageParts[0][1]
- mail = email.message_from_string(emailBody)
- # iterating over all attachments in email
- for part in mail.walk():
- if part.get_content_maintype() == 'multipart':
- # print part.as_string()
- continue
- if part.get('Content-Disposition') is None:
- # print part.as_string()
- continue
- # get the filename of attachment
- fileName = part.get_filename()
- logger.debug('I have found file: %s' % fileName)
- if bool(fileName):
- # full path to file where attachment should be saved
- # filePath = os.path.join(detach_dir, 'archive', fileName)
- filePath = os.path.join(detach_dir, fileName)
- # move existing file to the archive
- if os.path.isfile(filePath):
- logger.debug('Moving old %s to %s dir.' % (fileName,archive_dir))
- try:
- deltatime = now - datetime.timedelta(days=7)
- path_date = deltatime.strftime("%Y-%m-%d")
- new_fileName = '%s_%s' % (path_date,fileName)
- shutil.move(filePath,os.path.join(detach_dir,archive_dir,new_fileName))
- except:
- logger.error('Couldnt move %s to %s directory' % (fileName, archive_dir))
- logger.info('Attachment %s will be saved as %s' % (fileName,filePath))
- # if not os.path.isfile(filePath) :
- # print fileName
- fp = open(filePath, 'wb')
- fp.write(part.get_payload(decode=True))
- fp.close()
- imapSession.close()
- imapSession.logout()
- return 0
- except :
- logger.error('Not able to download all attachments.')
- return 1
- if __name__ == '__main__':
- logger.info('IMAP script session opened.')
- get_attachments()
- logger.info('IMAP script session closed.')
Add Comment
Please, Sign In to add comment