首页 > 编程语言 >python使用exchangelib读取、保存exchange邮件

python使用exchangelib读取、保存exchange邮件

时间:2023-05-19 14:13:06浏览次数:47  
标签:exchange python datetime filter exchangelib print path message subject

import os
from datetime import datetime

import pytz
from exchangelib import Credentials, Account, Configuration, DELEGATE, Q, FileAttachment


def received_exchange_message():
    """
    接收exchange邮件,保存邮件到本地
    :return: 
    """
    # 创建连接
    config = Configuration(
        server='exchange.example.com',  # Exchange Web Services URL
        credentials=Credentials('域名\\username', 'password')
    )

    account = Account(
        primary_smtp_address='[email protected]',
        config=config,
        autodiscover=False,
        access_type=DELEGATE
    )

    # 设置时区
    # tz = EWSTimeZone('Asia/Shanghai')
    tz = pytz.timezone('Asia/Shanghai')

    # 过滤收件箱中当天未读邮件,并按照多个主题过滤
    today = datetime.now(tz).date()
    start_of_day = tz.localize(datetime.combine(today, datetime.min.time()))
    end_of_day = tz.localize(datetime.combine(today, datetime.max.time()))

    subject_filter_1 = Q(subject__icontains='主题1')
    subject_filter_2 = Q(subject__icontains='主题2')
    unread_filter = Q(is_read=False) & Q(datetime_received__lte=end_of_day) & Q(datetime_received__gte=start_of_day) & (
            subject_filter_1 | subject_filter_2)

    unread_messages = account.inbox.filter(unread_filter)

    save_path = 'C:\\attachments\\'

    for message in unread_messages:
        print(message.subject)
        print(message.sender.email_address)
        print(message.datetime_received.astimezone())
        print(message.body)

        for attachment in message.attachments:
            if isinstance(attachment, FileAttachment):
                # attachment.download(save_path)
                # attachment.content_location
                # print(f"Attachment saved: {os.path.join(save_path, attachment.name)}")
                file_path = os.path.join(save_path, attachment.name)
                with open(file_path, 'wb') as f:
                    f.write(attachment.content)
                    print(f"Attachment saved: {file_path}")
        # 将邮件设置为已读
        message.is_read = True
        message.save()
        print(f"Marked as read: {message.subject}")

    # 保存邮件到本地,eml格式
    for email in unread_messages:
        # 注意保存时的主题特殊字符等情况的替换,否则会保存失败
        with open(f'{email.subject}.eml', 'wb') as f:
            f.write(email.mime_content)

标签:exchange,python,datetime,filter,exchangelib,print,path,message,subject
From: https://www.cnblogs.com/rong-z/p/17414923.html

相关文章

  • centos 8 安装python3
    sudodnfinstallpython3  查看版本 查看pip ......
  • 01_Python 基础
    01_Python基础Python解释器&pycharm安装注释#变量常量input#输入框if#条件判断while#循环关键字continuebreak关键字pass01.for循环for变量in可迭代的东西:代码把可迭代的东西中的每一项内容拿出来,挨个的赋值给变量,每一次赋值都要执行......
  • python os.environ操作环境变量
    1、.env文件数据添加到环境变量load_dotenv(ROOT_DIR+'/.env',verbose=True)或load_dotenv(find_dotenv('.env')2、新增环境变量,其中key和value均为string类型os.environ['环境变量名称']='环境变量值'  环境变量立刻生效,从设置开始后面的运行部分都能获取到该变量os.e......
  • github报错“ssh_exchange_identification: Connection closed by remote host fatal:
    解决方式:不确定是否为密钥过期还是C:\Users\John\.ssh文件夹下的config文件中没有添加github的host。总之,所有的尝试如下:(1)重新生成公钥和私钥。打开gitbash,输入以下命令获取自己github的email。gitconfiguser.email 生成ssh私钥和公钥ssh-keygen-trsa-......
  • python面试题汇总
    以下是一些常见的Python面试题以及它们的答案:Python中的GIL是什么,有何作用?GIL全称GlobalInterpreterLock,是Python解释器在多线程情况下保证线程安全的一种机制。GIL确保同一时间只有一个线程可以执行Python字节码,从而避免了由于多个线程同时修改共享数据造成的竞态条件问题。解释......
  • 使用Python脚本修改Linux用户的密码
    直接上代码使用python,通过系统默认的passwd命令,修改用户Tom的密码为NewPasswordimportsubprocess#Gettheusernameandnewpasswordfromtheuserusername="Tom"new_password="NewPassword"#Usethe'passwd'commandtoupdatethepassword#Th......
  • 【视频】风险价值VaR原理与Python蒙特卡罗Monte Carlo模拟计算投资组合实例|附代码数
    原文链接:http://tecdat.cn/?p=22862 最近我们被客户要求撰写关于风险价值VaR的研究报告,包括一些图形和统计输出。风险价值(VaR)是一种统计数据,用于量化公司、投资组合在特定时间范围内可能发生的财务损失程度 ( 点击文末“阅读原文”获取完整代码数据******** )。什么是风......
  • Python中TensorFlow的长短期记忆神经网络(LSTM)、指数移动平均法预测股票市场和可视化
    原文链接:http://tecdat.cn/?p=23689 最近我们被客户要求撰写关于长短期记忆神经网络的研究报告,包括一些图形和统计输出。本文探索Python中的长短期记忆(LSTM)网络,以及如何使用它们来进行股市预测 ( 点击文末“阅读原文”获取完整代码数据******** )。在本文中,你将看到如何使用......
  • python+playwright 学习-63 table表格定位
    前言定位table表格内容以及获取table表格数据。table表格场景网页table表格示例table页面有这几个明显的标签:table、tr、th、td<table>标示一个表格<tr>标示这个表格的一行</th>定义表头单元格</td>定义单元格标签,一组<td>标签将将建立一个单元格,<td>标签必须放......
  • python内置库--os.path
    1简单介绍os.path模块提供了一系列函数,以便我们处理目录路径和文件2部分函数介绍os.path.abspath(path)对于path,返回其在该系统的绝对路径os.path.basename(path)返回路径path中的最后一部分os.path.commonprefix(list)接受包含多个路径的列表,返回所有路径的最长公......