一直挂载dropbox和gdrive用,虽然都还算好用,但一来直接访问不方便,二来这两个都不大。最近申请了微软的Office 365开发者试用订阅E5。5T的onedrive同时解决了直接访问问题和容量问题,以前我的域名邮箱托管在zoho老出问题,现在也一并迁移到微软了。

申请链接 https://developer.microsoft.com/zh-cn/office/dev-program
管理链接 https://portal.office.com/AdminPortal/Home#/homepage

这东西网上资料很多,申请了之后是onedrive原始容量是1T,自己在设置里改成5T就行。但微软给的试用期是3个月,需要开发者身份才能续订,一般的说法是要多用它的API操作。事实上我看了一下,Office 365的api出来好几年了,但似乎个人用户相对较少(网上资料少)。对个人比较实用的是Office 365 REST API,直接操作Onedrive和Outlook。

当然,我们都不想直接处理微软的底层api,最好有个二次封包的东西来简化操作。Onedrive的文件操作可以用rclone,Outlook的邮件操作可以用python3的O365模块。

首先,要调用api先要去申请
这是api的申请地址 https://portal.azure.com/#blade/Microsoft_AAD_RegisteredApps/ApplicationsListBlade
api权限以及从属非常多,个人用户一般情况下可以认为微软给了2种权限,一种可以看作个人的,一种可以看作你的整个域的。一种要登陆验证,一种可以不登陆验证。然后每个api有不同的权限,比如文件读写,邮件读写等等。

我们先看下Outlook邮件的O365 这是介绍 https://pypi.org/project/O365/

先安装
pip3 install O365

然后看看他的介绍,非常简单。
1、去申请一个全域可用的api(建议选后台程序这样可以少登录验证),转跳uri填入 https://login.microsoftonline.com/common/oauth2/nativeclient
2、记录api的client_id和client_secret。
3、给这个api赋予3个权限Mail.ReadWrite,Mail.Send和User.Read。
好了,这样就可以发邮件了,类似下面这样


from O365 import Account
credentials = ('client_id', 'client_secret')
account = Account(credentials)
m = account.new_message()
m.to.add('to_example@example.com')
m.subject = 'Testing!'
m.body = "George Best quote: I've stopped drinking, but only while I'm asleep."
m.send()

但我们为了少登录验证选的后台程序,所以需要微软的tenant_ID,这东西可以访问
https://login.windows.net/XXX.onmicrosoft.com/.well-known/openid-configuration
直接得到,注意把XXX.onmicrosoft.com换成你的域

4、得到tenant_ID后稍微改下如下(很简单,应该直接能看懂)

from O365 import Account
from O365 import Connection, MSGraphProtocol
from O365.message import Message
from O365.mailbox import MailBox
credentials = ('client_id', 'client_secret')
protocol = MSGraphProtocol(default_resource='master@wingwy.com')
account = Account(credentials, auth_flow_type='credentials', tenant_id='tenant_id',protocol=protocol)
if account.authenticate():
print('Authenticated!')
mailbox = account.mailbox('master@wingwy.com')
message = mailbox.new_message()
message.to.add('master@wingwy.com')
message.subject='System information'
message.sender.address = 'master@wingwy.com'
message.body = '邮件正文,可以调用系统shell得到系统信息'
message.send()

这样就可以成功调用outlook发送邮件了,主要就三个东西’client_id’, ‘client_secret’和’tenant_id’。
其他可以参考O365的帮助,这个模块做的确实不错,如果你愿意,也可以用O365模块直接操作Onedrive文件等。但文件操作我还是喜欢rclone。

接下来我们看下Onedive文件操作的rclone
先去rclone官网下载装好 https://rclone.org/
1、同样去https://portal.azure.com/#blade/Microsoft_AAD_RegisteredApps/ApplicationsListBlade 申请api。转跳uri填入http://localhost:53682/
2、记录api的client_id和client_secret。
3、给这个api赋予6个权限Files.Read, Files.ReadWrite, Files.Read.All, Files.ReadWrite.All, offline_access, User.Read。
4、rclone config 一步一步下来就行了。

注意:
4.1、填client_id和client_secret的时候不要用默认的,填自己的api,这样快些。
4.2、如果在远程vps上遇到授权回调127.0.0.1,这时候可以再开一个窗口,然后再远程vps上curl “http://127.0.0.1/XXXXXX”得到返回信息后再到本地电脑打开连接。遇到转跳授权同样可以用curl解决。

5、然后挂载到系统。
rclone mount onedrive:wingwy.com /mnt/onedrive --copy-links --no-gzip-encoding --no-check-certificate --allow-other --allow-non-empty --umask 000
Restart=on-abort

这时候运行df -lh 应该可以看到了。

6、设置服务自启动
vi \usr\lib\systemd\system\rclone.service

写入

[Unit]
Description=rclone
[Service]
User=root
ExecStart=/usr/bin/rclone mount onedrive:wingwy.com /mnt/onedrive --copy-links --no-gzip-encoding --no-check-certificate --allow-other --allow-non-empty --umask 000 --vfs-cache-mode writes
Restart=on-abort
[Install]
WantedBy=multi-user.target

加入自启动
systemctl enable rclone

搞定!
最后在crontab下加入维护命令,每天掉用就是了。

标签: , , , ,

留下回复(本站有评论邮件通知功能)