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中执行shell命令的几个方法小结

    python中执行shell命令的几个方法小结

    这篇文章主要介绍了python中执行shell命令的几个方法,本文一共给出3种方法实现执行shell命令,需要的朋友可以参考下
    2014-09-09
  • Python Sqlalchemy如何实现select for update

    Python Sqlalchemy如何实现select for update

    这篇文章主要介绍了Python Sqlalchemy如何实现select for update,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • python实现简单flappy bird

    python实现简单flappy bird

    这篇文章主要为大家详细介绍了python实现简单flappy bird小游戏,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-12-12
  • 2023最新pytorch快速安装指南(超详细版)

    2023最新pytorch快速安装指南(超详细版)

    这篇文章主要给大家介绍了2023年最新pytorch快速安装指南的相关资料,PyTorch是一个开源的深度学习框架,提供了各种张量操作并通过自动求导可以自动进行梯度计算,方便构建各种动态神经网络,需要的朋友可以参考下
    2023-10-10
  • Python3中省略号(...)用法介绍

    Python3中省略号(...)用法介绍

    本文主要介绍了Python3中省略号(...)用法介绍,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • python中的list字符串元素排序

    python中的list字符串元素排序

    这篇文章主要介绍了python中的list字符串元素排序方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • 使用Python可设置抽奖者权重的抽奖脚本代码

    使用Python可设置抽奖者权重的抽奖脚本代码

    这篇文章主要介绍了Python可设置抽奖者权重的抽奖脚本,抽奖系统包含可给不同抽奖者设置不同的权重,先从价值高的奖品开始抽,已经中奖的人,不再参与后续的抽奖,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2022-11-11
  • python中list列表复制的几种方法(赋值、切片、copy(),deepcopy())

    python中list列表复制的几种方法(赋值、切片、copy(),deepcopy())

    本文主要介绍了python中list列表复制的几种方法(赋值、切片、copy(),deepcopy()),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • Python logging模块原理解析及应用

    Python logging模块原理解析及应用

    这篇文章主要介绍了Python logging模块原理解析及应用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • python学生信息管理系统实现代码

    python学生信息管理系统实现代码

    这篇文章主要介绍了python学生信息管理系统的实现代码,代码简单,复制即可使用,需要的朋友可以参考下
    2019-12-12

最新评论