02月13日, 2020 806 views

最近为了E5保活问题四处爬文,可惜中文可看的只有推荐使用oneindex…可是谁也不知道微软是如何定义“开发”这个标准的,无奈只能自己想办法。今天分享个利用微软Flow定时发送邮件到指定邮箱的方法~
文章目录
你需要先知道的事情
根据官方graph文档的介绍,想成功实现调用outlook api 发送邮件到指定邮箱有两个办法 https://docs.microsoft.com/zh-cn/graph/
- 委派权限,说人话就是需要用户手动登录同意权限,需要用获取的授权代码换访问令牌和刷新令牌。其中访问令牌有效期一般为一个小时,刷新令牌时间长一点,为90天
- 应用程序权限,说人话就是不用再登录手动同意权限啦,这样做获得的权限大一些,适合本身就拥有管理员账户的童鞋~这种方法就再也不用操心刷新令牌失效的问题~但可能会有安全风险。
好,我知道啦,接下啦怎么做呢
我的需求很简单,让E5开发者账户调用Microsoft Graph ,实现每天发一份邮件到我的私人邮箱。
这里我已“委派权限”方式为例讲下过程
第一步就是要申请个应用,访问https://aad.portal.azure.com/#blade/Microsoft_AAD_RegisteredApps/ApplicationsListBlade 点击 “+新注册”按钮进入注册界面,设置就按下图,名字就不要雷同啦~
选好后点“注册”~不出意外注册好啦~
在概述页面,你需要记下这几个ID
应用程序(client_id)ID 目录或租户(tenant)id 待会会用到,其中租户id是固定的~
找到“API权限”点击进去后,点击“+添加权限”按钮,点击“Microsoft Graph”,进去后有两个选项,点左边那个“委托的权限”~
我这里选了 “Mail.Read”和“Mail.Send”,确认添加权限
最后一步,就是设置“证书和密码”,这个密码(client_secret)只显示一次,刷新页面后不会再显示了~密码截止日期建议设置为“从不”~
这边基本就设置完毕了,可以接下来完成其他步骤啦~
登录Flow,设置定时任务
这个东东官方叫他Power Automate,网站点这个 https://asia.flow.mihcrosoft.com/en-us/ ,登录即可~登陆后找到找到+Create 按钮,点击进去,找到 “Scheduled flow”方框,点击~按下图设置,可随意微调~点击Create~
接下来的步骤就很简单啦,照着下图设置就行~博主已经探过路啦,应该没问题
点击+ New step,找到http 选项下图箭头所指,确认,按下图填写参数~
URL填写 https://login.microsoftonline.com/{你的租户id}/oauth2/token
Content-Type application/x-www-form-urlencoded
body部分填写 {}部分请对应替换`
grant_type=refresh_token
&client_id={你的应用程序id}
&refresh_token={你的刷新令牌}
&resource=
&client_secret={你的应用程序密码
设置好应该是这个样子的~
接着点击 +new step,找到Parse JSON,确认。内容 选“正文” 架构填下面代码
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"token_type": {
"type": "string"
},
"scope": {
"type": "string"
},
"expires_in": {
"type": "string"
},
"ext_expires_in": {
"type": "string"
},
"expires_on": {
"type": "string"
},
"not_before": {
"type": "string"
},
"resource": {
"type": "string"
},
"access_token": {
"type": "string"
},
"refresh_token": {
"type": "string"
}
},
"required": [
"token_type",
"scope",
"expires_in",
"ext_expires_in",
"expires_on",
"not_before",
"resource",
"access_token",
"refresh_token"
]
}确认即可~再新建个HTTP,内容如下
URL 填写 https://v1.hitokoto.cn/?encode=text
最后一个HTTP,内容如下
URL 填写 https://graph.microsoft.com/v1.0/users/{你的E5账户邮箱}/sendMail
标头填写
Authorization Bearer {access_token}
Content-type application/json
正文部分填写,{}括号部分请自行修改
{
"message": {
"subject": "@{body('HTTP_3')}-90",
"body": {
"contentType": "Text",
"content": "恭喜你~你的E5订阅离渡劫又近了一天~~"
},
"toRecipients": [
{
"emailAddress": {
"address": "{转发的邮箱}"
}
}
]
}
}
保存即可~你可以手动触发试试看,不出意外都是可以的~
最后说下这个授权token 获取
你需要构造个url并用浏览器访问
https://login.microsoftonline.com/{租户id}/oauth2/v2.0/authorize?client_id={应用id}&response_type=code&redirect_uri=http%3A%2F%2Flocalhost%2Fmyapp&response_mode=query&scope=offline_access%20user.read%20mail.read%20mail.send&state=12345
打开后应该是这样的~授权后会跳转个URL,取“OAQA….”那部分
根据文档,我们构造请求来获取这个刷新token(refresh_token),这里我们用chrome应用postman(点我安装)
POST 地址 https://login.microsoftonline.com/{租户id}/oauth2/token
Headers 设置 如下图
body部分使用RAW模式填入下面代码
grant_type=authorization_code
&client_id={应用id}
&code={授权码}
&redirect_uri=http%3A%2F%2Flocalhost%2Fmyapp
&resource=
&client_secret={应用密码}
点击蓝色send按钮,如果填写无误的话会返回json格式的代码,里面含有access_token/refresh_token/id_token,我们这里只需要refresh_token 即可~
最后还有一种免获取refresh_token方法,相信你照着文档一定能配置出来~我就不赘述啦~
最后的最后 说下,实际上这种用API发信的方式失败率非常高,基本是100%,由于是试用的关系,这个问题基本无解。。。
更新:和客服一顿扯皮之后,发信基本没问题了~建议不要发太多,维持一天一次或几天一次就行.记得开启DKIM记录,光spf是不够的。






貌似可以到这个链接里解除屏蔽https://sender.office.com/
这是官方文档https://docs.microsoft.com/zh-cn/microsoft-365/security/office-365-security/use-the-delist-portal-to-remove-yourself-from-the-office-365-blocked-senders-lis?view=o365-worldwide