Python oauth2登录Outlook读取邮件

这篇具有很好参考价值的文章主要介绍了Python oauth2登录Outlook读取邮件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

微软登录方式发生了改变,需要用 oauth2 ,以前的写的脚本都登录不上了,本文记录下更新后的登录方式。
报错如下:
imaplib.IMAP4.error: b’LOGIN failed.’

Python oauth2登录Outlook读取邮件


一、先决条件

1.在Azure 门户注册应用程序
这里可以跟着官方教程走
传送门:https://learn.microsoft.com/zh-cn/azure/active-directory/develop/web-app-quickstart?pivots=devlang-python
注意 !!!:
第10点 重定向的地址改成:https://login.microsoftonline.com/common/oauth2/nativeclient
这个是微软通过的地址,不要用本地的。

第13点注册后 会出现一次的秘钥 (value)记得保存下来。
最后加权限的时候顺便加一下邮箱的权限 (搜索 mail )

Python oauth2登录Outlook读取邮件
顺便加的邮箱权限
Python oauth2登录Outlook读取邮件

二、使用步骤

1.引入库

代码如下:

from playwright.sync_api import Playwright, sync_playwright
import  time
import urllib.parse
import requests, json

2.读入数据

1.请求 authorize Api 获取 code
Python oauth2登录Outlook读取邮件

代码如下(示例):

code  = ''
userName = '邮箱账号'
passWord = '邮箱密码'
client_id =  '你的client_id '
tenant_id =  '你的tenant_id '
client_secret = '创建好应用后创建的的秘钥'
redirect_uri = 'https://login.microsoftonline.com/common/oauth2/nativeclient'

url = 'https://login.microsoftonline.com/{}/oauth2/v2.0/authorize?%20client_id={}&response_type=code%20&redirect_uri={}&response_mode=query%20&scope=https%3A%2F%2Fgraph.microsoft.com%2Fmail.read%20&state=12345'.format(tenant_id , client_id , redirect_uri)
 

#参考资料 https://learn.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-auth-code-flow


def run(playwright: Playwright) -> None:
    browser = playwright.chromium.launch(headless=False)
    context = browser.new_context(locale="zh-CN", accept_downloads=True)
    # Open new page
    page = context.new_page()
    page.goto(url)
    
    page.click("[placeholder=\"电子邮件、电话或\\ Skype\"]")
    
    page.fill("[placeholder=\"电子邮件、电话或\\ Skype\"]", userName)

    with page.expect_navigation():
        page.click("text=下一步")

    page.click("[placeholder=\"密码\"]")

    page.fill("[placeholder=\"密码\"]", passWord)

    with page.expect_navigation():
        page.click("text=登录")

    page.click("text=否")
    
    time.sleep(3)
    global code
    query = dict(urllib.parse.parse_qsl(urllib.parse.urlsplit(page.url).query)) 
    #print('code  :', query['code'])
    #print('state  :', query['state'])
    #print('session_state  :', query['session_state'])
    code = query['code']

    
    # ---------------------
    context.close()
    browser.close()
    
with sync_playwright() as playwright:
     run(playwright)
    
print('code  :', code  )
print('-----------end code--------')
  1. 拿code换token
#get token

myobj = {'client_id': client_id,
         'code': code,
         'redirect_uri': redirect_uri,
         'grant_type': 'authorization_code',
         'client_secret': client_secret
         }

token_headers = {"Content-Type":"application/x-www-form-urlencoded"}

token_url = 'https://login.microsoftonline.com/{}/oauth2/v2.0/token'.format(tenant_id )

r = requests.post(url= token_url , headers = token_headers , data = myobj) 

access_token=json.loads(r.text).get('access_token')

print('Bearer '+access_token)
print("------access_token end------")

3.拿token请求api文章来源地址https://www.toymoban.com/news/detail-444109.html

# 其他api参考:https://learn.microsoft.com/en-us/graph/api/mailfolder-list-messages?view=graph-rest-1.0&tabs=http

# 获取邮箱文件夹找到你的收件箱id
endpoint ="https://graph.microsoft.com/v1.0/me/mailFolders"
http_headers = {'Authorization': 'Bearer ' + access_token,
                'Accept': 'application/json',
                'Content-Type': 'application/json'}
data = requests.get(endpoint, headers=http_headers, stream=False).json()
print(data)

# 获取收件箱里面的 邮件

endpoint ="https://graph.microsoft.com/v1.0/me/mailFolders/你的收件箱文件夹id/messages"
http_headers = {'Authorization': 'Bearer ' + access_token,
                'Accept': 'application/json',
                'Content-Type': 'application/json'}
data = requests.get(endpoint, headers=http_headers, stream=False).json()
print(data)

到了这里,关于Python oauth2登录Outlook读取邮件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【OAuth2】OAuth2概述及使用GitHub登录第三方网站

    我们在浏览器上可以访问成百上千个网站,使用每个网站的服务一般都要先注册账号,那么我们为了更好地记忆,一般都会在多个网站使用相同的账号和密码进行注册。那么问题就来了,如果在你注册的网站中有某些个网站的系统设计不够严谨和安全,数据库的用户信息使用

    2024年01月19日
    浏览(60)
  • outlook微软自动给对方群发邮件消息带弹窗!

    下载地址:outlook微软自动给对方群发邮件消息带弹窗!

    2024年02月02日
    浏览(45)
  • 警告:新版Outlook会向微软发送密码、邮件和其他数据

    新的免费Outlook会将敏感数据发送给 Microsoft。 在没有通知或询问的情况下,Microsoft 授予自己对新 Outlook 用户的 IMAP 和 SMTP 访问数据的完全访问权限。也就是说,当用户设置 IMAP 帐户时,新的 Outlook 会将访问数据和服务器信息发送给 Microsoft。只有少数用户会意识到他们正在向

    2024年02月02日
    浏览(88)
  • 【OAuth2系列】Spring Cloud Gateway 作为OAuth2 Client接入第三方单点登录代码实践

            在年初的时候我参与了一个项目,当时是很多家公司协同完成这个项目,其中一个公司专门负责登录这块的内容,需要我们的后端接入他们的单点登录(OAuth2 授权码模式),这块接入工作是由我来负责,我们的项目是微服务架构,经过网上各种查阅资料发现网关作为

    2024年02月04日
    浏览(66)
  • Oauth2使用postman登录获取token

    网关请求拦截-(CheckJwtFilter.java) 网关配置把获取到的token存入redis-(GatewayConfig.java)它是把我们访问网关的路由转发到授权微服务 授权服务认证配置-(AuthorizationConfig.java) 授权服务安全配置-(WebSecurityConfig.java) 授权服务登录-(UserDetailsServiceImpl.java) 授权服务启动类-(AuthServerApplicatio

    2023年04月08日
    浏览(46)
  • SpringSecurity +oauth2获取当前登录用户(二)

    特别注意:以下内容如果访问失败或有其他疑问,可先学习: SpringSecurity +oauth2+JWT实现统一授权和认证及项目搭建(一) 1 获取当前用户的信息代码为: 但是,通过运行会发现principal的值只是 用户名 ,没有用户信息,通过去看源码,才发现问题所在,以下是源码: 源码类:

    2023年04月12日
    浏览(50)
  • javamail微软邮箱imap协议使用oauth2.0认证--微软邮箱中国版(21v世纪互联运营的微软邮箱)

    使用微软国际版的看:javamail微软邮箱imap协议使用oauth2.0认证–微软邮箱国际版 imap协议使用oauth2.0身份认证,必须先对帐号进行授权,授权方式可以看我之前的文章:微软邮箱oath2协议下,使用imap协议时对账号授权,如果不进行授权,即使认证通过了,但是获取邮件相关文件

    2024年04月12日
    浏览(41)
  • 如何通过OAuth2.0完成Microsoft平台登录验证

    参考内容: OAuth2 in Python | TestDriven.io 代表用户获取访问权限 - Microsoft Graph | Microsoft Learn OAuth 2.0 Bearer Token Usage 首先需要了解的是,通过Microsoft平台做身份验证,有一些配置时拿到的参数不可或缺(在身份验证的步骤中会用到,不一定是同一个步骤用到),其中包括: client_id:

    2024年02月09日
    浏览(41)
  • Spring Security oauth2.0微信小程序登录

    微信小程序前期开发准备,可以参考这篇文章微信小程序前期准备 1、学习过Spring Secrity oauth2.0的都知道,他有四种登录模式可以选择 authorization code(授权码模式) implicit(简化模式) resource owner password credentials(密码模式) client credentials(客户端模式) 前三种模式都需要用

    2024年02月10日
    浏览(47)
  • Spring-Security+OAuth2+redis实现密码登录

    一、OAuth2认证模式         一共四种认证方式,授权码模式、密码模式、简化模式和客户端模式。实现单点登录,比较流行的方法是使用jwt方式,jwt是无状态的,其本身就能携带信息,因此服务端可以不用保存他的信息,但只要token不过期,用户就可以一直访问,这样就无

    2024年02月16日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包