diff --git a/packages/nodes-base/credentials/MicrosoftOutlookOAuth2Api.credentials.ts b/packages/nodes-base/credentials/MicrosoftOutlookOAuth2Api.credentials.ts
index 1c8eafb074..ef87526292 100644
--- a/packages/nodes-base/credentials/MicrosoftOutlookOAuth2Api.credentials.ts
+++ b/packages/nodes-base/credentials/MicrosoftOutlookOAuth2Api.credentials.ts
@@ -16,7 +16,27 @@ export class MicrosoftOutlookOAuth2Api implements ICredentialType {
displayName: 'Scope',
name: 'scope',
type: 'hidden' as NodePropertyTypes,
- default: 'openid offline_access Mail.ReadWrite Mail.Send MailboxSettings.Read',
+ default: 'openid offline_access Mail.ReadWrite Mail.ReadWrite.Shared Mail.Send Mail.Send.Shared MailboxSettings.Read',
+ },
+ {
+ displayName: 'Use Shared Mailbox',
+ name: 'useShared',
+ type: 'boolean' as NodePropertyTypes,
+ default: false,
+ },
+ {
+ displayName: 'User Principal Name',
+ name: 'userPrincipalName',
+ description: 'Target user\'s UPN or ID',
+ type: 'string' as NodePropertyTypes,
+ default: '',
+ displayOptions: {
+ show: {
+ useShared: [
+ true,
+ ],
+ },
+ },
},
];
}
diff --git a/packages/nodes-base/nodes/Microsoft/Outlook/FolderDescription.ts b/packages/nodes-base/nodes/Microsoft/Outlook/FolderDescription.ts
index 61991adff0..d86033f722 100644
--- a/packages/nodes-base/nodes/Microsoft/Outlook/FolderDescription.ts
+++ b/packages/nodes-base/nodes/Microsoft/Outlook/FolderDescription.ts
@@ -251,7 +251,7 @@ export const folderFields = [
name: 'filter',
type: 'string',
default: '',
- description: 'Microsoft Graph API OData $filter query.',
+ description: 'Microsoft Graph API OData $filter query. Information about the syntax can be found here.',
},
],
},
diff --git a/packages/nodes-base/nodes/Microsoft/Outlook/FolderMessageDecription.ts b/packages/nodes-base/nodes/Microsoft/Outlook/FolderMessageDecription.ts
index 3fdf7fd146..c8ec09287b 100644
--- a/packages/nodes-base/nodes/Microsoft/Outlook/FolderMessageDecription.ts
+++ b/packages/nodes-base/nodes/Microsoft/Outlook/FolderMessageDecription.ts
@@ -115,7 +115,7 @@ export const folderMessageFields = [
name: 'filter',
type: 'string',
default: '',
- description: 'Microsoft Graph API OData $filter query.',
+ description: 'Microsoft Graph API OData $filter query. Information about the syntax can be found here.',
},
],
},
diff --git a/packages/nodes-base/nodes/Microsoft/Outlook/GenericFunctions.ts b/packages/nodes-base/nodes/Microsoft/Outlook/GenericFunctions.ts
index fa190a8afd..8646ae08f2 100644
--- a/packages/nodes-base/nodes/Microsoft/Outlook/GenericFunctions.ts
+++ b/packages/nodes-base/nodes/Microsoft/Outlook/GenericFunctions.ts
@@ -14,6 +14,14 @@ import {
} from 'n8n-workflow';
export async function microsoftApiRequest(this: IExecuteFunctions | IExecuteSingleFunctions | ILoadOptionsFunctions, method: string, resource: string, body: any = {}, qs: IDataObject = {}, uri?: string, headers: IDataObject = {}, option: IDataObject = { json: true }): Promise { // tslint:disable-line:no-any
+ const credentials = this.getCredentials('microsoftOutlookOAuth2Api');
+
+ let apiUrl = `https://graph.microsoft.com/v1.0/me${resource}`;
+ // If accessing shared mailbox
+ if (credentials!.useShared && credentials!.userPrincipalName) {
+ apiUrl = `https://graph.microsoft.com/v1.0/users/${credentials!.userPrincipalName}${resource}`;
+ }
+
const options: OptionsWithUri = {
headers: {
'Content-Type': 'application/json',
@@ -21,7 +29,7 @@ export async function microsoftApiRequest(this: IExecuteFunctions | IExecuteSing
method,
body,
qs,
- uri: uri || `https://graph.microsoft.com/v1.0/me${resource}`,
+ uri: uri || apiUrl,
};
try {
Object.assign(options, option);
diff --git a/packages/nodes-base/nodes/Microsoft/Outlook/MicrosoftOutlook.node.ts b/packages/nodes-base/nodes/Microsoft/Outlook/MicrosoftOutlook.node.ts
index a428b50783..0cbd784f52 100644
--- a/packages/nodes-base/nodes/Microsoft/Outlook/MicrosoftOutlook.node.ts
+++ b/packages/nodes-base/nodes/Microsoft/Outlook/MicrosoftOutlook.node.ts
@@ -926,6 +926,10 @@ export class MicrosoftOutlook implements INodeType {
qs['$select'] = additionalFields.fields;
}
+ if (additionalFields.filter) {
+ qs['$filter'] = additionalFields.filter;
+ }
+
const endpoint = `/mailFolders/${folderId}/messages`;
if (returnAll) {
responseData = await microsoftApiRequestAllItems.call(