#! /usr/bin/env
# -*- encoding: utf-8 -*-
import imaplib
import email
import argparse
import logging
class GetEmail(object):
def __init__(self, class_args):
self.args = class_args
self.map4 = None
def process(self):
self.map4 = imaplib.IMAP4_SSL("pop.gmail.com", 993)
self.map4.login(self.args.username, self.args.password)
self.map4.select()
if self.args.type == 'mo':
self.filter_data("hello world", True)
elif self.args.type == 'flow':
self.filter_data("hello python", False)
self.map4.close()
self.map4.logout()
def filter_data(self, signature, is_mo):
typ, data = self.map4.search(None, 'Subject', signature)
logger.info("Get %d letters", len(data[0].split()))
f = open(self.args.file, "a+")
logger.info("The total number of letters:%d", len(data[0].split()))
letter_pos = 0
for num in data[0].split():
letter_pos = letter_pos + 1
if letter_pos < self.args.number:
continue
logger.info("Now,deal letter %d ,the id is %s ", letter_pos, num)
typ, data = self.map4.fetch(num, '(RFC822)')
messages = email.message_from_string(data[0][1])
subject = messages.get("Subject")
h = email.Header.Header(subject)
dh = email.Header.decode_header(h)
if dh[0][1] is not None:
subject = unicode(dh[0][0], dh[0][1]).encode('utf8')
else:
subject = dh[0][0]
j = 0
for part in messages.walk():
j = j + 1
content_type = part.get_content_type()
if content_type == 'text/plain':
data = part.get_payload(decode=True)
content = str(data)
if is_mo:
beg_pos = content.find('zk_moid_num:')
beg_time = subject.rfind(',') + 1
else:
beg_pos = content.find('Index Name: nxgnetflow, # of logs:')
beg_time = subject.rfind('from') + 4
if beg_pos != -1:
end_pos = content.find('\n', beg_pos)
f.write('time:%s\t%s\n' % (subject[beg_time:], content[beg_pos:end_pos]))
f.flush()
f.close()
def main(args):
get_email = GetEmail(args)
get_email.process()
if __name__ == "__main__":
logging.basicConfig(level=logging.INFO, format='%(name)s %(asctime)s %(levelname)s %(message)s')
logger = logging.getLogger("GetEmail")
# create the top-level parser
parser = argparse.ArgumentParser(prog='Email Receiver')
parser.add_argument('-u', '--username', help='the username of email,example -u test', default="test")
parser.add_argument('-p', '--password', help='the password of email,example -p test', default="test")
parser.add_argument('-f', '--file', help='the path of file,example -f ./tmp.log', default="./tmp.log")
parser.add_argument('-t', '--type', help='the type of data that we will get,mo or flow, example: -t mo',
default="mo")
parser.add_argument('-n', '--number', help='which letter we should start read,example -n 10', type=int,default=1)
args = parser.parse_args()
main(args)
使用python获取email的subject中带有指定字符串的邮件
最新推荐文章于 2023-03-30 09:27:05 发布