@pnp/cli-microsoft365 5.8.0-beta.c222170 → 5.8.0-beta.f956c5d
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/m365/graph/Changelog.js +3 -0
- package/dist/m365/graph/commands/changelog/changelog-list.js +160 -0
- package/dist/m365/graph/commands.js +1 -0
- package/dist/m365/outlook/commands/mail/mail-send.js +22 -3
- package/dist/m365/pp/commands/environment/environment-list.js +1 -1
- package/dist/utils/fsUtil.js +2 -4
- package/dist/utils/md.js +1 -1
- package/docs/docs/cmd/graph/changelog/changelog-list.md +53 -0
- package/docs/docs/cmd/outlook/mail/mail-send.md +44 -1
- package/docs/docs/cmd/pp/environment/environment-list.md +1 -1
- package/docs/docs/cmd/spo/list/list-roleassignment-add.md +2 -2
- package/docs/docs/cmd/spo/list/list-roleassignment-remove.md +2 -2
- package/docs/docs/cmd/spo/listitem/listitem-roleassignment-remove.md +2 -2
- package/docs/docs/cmd/spo/web/web-roleassignment-add.md +2 -2
- package/package.json +1 -1
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
12
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
13
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
14
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
15
|
+
};
|
|
16
|
+
var _GraphChangelogListCommand_instances, _GraphChangelogListCommand_initTelemetry, _GraphChangelogListCommand_initOptions, _GraphChangelogListCommand_initValidators;
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
const utils_1 = require("../../../../utils");
|
|
19
|
+
const AnonymousCommand_1 = require("../../../base/AnonymousCommand");
|
|
20
|
+
const commands_1 = require("../../commands");
|
|
21
|
+
const request_1 = require("../../../../request");
|
|
22
|
+
const xmldom_1 = require("@xmldom/xmldom");
|
|
23
|
+
class GraphChangelogListCommand extends AnonymousCommand_1.default {
|
|
24
|
+
constructor() {
|
|
25
|
+
super();
|
|
26
|
+
_GraphChangelogListCommand_instances.add(this);
|
|
27
|
+
this.allowedVersions = ['beta', 'v1.0'];
|
|
28
|
+
this.allowedChangeTypes = ['Addition', 'Change', 'Deletion', 'Deprecation'];
|
|
29
|
+
this.allowedServices = [
|
|
30
|
+
'Applications', 'Calendar', 'Change notifications', 'Cloud communications',
|
|
31
|
+
'Compliance', 'Cross-device experiences', 'Customer booking', 'Device and app management',
|
|
32
|
+
'Education', 'Files', 'Financials', 'Groups',
|
|
33
|
+
'Identity and access', 'Mail', 'Notes', 'Notifications',
|
|
34
|
+
'People and workplace intelligence', 'Personal contacts', 'Reports', 'Search',
|
|
35
|
+
'Security', 'Sites and lists', 'Tasks and plans', 'Teamwork',
|
|
36
|
+
'To-do tasks', 'Users', 'Workbooks and charts'
|
|
37
|
+
];
|
|
38
|
+
__classPrivateFieldGet(this, _GraphChangelogListCommand_instances, "m", _GraphChangelogListCommand_initTelemetry).call(this);
|
|
39
|
+
__classPrivateFieldGet(this, _GraphChangelogListCommand_instances, "m", _GraphChangelogListCommand_initOptions).call(this);
|
|
40
|
+
__classPrivateFieldGet(this, _GraphChangelogListCommand_instances, "m", _GraphChangelogListCommand_initValidators).call(this);
|
|
41
|
+
}
|
|
42
|
+
get name() {
|
|
43
|
+
return commands_1.default.CHANGELOG_LIST;
|
|
44
|
+
}
|
|
45
|
+
get description() {
|
|
46
|
+
return 'Gets an overview of specific API-level changes in Microsoft Graph v1.0 and beta';
|
|
47
|
+
}
|
|
48
|
+
defaultProperties() {
|
|
49
|
+
return ['category', 'title', 'description'];
|
|
50
|
+
}
|
|
51
|
+
commandAction(logger, args, cb) {
|
|
52
|
+
const allowedChangeType = args.options.changeType && this.allowedChangeTypes.find(x => x.toLocaleLowerCase() === args.options.changeType.toLocaleLowerCase());
|
|
53
|
+
const searchParam = args.options.changeType ? `/?filterBy=${allowedChangeType}` : '';
|
|
54
|
+
const requestOptions = {
|
|
55
|
+
url: `https://developer.microsoft.com/en-us/graph/changelog/rss${searchParam}`,
|
|
56
|
+
headers: {
|
|
57
|
+
'accept': 'text/xml',
|
|
58
|
+
'x-anonymous': 'true'
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
request_1.default
|
|
62
|
+
.get(requestOptions)
|
|
63
|
+
.then((output) => {
|
|
64
|
+
const parser = new xmldom_1.DOMParser();
|
|
65
|
+
const xmlDoc = parser.parseFromString(output.toString(), "text/xml");
|
|
66
|
+
const changelog = this.filterThroughOptions(args.options, this.mapChangelog(xmlDoc, args));
|
|
67
|
+
logger.log(changelog.items);
|
|
68
|
+
cb();
|
|
69
|
+
}, (err) => this.handleRejectedODataJsonPromise(err, logger, cb));
|
|
70
|
+
}
|
|
71
|
+
filterThroughOptions(options, changelog) {
|
|
72
|
+
let items = changelog.items;
|
|
73
|
+
if (options.services) {
|
|
74
|
+
const allowedServices = this.allowedServices
|
|
75
|
+
.filter(allowedService => options.services.toLocaleLowerCase().split(',').includes(allowedService.toLocaleLowerCase()));
|
|
76
|
+
items = changelog.items.filter(item => allowedServices.includes(item.title));
|
|
77
|
+
}
|
|
78
|
+
if (options.versions) {
|
|
79
|
+
const allowedVersions = this.allowedVersions
|
|
80
|
+
.filter(allowedVersion => options.versions.toLocaleLowerCase().split(',').includes(allowedVersion.toLocaleLowerCase()));
|
|
81
|
+
items = items.filter(item => allowedVersions.includes(item.category));
|
|
82
|
+
}
|
|
83
|
+
if (options.startDate) {
|
|
84
|
+
const startDate = new Date(options.startDate);
|
|
85
|
+
items = items.filter(item => item.pubDate >= startDate);
|
|
86
|
+
}
|
|
87
|
+
if (options.endDate) {
|
|
88
|
+
const endDate = new Date(options.endDate);
|
|
89
|
+
items = items.filter(item => item.pubDate <= endDate);
|
|
90
|
+
}
|
|
91
|
+
// Make sure everything is unique based on the item guid
|
|
92
|
+
items = [...new Map(items.map((item) => [item.guid, item])).values()];
|
|
93
|
+
changelog.items = items.sort((itemA, itemB) => Number(itemB.pubDate) - Number(itemA.pubDate));
|
|
94
|
+
return changelog;
|
|
95
|
+
}
|
|
96
|
+
mapChangelog(xmlDoc, args) {
|
|
97
|
+
const channel = xmlDoc.getElementsByTagName('channel').item(0);
|
|
98
|
+
const changelog = {
|
|
99
|
+
title: channel.getElementsByTagName('title').item(0).textContent,
|
|
100
|
+
description: channel.getElementsByTagName('description').item(0).textContent,
|
|
101
|
+
url: channel.getElementsByTagName('link').item(0).textContent,
|
|
102
|
+
items: []
|
|
103
|
+
};
|
|
104
|
+
Array.from(xmlDoc.getElementsByTagName('item')).forEach((item) => {
|
|
105
|
+
const description = args.options.output === 'text' ?
|
|
106
|
+
utils_1.md.md2plain(item.getElementsByTagName('description').item(0).textContent, '') :
|
|
107
|
+
item.getElementsByTagName('description').item(0).textContent;
|
|
108
|
+
changelog.items.push({
|
|
109
|
+
guid: item.getElementsByTagName('guid').item(0).textContent,
|
|
110
|
+
category: item.getElementsByTagName('category').item(1).textContent,
|
|
111
|
+
title: item.getElementsByTagName('title').item(0).textContent,
|
|
112
|
+
description: args.options.output === 'text' ?
|
|
113
|
+
description.length > 50 ? `${description.substring(0, 47)}...` : description :
|
|
114
|
+
description,
|
|
115
|
+
pubDate: new Date(item.getElementsByTagName('pubDate').item(0).textContent)
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
return changelog;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
_GraphChangelogListCommand_instances = new WeakSet(), _GraphChangelogListCommand_initTelemetry = function _GraphChangelogListCommand_initTelemetry() {
|
|
122
|
+
this.telemetry.push((args) => {
|
|
123
|
+
Object.assign(this.telemetryProperties, {
|
|
124
|
+
versions: typeof args.options.versions !== 'undefined',
|
|
125
|
+
changeType: typeof args.options.changeType !== 'undefined',
|
|
126
|
+
services: typeof args.options.services !== 'undefined',
|
|
127
|
+
startDate: typeof args.options.startDate !== 'undefined',
|
|
128
|
+
endDate: typeof args.options.endDate !== 'undefined'
|
|
129
|
+
});
|
|
130
|
+
});
|
|
131
|
+
}, _GraphChangelogListCommand_initOptions = function _GraphChangelogListCommand_initOptions() {
|
|
132
|
+
this.options.unshift({ option: '-v, --versions [versions]', autocomplete: this.allowedVersions }, { option: "-c, --changeType [changeType]", autocomplete: this.allowedChangeTypes }, { option: "-s, --services [services]", autocomplete: this.allowedServices }, { option: "--startDate [startDate]" }, { option: "--endDate [endDate]" });
|
|
133
|
+
}, _GraphChangelogListCommand_initValidators = function _GraphChangelogListCommand_initValidators() {
|
|
134
|
+
this.validators.push((args) => __awaiter(this, void 0, void 0, function* () {
|
|
135
|
+
if (args.options.versions &&
|
|
136
|
+
args.options.versions.toLocaleLowerCase().split(',').some(x => !this.allowedVersions.map(y => y.toLocaleLowerCase()).includes(x))) {
|
|
137
|
+
return `The verions contains an invalid value. Specify either ${this.allowedVersions.join(', ')} as properties`;
|
|
138
|
+
}
|
|
139
|
+
if (args.options.changeType &&
|
|
140
|
+
!this.allowedChangeTypes.map(x => x.toLocaleLowerCase()).includes(args.options.changeType.toLocaleLowerCase())) {
|
|
141
|
+
return `The change type contain an invalid value. Specify either ${this.allowedChangeTypes.join(', ')} as properties`;
|
|
142
|
+
}
|
|
143
|
+
if (args.options.services &&
|
|
144
|
+
args.options.services.toLocaleLowerCase().split(',').some(x => !this.allowedServices.map(y => y.toLocaleLowerCase()).includes(x))) {
|
|
145
|
+
return `The services contains invalid value. Specify either ${this.allowedServices.join(', ')} as properties`;
|
|
146
|
+
}
|
|
147
|
+
if (args.options.startDate && !utils_1.validation.isValidISODate(args.options.startDate)) {
|
|
148
|
+
return 'The startDate is not a valid ISO date string';
|
|
149
|
+
}
|
|
150
|
+
if (args.options.endDate && !utils_1.validation.isValidISODate(args.options.endDate)) {
|
|
151
|
+
return 'The endDate is not a valid ISO date string';
|
|
152
|
+
}
|
|
153
|
+
if (args.options.endDate && args.options.startDate && new Date(args.options.endDate) < new Date(args.options.startDate)) {
|
|
154
|
+
return 'The endDate should be later than startDate';
|
|
155
|
+
}
|
|
156
|
+
return true;
|
|
157
|
+
}));
|
|
158
|
+
};
|
|
159
|
+
module.exports = new GraphChangelogListCommand();
|
|
160
|
+
//# sourceMappingURL=changelog-list.js.map
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const prefix = 'graph';
|
|
4
4
|
exports.default = {
|
|
5
|
+
CHANGELOG_LIST: `${prefix} changelog list`,
|
|
5
6
|
SCHEMAEXTENSION_ADD: `${prefix} schemaextension add`,
|
|
6
7
|
SCHEMAEXTENSION_GET: `${prefix} schemaextension get`,
|
|
7
8
|
SCHEMAEXTENSION_LIST: `${prefix} schemaextension list`,
|
|
@@ -15,6 +15,8 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
15
15
|
};
|
|
16
16
|
var _OutlookMailSendCommand_instances, _OutlookMailSendCommand_initTelemetry, _OutlookMailSendCommand_initOptions, _OutlookMailSendCommand_initValidators;
|
|
17
17
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
const Auth_1 = require("../../../../Auth");
|
|
19
|
+
const Command_1 = require("../../../../Command");
|
|
18
20
|
const request_1 = require("../../../../request");
|
|
19
21
|
const GraphCommand_1 = require("../../../base/GraphCommand");
|
|
20
22
|
const commands_1 = require("../../commands");
|
|
@@ -30,15 +32,19 @@ class OutlookMailSendCommand extends GraphCommand_1.default {
|
|
|
30
32
|
return commands_1.default.MAIL_SEND;
|
|
31
33
|
}
|
|
32
34
|
get description() {
|
|
33
|
-
return 'Sends e-mail
|
|
35
|
+
return 'Sends an e-mail';
|
|
34
36
|
}
|
|
35
37
|
alias() {
|
|
36
38
|
return [commands_1.default.SENDMAIL];
|
|
37
39
|
}
|
|
38
40
|
commandAction(logger, args, cb) {
|
|
39
41
|
const bodyContents = args.options.bodyContents;
|
|
42
|
+
const isAppOnlyAuth = Auth_1.Auth.isAppOnlyAuth(Auth_1.default.service.accessTokens[this.resource].accessToken);
|
|
43
|
+
if (isAppOnlyAuth === true && !args.options.sender) {
|
|
44
|
+
return cb(new Command_1.CommandError(`Specify a upn or user id in the 'sender' option when using app only authentication.`));
|
|
45
|
+
}
|
|
40
46
|
const requestOptions = {
|
|
41
|
-
url: `${this.resource}/v1.0/me/sendMail`,
|
|
47
|
+
url: `${this.resource}/v1.0/${args.options.sender ? 'users/' + encodeURIComponent(args.options.sender) : 'me'}/sendMail`,
|
|
42
48
|
headers: {
|
|
43
49
|
accept: 'application/json;odata.metadata=none',
|
|
44
50
|
'content-type': 'application/json'
|
|
@@ -62,6 +68,13 @@ class OutlookMailSendCommand extends GraphCommand_1.default {
|
|
|
62
68
|
saveToSentItems: args.options.saveToSentItems
|
|
63
69
|
}
|
|
64
70
|
};
|
|
71
|
+
if (args.options.mailbox) {
|
|
72
|
+
requestOptions.data.message.from = {
|
|
73
|
+
emailAddress: {
|
|
74
|
+
address: args.options.mailbox
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
}
|
|
65
78
|
request_1.default
|
|
66
79
|
.post(requestOptions)
|
|
67
80
|
.then(_ => cb(), (err) => this.handleRejectedODataJsonPromise(err, logger, cb));
|
|
@@ -72,7 +85,9 @@ _OutlookMailSendCommand_instances = new WeakSet(), _OutlookMailSendCommand_initT
|
|
|
72
85
|
Object.assign(this.telemetryProperties, {
|
|
73
86
|
bodyContents: typeof args.options.bodyContents !== 'undefined',
|
|
74
87
|
bodyContentType: args.options.bodyContentType,
|
|
75
|
-
saveToSentItems: args.options.saveToSentItems
|
|
88
|
+
saveToSentItems: args.options.saveToSentItems,
|
|
89
|
+
mailbox: typeof args.options.mailbox !== 'undefined',
|
|
90
|
+
sender: typeof args.options.sender !== 'undefined'
|
|
76
91
|
});
|
|
77
92
|
});
|
|
78
93
|
}, _OutlookMailSendCommand_initOptions = function _OutlookMailSendCommand_initOptions() {
|
|
@@ -80,6 +95,10 @@ _OutlookMailSendCommand_instances = new WeakSet(), _OutlookMailSendCommand_initT
|
|
|
80
95
|
option: '-s, --subject <subject>'
|
|
81
96
|
}, {
|
|
82
97
|
option: '-t, --to <to>'
|
|
98
|
+
}, {
|
|
99
|
+
option: '--sender [sender]'
|
|
100
|
+
}, {
|
|
101
|
+
option: '-m, --mailbox [mailbox]'
|
|
83
102
|
}, {
|
|
84
103
|
option: '--bodyContents <bodyContents>'
|
|
85
104
|
}, {
|
|
@@ -64,7 +64,7 @@ _PpEnvironmentListCommand_instances = new WeakSet(), _PpEnvironmentListCommand_i
|
|
|
64
64
|
});
|
|
65
65
|
}, _PpEnvironmentListCommand_initOptions = function _PpEnvironmentListCommand_initOptions() {
|
|
66
66
|
this.options.unshift({
|
|
67
|
-
option: '-a, --asAdmin
|
|
67
|
+
option: '-a, --asAdmin'
|
|
68
68
|
});
|
|
69
69
|
};
|
|
70
70
|
module.exports = new PpEnvironmentListCommand();
|
package/dist/utils/fsUtil.js
CHANGED
|
@@ -42,12 +42,10 @@ const addFileCommands = {
|
|
|
42
42
|
addFileCommand: 'cat > [FILEPATH] << EOF [FILECONTENT]EOF'
|
|
43
43
|
},
|
|
44
44
|
powershell: {
|
|
45
|
-
addFileCommand: `@"[FILECONTENT]"@ | Out-File -FilePath
|
|
46
|
-
`
|
|
45
|
+
addFileCommand: `@"[FILECONTENT]"@ | Out-File -FilePath [FILEPATH]`
|
|
47
46
|
},
|
|
48
47
|
cmd: {
|
|
49
|
-
addFileCommand: `echo [FILECONTENT] >
|
|
50
|
-
`
|
|
48
|
+
addFileCommand: `echo [FILECONTENT] > [FILEPATH]`
|
|
51
49
|
}
|
|
52
50
|
};
|
|
53
51
|
const removeFileCommands = {
|
package/dist/utils/md.js
CHANGED
|
@@ -46,7 +46,7 @@ function convertHyperlinks(md) {
|
|
|
46
46
|
});
|
|
47
47
|
}
|
|
48
48
|
function convertCodeFences(md) {
|
|
49
|
-
const regex = new RegExp('^```.*?
|
|
49
|
+
const regex = new RegExp('^```.*?(?:\r\n|\n)(.*?)```(?:\r\n|\n)', 'gms');
|
|
50
50
|
return md.replace(regex, (match, code) => {
|
|
51
51
|
return ` ${code}${os_1.EOL}`;
|
|
52
52
|
});
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# graph changelog list
|
|
2
|
+
|
|
3
|
+
Gets an overview of specific API-level changes in Microsoft Graph v1.0 and beta
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
```sh
|
|
8
|
+
m365 graph changelog list [options]
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Options
|
|
12
|
+
|
|
13
|
+
`-v, --versions [versions]`
|
|
14
|
+
: Comma-separated list of versions to show changes for. `Beta, v1.0`. When no version is selected all versions are returned.
|
|
15
|
+
|
|
16
|
+
`-c, --changeType [changeType]`
|
|
17
|
+
: Change type to show changes for. `Addition, Change, Deletion`. When no changeType is selected all change types are returned.
|
|
18
|
+
|
|
19
|
+
`-s, --services [services]`
|
|
20
|
+
: Comma-separated list of services to show changes for. `Applications, Calendar, Change notifications, Cloud communications, Compliance, Cross-device experiences, Customer booking, Device and app management, Education, Files, Financials, Groups, Identity and access, Mail, Notes, Notifications, People and workplace intelligence, Personal contacts, Reports, Search, Security, Sites and lists, Tasks and plans, Teamwork, To-do tasks, Users, Workbooks and charts`. When no service is selected all services are returned.
|
|
21
|
+
|
|
22
|
+
`--startDate [startDate]`
|
|
23
|
+
: The startdate used to query for changes. Supported date format is `YYYY-MM-DD`. When no date is specified all changes are returned.
|
|
24
|
+
|
|
25
|
+
`--endDate [endDate]`
|
|
26
|
+
: The enddate used to query for changes. Supported date format is `YYYY-MM-DD`. When no date is specified all changes are returned.
|
|
27
|
+
|
|
28
|
+
--8<-- "docs/cmd/_global.md"
|
|
29
|
+
|
|
30
|
+
## Remarks
|
|
31
|
+
|
|
32
|
+
!!! attention
|
|
33
|
+
This command is based on an API that is currently in preview and is subject to change once the API reached general availability.
|
|
34
|
+
|
|
35
|
+
## Examples
|
|
36
|
+
|
|
37
|
+
Get all changes within Microsoft Graph.
|
|
38
|
+
|
|
39
|
+
```sh
|
|
40
|
+
m365 graph changelog list
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Get all changes within Microsoft Graph for the services _Groups_ and _Users_.
|
|
44
|
+
|
|
45
|
+
```sh
|
|
46
|
+
m365 graph changelog list --services 'Groups,Users'
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Get all changes within Microsoft Graph that happend between _2021-01-01_ and _2021-05-01_.
|
|
50
|
+
|
|
51
|
+
```sh
|
|
52
|
+
m365 graph changelog list --startDate '2021-01-01' --endDate '2021-05-01'
|
|
53
|
+
```
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# outlook sendmail
|
|
2
2
|
|
|
3
|
-
Sends e-mail
|
|
3
|
+
Sends an e-mail
|
|
4
4
|
|
|
5
5
|
## Usage
|
|
6
6
|
|
|
@@ -22,6 +22,12 @@ m365 outlook sendmail [options]
|
|
|
22
22
|
`-t, --to <to>`
|
|
23
23
|
: Comma-separated list of e-mails to send the message to
|
|
24
24
|
|
|
25
|
+
`--sender [sender]`
|
|
26
|
+
: Optional upn or user id to specify what account to send the message from. Also see the remarks section.
|
|
27
|
+
|
|
28
|
+
`-m, --mailbox [mailbox]`
|
|
29
|
+
: Specify this option to send the email on behalf of another mailbox, for example a shared mailbox, group or distribution list. The sender needs to be a delegate on the specified mailbox. Also see the remarks section.
|
|
30
|
+
|
|
25
31
|
`--bodyContents <bodyContents>`
|
|
26
32
|
: String containing the body of the e-mail to send
|
|
27
33
|
|
|
@@ -33,6 +39,25 @@ m365 outlook sendmail [options]
|
|
|
33
39
|
|
|
34
40
|
--8<-- "docs/cmd/_global.md"
|
|
35
41
|
|
|
42
|
+
## Remarks
|
|
43
|
+
|
|
44
|
+
### If you are connected using app only authentication
|
|
45
|
+
|
|
46
|
+
- Always specify a user id or upn in the `--sender` option. The email will be sent as if it came from the specified user, and can optionally be saved in the sent folder of that user account.
|
|
47
|
+
- You can optionally also specify the `--mailbox` option to send mail on behalf of a shared mailbox, group or distribution list. The account used in the `--sender` option, needs to have 'Send on behalf of' permissions on the mailbox in question.
|
|
48
|
+
|
|
49
|
+
!!! important
|
|
50
|
+
You need `Mail.Send` application permissions on the Microsoft Graph to be able to send mails using an application identity.
|
|
51
|
+
|
|
52
|
+
### If you are connected with a regular user account
|
|
53
|
+
|
|
54
|
+
- Specify the `--mailbox` option if you want to send an email on behalf of another mailbox. This can be a shared mailbox, group or distribution list. It will be visible in the email that the email was sent by you. You need to be assigned `Send on behalf of` permissions on the mailbox in question.
|
|
55
|
+
- You can specify the `--sender` option if you want to send an email as if you were the other user.
|
|
56
|
+
The sent email can optionally be saved in the sent folder of that user account. You'll need `Read and manage (Full Access)` permissions on the mailbox of the other user. You can combine the `--sender` and `--mailbox` options to let the other user send a mail on behalf of the specified mailbox.
|
|
57
|
+
|
|
58
|
+
!!! important
|
|
59
|
+
You need at least `Mail.Send` delegated permissions on the Microsoft Graph to be able to send emails. When specifying another user as sender, you'll need `Mail.Send.Shared` permissions.
|
|
60
|
+
|
|
36
61
|
## Examples
|
|
37
62
|
|
|
38
63
|
Send a text e-mail to the specified e-mail address
|
|
@@ -58,3 +83,21 @@ Send a text e-mail to the specified e-mail address. Don't store the e-mail in se
|
|
|
58
83
|
```sh
|
|
59
84
|
m365 outlook mail send --to chris@contoso.com --subject "DG2000 Data Sheets" --bodyContents "The latest data sheets are in the team site" --saveToSentItems false
|
|
60
85
|
```
|
|
86
|
+
|
|
87
|
+
Send an email on behalf of a shared mailbox using the signed in user
|
|
88
|
+
|
|
89
|
+
```sh
|
|
90
|
+
m365 outlook mail send --to chris@contoso.com --subject "DG2000 Data Sheets" --bodyContents "The latest data sheets are in the team site" --mailbox sales@contoso.com
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
Send an email as another user
|
|
94
|
+
|
|
95
|
+
```sh
|
|
96
|
+
m365 outlook mail send --to chris@contoso.com --subject "DG2000 Data Sheets" --bodyContents "The latest data sheets are in the team site" --sender svc_project@contoso.com
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
Send an email as another user, on behalf of a shared mailbox
|
|
100
|
+
|
|
101
|
+
```sh
|
|
102
|
+
m365 outlook mail send --to chris@contoso.com --subject "DG2000 Data Sheets" --bodyContents "The latest data sheets are in the team site" --sender svc_project@contoso.com --mailbox sales@contoso.com
|
|
103
|
+
```
|
|
@@ -10,7 +10,7 @@ m365 pp environment list [options]
|
|
|
10
10
|
|
|
11
11
|
## Options
|
|
12
12
|
|
|
13
|
-
`-a, --asAdmin
|
|
13
|
+
`-a, --asAdmin`
|
|
14
14
|
Run the command as admin and retrieve all environments. Lists only environments you have explicitly are assigned permissions to by default.
|
|
15
15
|
|
|
16
16
|
--8<-- "docs/cmd/_global.md"
|
|
@@ -26,10 +26,10 @@ m365 spo list roleassignment add [options]
|
|
|
26
26
|
: SharePoint ID of principal it may be either user id or group id we want to add permissions to. Specify principalId only when upn or groupName are not used.
|
|
27
27
|
|
|
28
28
|
`--upn [upn]`
|
|
29
|
-
: Upn/email of user to assign role to. Specify either upn or
|
|
29
|
+
: Upn/email of user to assign role to. Specify either upn or principalId
|
|
30
30
|
|
|
31
31
|
`--groupName [groupName]`
|
|
32
|
-
: Enter group name of Azure AD or SharePoint group.. Specify either groupName or
|
|
32
|
+
: Enter group name of Azure AD or SharePoint group.. Specify either groupName or principalId
|
|
33
33
|
|
|
34
34
|
`--roleDefinitionId [roleDefinitionId]`
|
|
35
35
|
: ID of role definition. Specify either roleDefinitionId or roleDefinitionName but not both
|
|
@@ -26,10 +26,10 @@ m365 spo list roleassignment remove [options]
|
|
|
26
26
|
: SharePoint ID of principal it may be either user id or group id we want to remove permissions Specify principalId only when upn or groupName are not used.
|
|
27
27
|
|
|
28
28
|
`--upn [upn]`
|
|
29
|
-
: upn/email of user. Specify either upn or
|
|
29
|
+
: upn/email of user. Specify either upn or principalId.
|
|
30
30
|
|
|
31
31
|
`--groupName [groupName]`
|
|
32
|
-
: enter group name of Azure AD or SharePoint group. Specify either groupName or
|
|
32
|
+
: enter group name of Azure AD or SharePoint group. Specify either groupName or principalId.
|
|
33
33
|
|
|
34
34
|
`--confirm`
|
|
35
35
|
: Don't prompt for confirming removing the role assignment
|
|
@@ -29,10 +29,10 @@ m365 spo listitem roleassignment remove [options]
|
|
|
29
29
|
: SharePoint ID of principal it may be either user id or group id we want to remove permissions Specify principalId only when upn or groupName are not used.
|
|
30
30
|
|
|
31
31
|
`--upn [upn]`
|
|
32
|
-
: upn/email of user. Specify either upn or
|
|
32
|
+
: upn/email of user. Specify either upn or principalId.
|
|
33
33
|
|
|
34
34
|
`--groupName [groupName]`
|
|
35
|
-
: enter group name of Azure AD or SharePoint group. Specify either groupName or
|
|
35
|
+
: enter group name of Azure AD or SharePoint group. Specify either groupName or principalId.
|
|
36
36
|
|
|
37
37
|
`--confirm`
|
|
38
38
|
: Don't prompt for confirming removing the role assignment
|
|
@@ -17,10 +17,10 @@ m365 spo web roleassignment add [options]
|
|
|
17
17
|
: SharePoint ID of principal it may be either user id or group id we want to add permissions to. Specify principalId only when upn or groupName are not used.
|
|
18
18
|
|
|
19
19
|
`--upn [upn]`
|
|
20
|
-
: upn/email of user to assign role to. Specify either upn or
|
|
20
|
+
: upn/email of user to assign role to. Specify either upn or principalId
|
|
21
21
|
|
|
22
22
|
`--groupName [groupName]`
|
|
23
|
-
: enter group name of Azure AD or SharePoint group.. Specify either groupName or
|
|
23
|
+
: enter group name of Azure AD or SharePoint group.. Specify either groupName or principalId
|
|
24
24
|
|
|
25
25
|
`--roleDefinitionId [roleDefinitionId]`
|
|
26
26
|
: ID of role definition. Specify either roleDefinitionId or roleDefinitionName but not both
|
package/package.json
CHANGED