• Python3.7读取outlook邮件内容——过滤出苹果应用商店审核未通过的邮件


    [本文出自天外归云的博客园]

    运行环境&前提条件:Windows 10 安装 import 中提到的必要的 python 库

    代码如下:

    from datetime import datetime, timedelta
    import dateutil.parser
    import win32com.client
    import pytz
    
    target_account = "yourAccount@xx.com"
    target_folder = "收件箱"
    app_store_sender_target = "App Store Connect"
    review_not_pass_sig = "We identified one or more issues"
    
    
    def print_email_content(email):
        """
        打印邮件内容
        :param email:
        :return:
        """
        print(f"subject: {email.subject} | unread: {email.Unread}")
        print(f"from: {email.sendername} [{email.senderEmailAddress}]")
        print(f"received date and time: {email.receivedtime}")
        print(f"text: {email.body}")
    
    
    def filter_app_store_review_failed_mail_content(email):
        """
        过滤审核未通过邮件
        :param email:
        :return:
        """
        if app_store_sender_target not in email.subject:
            return None
        if app_store_sender_target not in email.sendername:
            return None
        if review_not_pass_sig not in email.body:
            return None
        return email
    
    
    def get_emails_latest(emails, duration):
        """
        获取近期邮件
        :param emails:
        :param duration:
        :return:
        """
        target_emails = []
        email = emails.GetFirst()
        now = pytz.UTC.localize(datetime.now())
        while emails:
            received_time = dateutil.parser.parse(str(email.receivedtime))
            email = emails.GetNext()
            if not email:
                break
            if now - timedelta(days=duration) < received_time:
                target_emails.append(email)
        print(f"filter emails in duration {duration} day(s): {len(target_emails)}")
        return target_emails
    
    
    class OutLook:
        def __init__(self):
            self.outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
    
        def init_account_folders(self, account_name):
            for account in self.outlook.Folders:
                if str(account) == account_name:
                    print(f"choose account: {account}")
                    self.account_folders = account.Folders
    
        def get_emails_under(self, folder_name):
            for folder in self.account_folders:
                if str(folder) == folder_name:
                    emails = folder.Items
                    print(f"choose folder: {folder}({len(emails)})")
                    return emails
    
    
    if __name__ == '__main__':
        outlook = OutLook()
        outlook.init_account_folders(target_account)
        emails = outlook.get_emails_under(target_folder)
        latest_emails = get_emails_latest(emails, 1)
        review_not_passed_emails = []
        for email in latest_emails:
            if filter_app_store_review_failed_mail_content(email):
                review_not_passed_emails.append(email)
        print(f"review not passed emails count: {len(review_not_passed_emails)}")

    效果如下:

    参考资料:

    • https://www.linuxtut.com/en/8a285522b0c118d5f905/
    • https://stackoverflow.com/questions/5077625/reading-e-mails-from-outlook-with-python-through-mapi
  • 相关阅读:
    第一次冲刺个人博客03
    第一次冲刺个人博客02
    《梦断代码》阅读笔记01
    “进度条”博客——第十一周
    “进度条”博客——第十周
    “进度条”博客——第九周
    站立会议个人博客10(2016/4/28)
    站立会议个人博客9(2016/4/27)
    站立会议个人博客8(2016/4/26)
    站立会议个人博客7(2016/4/25)
  • 原文地址:https://www.cnblogs.com/LanTianYou/p/15994361.html
Copyright © 2020-2023  润新知