向Python大神求助!

Micraow Peng 2020-07-23 08:48:38
诶,这么晚了,不知道该有没有人在。 就是想问一个问题(Python): 我使用在Github 上的O365模块进行开发,为了保障应用机密的安全,我需要使用公共客户端流。然而我按照文档中所示的方法修改了我的代码之后,却报错了。由于报错信息太多,这一就不贴了,希望来一个Python大神与我一起研究一下这个项目。非常感谢!如果愿意与我合作的,可以在评论区里面说一下。如果不愿意与我长期合作,但是可以解决我的问题的,也希望能在评论区里面贴一下使用公共客户端流的代码。 这里贴出来的是O365模块的链接。 https://github.com/O365/python-o365/ 马上紧跟在这句后面的是我的程序,大家也可以帮我看问题,之前说这个项目暂停维护了,但如果有人能够帮助我解决这些问题,我还是愿意做下去。(虽然没有人用) https://github.com/Micraow/O365-Mail-Manager/ 希望看到的朋友一定要帮一帮我呀!这是我亲手做的第一个项目,我不希望半途而废。 @九亿少男的兄弟 @My apologies
...全文
347 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Micraow Peng 2020-07-24
  • 打赏
  • 举报
回复
引用 4 楼 shoppo0505 的回复:
看错误,应该是O365 的 Account函数中会调用session变量,但是你在第4行给入的credentials中没有session变量。
不用看了,我找到问题了,把密钥去掉之后就行了。
Micraow Peng 2020-07-24
  • 打赏
  • 举报
回复
引用 4 楼 shoppo0505的回复:
看错误,应该是O365 的 Account函数中会调用session变量,但是你在第4行给入的credentials中没有session变量。
麻烦你帮我看一下官方的文档,我看到文档的中好像也没有session 呀,如果你发现那边也有,麻烦你帮我把正确的代码写在下面吧。
shoppo0505 2020-07-24
  • 打赏
  • 举报
回复
看错误,应该是O365 的 Account函数中会调用session变量,但是你在第4行给入的credentials中没有session变量。
Micraow Peng 2020-07-24
  • 打赏
  • 举报
回复
引用 2 楼 shoppo0505 的回复:
你需要把抱错信息贴出来,太多的话,先贴前3条看看
from O365 import Account
import os
credentials = ('74424fcf-55d7-4e15-99d7-1663c0ba2e94', 'UCDadI4_uwyc.~GYfyG_Ni4pMOT54e.an8')
account = Account(credentials, auth_flow_type='public')

class mailbox_actions:
    """用来对邮箱进行操作"""

    def __init__(self, choice=None):

        # 这是我的应用ID和机密,但是公共客户端流还是没有实现,文档里说下面改为
        # self.account = Account(self.credentials, auth_flow_type=‘pubic')
        # (上面是我的理解)就行了但他报错
        self.account = account
        self.credentials = credentials
        self.choice = choice
        self.scopes = ['basic', 'message_all']  # 请求权限

    def check_if_authenticated(self):
        """检查是否有用户登录,若无,则请求登录"""
        if not self.account.is_authenticated:  # 检查是否登录
            # 请求登录
            self.account.authenticate(scopes=self.scopes)

    def Read_email(self):
        """遍历邮件
        limit 表示加载多少个,微软官方一次API调用只返回999个,
        而O365模块默认25个,只有limit>25时utils分页功能才生效
        batch批处理表示加载多少次,就是往后加载
        limit=2000, batch=10 = limit=2000
        但是分为10次加载。"""

        mailbox = self.account.mailbox()

        inbox = mailbox.inbox_folder()
        for messages in inbox.get_messages(limit=200, batch=100):  # 下面的都是utils分页的
            print(messages)
        for messages in mailbox.junk_folder().get_messages(limit=200, batch=100):
            print(messages)
        for messages in mailbox.deleted_folder().get_messages(limit=200, batch=100):
            print(messages)
        for messages in mailbox.drafts_folder().get_messages(limit=2000):
            print(messages)
        for messages in mailbox.sent_folder().get_messages(limit=2000, batch=10):
            print(messages)
        os.system("pause")

    # 准备加入选择进入哪个文件夹

    def start(self):
        """应用入口"""
        self.choice = input('进入邮箱还是日历?(E/C)')

        if self.choice == 'E':
            self.choice = input('看邮件还是写邮件?(R/W)')
            if self.choice == 'R':
                mailbox_actions().Read_email()
            elif self.choice == 'W':
                print('开发中,请稍后')
            else:
                mailbox_actions().start()
        elif self.choice == 'C':
            print('开发中,敬请期待')
        else:
            mailbox_actions().start()


mailbox_actions().check_if_authenticated()
mailbox_actions().start()
刚刚是代码,马上贴错误信息。
C:\Users\77933\AppData\Local\Programs\Python\Python38\python.exe C:/PyJobs/O365_Mail_Manager/Mail_Manager.py
Traceback (most recent call last):
  File "C:/PyJobs/O365_Mail_Manager/Mail_Manager.py", line 4, in <module>
    account = Account(credentials, auth_flow_type='public')
  File "C:\Users\77933\AppData\Local\Programs\Python\Python38\lib\site-packages\O365\account.py", line 51, in __init__
    self.con = self.connection_constructor(credentials, **kwargs)
  File "C:\Users\77933\AppData\Local\Programs\Python\Python38\lib\site-packages\O365\connection.py", line 364, in __init__
    raise ValueError('Provide client id only for public flow credentials')
ValueError: Provide client id only for public flow credentials
Exception ignored in: <function Connection.__del__ at 0x00000282D4A90EE0>
Traceback (most recent call last):
  File "C:\Users\77933\AppData\Local\Programs\Python\Python38\lib\site-packages\O365\connection.py", line 852, in __del__
    if self.session:
AttributeError: 'Connection' object has no attribute 'session'

进程已结束,退出代码1
但是文档好像就是这么写的 https://github.com/O365/python-o365#authentication 麻烦帮我看下
shoppo0505 2020-07-24
  • 打赏
  • 举报
回复
你需要把抱错信息贴出来,太多的话,先贴前3条看看
Micraow Peng 2020-07-24
  • 打赏
  • 举报
回复
得,看样子没希望了。

37,720

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧