最近为了E5保活问题四处爬文,可惜中文可看的只有推荐使用oneindex…可是谁也不知道微软是如何定义“开发”这个标准的,无奈只能自己想办法。今天分享个利用微软Flow定时发送邮件到指定邮箱的方法~


你需要先知道的事情

根据官方graph文档的介绍,想成功实现调用outlook api 发送邮件到指定邮箱有两个办法 https://docs.microsoft.com/zh-cn/graph/

  1. 委派权限,说人话就是需要用户手动登录同意权限,需要用获取的授权代码换访问令牌和刷新令牌。其中访问令牌有效期一般为一个小时,刷新令牌时间长一点,为90天
  2. 应用程序权限,说人话就是不用再登录手动同意权限啦,这样做获得的权限大一些,适合本身就拥有管理员账户的童鞋~这种方法就再也不用操心刷新令牌失效的问题~但可能会有安全风险。

好,我知道啦,接下啦怎么做呢

我的需求很简单,让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%,由于是试用的关系,这个问题基本无解。。。

“Error 550 5.7.708 Access denied, traffic not accepted from IP”

更新:和客服一顿扯皮之后,发信基本没问题了~建议不要发太多,维持一天一次或几天一次就行.记得开启DKIM记录,光spf是不够的。

 
         

推荐几个2020年可用的免费SSL证书

推荐几个2020年可用的免费ssl证书,现在给网站上小绿锁是大势所趋,SSL证书一般价格都不菲,如果非特殊需求用免费的SSL证书就够用了~ 亚洲诚信一年域名 网...

自建密码管理器:强烈推荐bitwarden_rs

今天推荐个密码管理程序bitwarden的第三方版bitwarden_rs,是时候抛弃chrome自带的密码管理啦~要问我为什么转投bitwarden的怀抱?其实很简单,chrome浏览器自...

吃螃蟹~试着在debian上使用xanmod内核

听说升级linux内核会有安全和性能上的加成,目前小鸡用的是Linux version 4.9.0-12-amd64内核,本着“吃螃蟹”的态度,今天试试更新到5.6.14版本的内核,看看有...

测试-【フィクサー】呪術廻戦【MAD】

转载自Youtube,看起来播放速度还不错~ 这个MAD制作真的很精良,结合字幕来看,歌词莫名和漫画剧情很搭233.另外说下,呪術廻戦 已经在TV筹划中啦,喜欢的可惜...

纯ipv6 vps部署tls+ws+cdn

这个tls+ws+cdn你肯定不陌生,很多人用这种方式部署v2,也算是烂大街了。。。不过今天稍微升点难度,如何在纯ipv6的vps 上部署呢? 这里我们不能用一键脚本模...

微软E5开发者订阅保活续期又出新方式~

最近发现有大佬开发出了微软E5开发者订阅保活续期方法/攻略~忍不住来介绍一波。之前我就提起过,这个E5订阅续期是有“窍门”的,只要满足一定条件就可以实现90...