使用python获取email的subject中带有指定字符串的邮件

#! /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)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值