python办公自动化之读取本地OUTLOOK客户端邮件

 更新时间:2023年10月24日 08:37:43   作者:ryanlll3  
这篇文章主要为大家详细介绍了如何使用python实现读取本地OUTLOOK客户端邮件,文中的示例代码讲解详细,具有一定的参考价值,需要的小伙伴可以了解下

本方法适用于POP服务器不可用,管理员没有赋予开启权限的情况。你只能读取本地客户端的邮件,否则建议直接开发python程序自动登录服务器,读取邮件。

安装依赖包

python -m pip install pypiwin32

读取邮件

#!/usr/bin/python
# _*_ coding:utf-8 _*_
 
from win32com.client.gencache import EnsureDispatch as Dispatch
 
# 固定写法
outlook = Dispatch("Outlook.Application").GetNamespace("MAPI")
# 根级目录(邮箱名称,包括Outlook读取的存档名称)
Accounts = outlook.Folders
for Account_Name in Accounts:
    print('>> 正在查询的帐户名称:{}'.format(Account_Name.Name))
    # 一级目录集合(与inbox同级)['收件箱', '发件箱', '已发送', 'xxx', 'xxx']
    Level_1_Names = Account_Name.Folders
    for Level_1_Name in Level_1_Names:
        print('- 正在查询一级目录:{}'.format(Level_1_Name.Name))
        # 一级文件夹的mail合集[所有邮件对象]
        Mail_1_Messages = Level_1_Name.Items
        # 将邮件按接收时间排序
        Mail_1_Messages.Sort("[ReceivedTime]", True)
        # 开始查看单个邮件的信息
        for xx in Mail_1_Messages:
            Root_Directory_Name_1 = Account_Name.Name  # 记录根目录名称
            Level_1_FolderName_1 = Level_1_Name.Name  # 记录一级目录名称
            Level_2_FolderName_1 = ''  # 一级目录肯定没有二级目录,顾留为空
            # 接收时间
            if hasattr(xx, 'ReceivedTime'):
                ReceivedTime_1 = str(xx.ReceivedTime)[:-6]
            else:
                ReceivedTime_1 = ''
            # 发件人
            if hasattr(xx, 'SenderName'):
                SenderName_1 = xx.SenderName
            else:
                SenderName_1 = ''
            # 收件人
            if hasattr(xx, 'To'):
                to_to_1 = xx.To
            else:
                to_to_1 = ''
            # 抄送人
            if hasattr(xx, 'CC'):
                cc_cc_1 = xx.CC
            else:
                cc_cc_1 = ''
            # 主题
            if hasattr(xx, 'Subject'):
                Subject_1 = xx.Subject
            else:
                Subject_1 = ''
            # 邮件MessageID
            if hasattr(xx, 'EntryID'):
                MessageID_1 = xx.EntryID
            else:
                MessageID_1 = ''
            # 会话主题
            if hasattr(xx, 'ConversationTopic'):
                ConversationTopic_1 = xx.ConversationTopic
            else:
                ConversationTopic_1 = ''
            # 会话ID
            if hasattr(xx, 'ConversationID'):
                ConversationID_1 = xx.ConversationID
            else:
                ConversationID_1 = ''
            # 会话记录相对位置
            if hasattr(xx, 'ConversationIndex'):
                ConversationIndex_1 = xx.ConversationIndex
            else:
                ConversationIndex_1 = ''
            # 邮件内容
            if hasattr(xx, 'Body'):
                EmailBody_1 = xx.Body
            else:
                EmailBody_1 = ''
 
        # 判断当前查询的一级邮件目录是否有二级目录(若有多级目录,可以参考此段代码)
        if Level_1_Name.Folders:
            # 二级目录的集合
            Level_2_Names = Level_1_Name.Folders
            for Level_2_Name in Level_2_Names:
                print(' - - 正在查询二级目录:' , Level_1_Name.Name , '//' , Level_2_Name.Name)
                # 二级目录的邮件集合
                Mail_2_Messages = Level_2_Name.Items
                # 开始查看单个邮件的信息
                for yy in Mail_2_Messages:
                    # 记录根目录名称
                    Root_Directory_Name_2 = Account_Name.Name
                    # 记录一级目录名称
                    Level_1_FolderName_2 = Level_1_Name.Name
                    # 记录二级目录名称
                    Level_2_FolderName_2 = Level_2_Name.Name
                    # 接收时间
                    if hasattr(yy, 'ReceivedTime'):
                        ReceivedTime_2 = str(yy.ReceivedTime)[:-6]
                    else:
                        ReceivedTime_2 = ''
                    # 发件人
                    if hasattr(yy, 'SenderName'):
                        SenderName_2 = yy.SenderName
                    else:
                        SenderName_2 = ''
                    # 收件人
                    if hasattr(yy, 'To'):
                        to_to_2 = yy.To
                    else:
                        to_to_2 = ''
                    # 抄送人
                    if hasattr(yy, 'CC'):
                        cc_cc_2 = yy.CC
                    else:
                        cc_cc_2 = ''
                    # 主题
                    if hasattr(yy, 'Subject'):
                        Subject_2 = yy.Subject
                    else:
                        Subject_2 = ''
                    # 邮件MessageID
                    if hasattr(yy, 'EntryID'):
                        MessageID_2 = yy.EntryID
                    else:
                        MessageID_2 = ''
                    # 会话主题
                    if hasattr(yy, 'ConversationTopic'):
                        ConversationTopic_2 = yy.ConversationTopic
                    else:
                        ConversationTopic_2 = ''
                    # 会话ID
                    if hasattr(yy, 'ConversationID'):
                        ConversationID_2 = yy.ConversationID
                    else:
                        ConversationID_2 = ''
                    # 会话记录相对位置
                    if hasattr(yy, 'ConversationIndex'):
                        ConversationIndex_2 = yy.ConversationIndex
                    else:
                        ConversationIndex_2 = ''
                    # 邮件正文内容
                    if hasattr(yy, 'Body'):
                        EmailBody_2 = yy.Body
                    else:
                        EmailBody_2 = ''
        else:
            pass

保存附件

from win32com.client.gencache import EnsureDispatch as Dispatch
 
# 获取收件箱目录(数字6代表收件箱)
outlook_accounts = Dispatch('Outlook.Application').GetNamespace('MAPI').GetDefaultFolder(6)
# 收件箱下所有邮件
mails = outlook_accounts.Items
# 邮件按时间排序
mail.Sort('[ReceivedTime]', True)
# 获取第6封邮件的所有附件(下标从1开始)
atts = mails.Item(6)Attachments
# 第6封邮件附件数量
atts_num = atts.Count
# 遍历附件对象
for att in atts:
    print('att_name: {}'.format(att.FileName))
    # 将附件存入D盘
    att.SaveAsFile('D:\{}'.format(att.FileName))

到此这篇关于python办公自动化之读取本地OUTLOOK客户端邮件的文章就介绍到这了,更多相关python读取本地邮件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python Flask前后端Ajax交互的方法示例

    Python Flask前后端Ajax交互的方法示例

    这篇文章主要介绍了Python Flask前后端Ajax交互的方法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • Python3实现SMTP发送邮件的实战指南

    Python3实现SMTP发送邮件的实战指南

    ,本文详细介绍 Python3 借助smtplib和email库实现 SMTP 邮件发送的方法,从基础到实战覆盖多场景,先讲解 SMTP 协议定义及两核心库功能,再说明创建 SMTP 对象和使用sendmail方法的核心语法与参数,需要的朋友可以参考下
    2025-10-10
  • python实现差分隐私Laplace机制详解

    python实现差分隐私Laplace机制详解

    今天小编就为大家分享一篇python实现差分隐私Laplace机制详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • python爬虫基础知识点整理

    python爬虫基础知识点整理

    在本篇文章里小编给大家整理的是一篇关于python爬虫基础知识点整理内容,有兴趣的朋友们可以学习下。
    2020-06-06
  • python DataFrame 修改列的顺序实例

    python DataFrame 修改列的顺序实例

    下面小编就为大家分享一篇python DataFrame 修改列的顺序实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04
  • 使用OpenCV对车道进行实时检测的实现示例代码

    使用OpenCV对车道进行实时检测的实现示例代码

    这篇文章主要介绍了使用OpenCV对车道进行实时检测的实现示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • Python docutils文档编译过程方法解析

    Python docutils文档编译过程方法解析

    这篇文章主要介绍了Python docutils文档编译过程方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • Python组合数据类型详解

    Python组合数据类型详解

    这篇文章主要介绍了Python组合数据类型详解,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下
    2022-08-08
  • python logging 日志轮转文件不删除问题的解决方法

    python logging 日志轮转文件不删除问题的解决方法

    最近在维护项目的python项目代码,项目使用了 python 的日志模块 logging, 设定了保存的日志数目, 不过没有生效,还要通过contab定时清理数据
    2016-08-08
  • Python Pandas中合并数据的5个函数使用详解

    Python Pandas中合并数据的5个函数使用详解

    数据合并是数据处理过程中的必经环节,pandas作为数据分析的利器,提供了五种常用的数据合并方式,让我们看看如何使用这些方法吧!
    2022-05-05

最新评论