@pipedream/microsoft_outlook 1.5.5 → 1.6.0

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.
@@ -1,11 +1,11 @@
1
- import microsoftOutlook from "../../microsoft_outlook.app.mjs";
2
1
  import { ConfigurationError } from "@pipedream/platform";
2
+ import microsoftOutlook from "../../microsoft_outlook.app.mjs";
3
3
 
4
4
  export default {
5
5
  key: "microsoft_outlook-add-label-to-email",
6
6
  name: "Add Label to Email",
7
7
  description: "Adds a label/category to an email in Microsoft Outlook. [See the documentation](https://learn.microsoft.com/en-us/graph/api/message-update)",
8
- version: "0.0.8",
8
+ version: "0.0.9",
9
9
  type: "action",
10
10
  props: {
11
11
  microsoftOutlook,
@@ -4,7 +4,7 @@ export default {
4
4
  key: "microsoft_outlook-approve-workflow",
5
5
  name: "Approve Workflow",
6
6
  description: "Suspend the workflow until approved by email. [See the documentation](https://pipedream.com/docs/code/nodejs/rerun#flowsuspend)",
7
- version: "0.0.6",
7
+ version: "0.0.7",
8
8
  type: "action",
9
9
  props: {
10
10
  microsoftOutlook,
@@ -3,7 +3,7 @@ import microsoftOutlook from "../../microsoft_outlook.app.mjs";
3
3
  export default {
4
4
  type: "action",
5
5
  key: "microsoft_outlook-create-contact",
6
- version: "0.0.15",
6
+ version: "0.0.16",
7
7
  name: "Create Contact",
8
8
  description: "Add a contact to the root Contacts folder, [See the documentation](https://docs.microsoft.com/en-us/graph/api/user-post-contacts)",
9
9
  props: {
@@ -1,10 +1,10 @@
1
- import microsoftOutlook from "../../microsoft_outlook.app.mjs";
2
1
  import { parseObject } from "../../common/utils.mjs";
2
+ import microsoftOutlook from "../../microsoft_outlook.app.mjs";
3
3
 
4
4
  export default {
5
5
  type: "action",
6
6
  key: "microsoft_outlook-create-draft-email",
7
- version: "0.0.15",
7
+ version: "0.0.16",
8
8
  name: "Create Draft Email",
9
9
  description: "Create a draft email, [See the documentation](https://docs.microsoft.com/en-us/graph/api/user-post-messages)",
10
10
  props: {
@@ -1,12 +1,12 @@
1
- import microsoftOutlook from "../../microsoft_outlook.app.mjs";
2
1
  import fs from "fs";
3
2
  import mime from "mime-types";
3
+ import microsoftOutlook from "../../microsoft_outlook.app.mjs";
4
4
 
5
5
  export default {
6
6
  key: "microsoft_outlook-download-attachment",
7
7
  name: "Download Attachment",
8
8
  description: "Downloads an attachment to the /tmp directory. [See the documentation](https://learn.microsoft.com/en-us/graph/api/attachment-get?view=graph-rest-1.0&tabs=http)",
9
- version: "0.0.3",
9
+ version: "0.0.4",
10
10
  type: "action",
11
11
  props: {
12
12
  microsoftOutlook,
@@ -3,7 +3,7 @@ import microsoftOutlook from "../../microsoft_outlook.app.mjs";
3
3
  export default {
4
4
  type: "action",
5
5
  key: "microsoft_outlook-find-contacts",
6
- version: "0.0.15",
6
+ version: "0.0.16",
7
7
  name: "Find Contacts",
8
8
  description: "Finds contacts with the given search string. [See the documentation](https://docs.microsoft.com/en-us/graph/api/user-list-contacts)",
9
9
  props: {
@@ -4,7 +4,7 @@ export default {
4
4
  key: "microsoft_outlook-find-email",
5
5
  name: "Find Email",
6
6
  description: "Search for an email in Microsoft Outlook. [See the documentation](https://learn.microsoft.com/en-us/graph/api/user-list-messages)",
7
- version: "0.0.9",
7
+ version: "0.0.10",
8
8
  type: "action",
9
9
  props: {
10
10
  microsoftOutlook,
@@ -13,17 +13,23 @@ export default {
13
13
  alertType: "info",
14
14
  content: "When you specify `$filter`, the service infers a sort order for the results. If you use both `$orderby` and `$filter` to get messages, because the server always infers a sort order for the results of a `$filter`, you must [specify properties in certain ways](https://learn.microsoft.com/en-us/graph/api/user-list-messages#using-filter-and-orderby-in-the-same-query).",
15
15
  },
16
+ search: {
17
+ propDefinition: [
18
+ microsoftOutlook,
19
+ "search",
20
+ ],
21
+ },
16
22
  filter: {
17
- type: "string",
18
- label: "Filter",
19
- description: "Filters results. For example, `contains(subject, 'meet for lunch?')` will include messages whose subject contains ‘meet for lunch?’. [See documentation](https://learn.microsoft.com/en-us/graph/filter-query-parameter) for the full list of operations.",
20
- optional: true,
23
+ propDefinition: [
24
+ microsoftOutlook,
25
+ "filter",
26
+ ],
21
27
  },
22
28
  orderBy: {
23
- type: "string",
24
- label: "Order By",
25
- description: "Order results by a property. For example, `receivedDateTime desc` will order messages by the received date in descending order.",
26
- optional: true,
29
+ propDefinition: [
30
+ microsoftOutlook,
31
+ "orderBy",
32
+ ],
27
33
  },
28
34
  maxResults: {
29
35
  propDefinition: [
@@ -38,6 +44,7 @@ export default {
38
44
  args: {
39
45
  $,
40
46
  params: {
47
+ "$search": this.search,
41
48
  "$filter": this.filter,
42
49
  "$orderby": this.orderBy,
43
50
  },
@@ -0,0 +1,82 @@
1
+ import microsoftOutlook from "../../microsoft_outlook.app.mjs";
2
+
3
+ export default {
4
+ key: "microsoft_outlook-find-shared-folder-email",
5
+ name: "Find Shared Folder Email",
6
+ description: "Search for an email in a shared folder in Microsoft Outlook. [See the documentation](https://learn.microsoft.com/en-us/graph/api/user-list-messages)",
7
+ version: "0.0.1",
8
+ type: "action",
9
+ props: {
10
+ microsoftOutlook,
11
+ userId: {
12
+ propDefinition: [
13
+ microsoftOutlook,
14
+ "userId",
15
+ ],
16
+ },
17
+ sharedFolderId: {
18
+ propDefinition: [
19
+ microsoftOutlook,
20
+ "sharedFolderId",
21
+ ({ userId }) => ({
22
+ userId,
23
+ }),
24
+ ],
25
+ },
26
+ info: {
27
+ type: "alert",
28
+ alertType: "info",
29
+ content: "When you specify `$filter`, the service infers a sort order for the results. If you use both `$orderby` and `$filter` to get messages, because the server always infers a sort order for the results of a `$filter`, you must [specify properties in certain ways](https://learn.microsoft.com/en-us/graph/api/user-list-messages#using-filter-and-orderby-in-the-same-query).",
30
+ },
31
+ search: {
32
+ propDefinition: [
33
+ microsoftOutlook,
34
+ "search",
35
+ ],
36
+ },
37
+ filter: {
38
+ propDefinition: [
39
+ microsoftOutlook,
40
+ "filter",
41
+ ],
42
+ },
43
+ orderBy: {
44
+ propDefinition: [
45
+ microsoftOutlook,
46
+ "orderBy",
47
+ ],
48
+ },
49
+ maxResults: {
50
+ propDefinition: [
51
+ microsoftOutlook,
52
+ "maxResults",
53
+ ],
54
+ },
55
+ },
56
+ async run({ $ }) {
57
+ const items = this.microsoftOutlook.paginate({
58
+ fn: this.microsoftOutlook.listSharedFolderMessages,
59
+ args: {
60
+ $,
61
+ userId: this.userId,
62
+ sharedFolderId: this.sharedFolderId,
63
+ params: {
64
+ "$search": this.search,
65
+ "$filter": this.filter,
66
+ "$orderby": this.orderBy,
67
+ },
68
+ },
69
+ max: this.maxResults,
70
+ });
71
+
72
+ const emails = [];
73
+ for await (const item of items) {
74
+ emails.push(item);
75
+ }
76
+
77
+ $.export("$summary", `Successfully retrieved ${emails.length} shared folder message${emails.length != 1
78
+ ? "s"
79
+ : ""}.`);
80
+ return emails;
81
+ },
82
+ };
@@ -3,7 +3,7 @@ import microsoftOutlook from "../../microsoft_outlook.app.mjs";
3
3
  export default {
4
4
  type: "action",
5
5
  key: "microsoft_outlook-list-contacts",
6
- version: "0.0.15",
6
+ version: "0.0.16",
7
7
  name: "List Contacts",
8
8
  description: "Get a contact collection from the default contacts folder, [See the documentation](https://docs.microsoft.com/en-us/graph/api/user-list-contacts)",
9
9
  props: {
@@ -4,7 +4,7 @@ export default {
4
4
  key: "microsoft_outlook-list-folders",
5
5
  name: "List Folders",
6
6
  description: "Retrieves a list of all folders in Microsoft Outlook. [See the documentation](https://learn.microsoft.com/en-us/graph/api/user-list-mailfolders)",
7
- version: "0.0.6",
7
+ version: "0.0.7",
8
8
  type: "action",
9
9
  props: {
10
10
  microsoftOutlook,
@@ -4,7 +4,7 @@ export default {
4
4
  key: "microsoft_outlook-list-labels",
5
5
  name: "List Labels",
6
6
  description: "Get all the labels/categories that have been defined for a user. [See the documentation](https://learn.microsoft.com/en-us/graph/api/outlookuser-list-mastercategories)",
7
- version: "0.0.8",
7
+ version: "0.0.9",
8
8
  type: "action",
9
9
  props: {
10
10
  microsoftOutlook,
@@ -4,7 +4,7 @@ export default {
4
4
  key: "microsoft_outlook-move-email-to-folder",
5
5
  name: "Move Email to Folder",
6
6
  description: "Moves an email to the specified folder in Microsoft Outlook. [See the documentation](https://learn.microsoft.com/en-us/graph/api/message-move)",
7
- version: "0.0.6",
7
+ version: "0.0.7",
8
8
  type: "action",
9
9
  props: {
10
10
  microsoftOutlook,
@@ -4,7 +4,7 @@ export default {
4
4
  key: "microsoft_outlook-remove-label-from-email",
5
5
  name: "Remove Label from Email",
6
6
  description: "Removes a label/category from an email in Microsoft Outlook. [See the documentation](https://learn.microsoft.com/en-us/graph/api/message-update)",
7
- version: "0.0.8",
7
+ version: "0.0.9",
8
8
  type: "action",
9
9
  props: {
10
10
  microsoftOutlook,
@@ -4,7 +4,7 @@ export default {
4
4
  key: "microsoft_outlook-reply-to-email",
5
5
  name: "Reply to Email",
6
6
  description: "Reply to an email in Microsoft Outlook. [See the documentation](https://learn.microsoft.com/en-us/graph/api/message-reply)",
7
- version: "0.0.5",
7
+ version: "0.0.6",
8
8
  type: "action",
9
9
  props: {
10
10
  microsoftOutlook,
@@ -1,10 +1,10 @@
1
- import microsoftOutlook from "../../microsoft_outlook.app.mjs";
2
1
  import { parseObject } from "../../common/utils.mjs";
2
+ import microsoftOutlook from "../../microsoft_outlook.app.mjs";
3
3
 
4
4
  export default {
5
5
  type: "action",
6
6
  key: "microsoft_outlook-send-email",
7
- version: "0.0.16",
7
+ version: "0.0.17",
8
8
  name: "Send Email",
9
9
  description: "Send an email to one or multiple recipients, [See the docs](https://docs.microsoft.com/en-us/graph/api/user-sendmail)",
10
10
  props: {
@@ -3,9 +3,9 @@ import microsoftOutlook from "../../microsoft_outlook.app.mjs";
3
3
  export default {
4
4
  type: "action",
5
5
  key: "microsoft_outlook-update-contact",
6
- version: "0.0.15",
6
+ version: "0.0.16",
7
7
  name: "Update Contact",
8
- description: "Add a contact to the root Contacts folder, [See the docs](https://docs.microsoft.com/en-us/graph/api/user-post-contacts)",
8
+ description: "Update an existing contact, [See the docs](https://docs.microsoft.com/en-us/graph/api/user-post-contacts)",
9
9
  props: {
10
10
  microsoftOutlook,
11
11
  contact: {
@@ -191,6 +191,43 @@ export default {
191
191
  })) || [];
192
192
  },
193
193
  },
194
+ userId: {
195
+ type: "string",
196
+ label: "User ID",
197
+ description: "The ID of the user to get messages for",
198
+ async options() {
199
+ const { value: users } = await this.listUsers();
200
+ return users?.map(({
201
+ id: value, displayName, mail,
202
+ }) => ({
203
+ value,
204
+ label: `${displayName} (${mail})`,
205
+ })) || [];
206
+ },
207
+ },
208
+ sharedFolderId: {
209
+ type: "string",
210
+ label: "Shared Folder ID",
211
+ description: "The ID of the shared folder to get messages for",
212
+ async options({
213
+ userId, page,
214
+ }) {
215
+ const sharedFolders = await this.listSharedFolders({
216
+ userId,
217
+ params: {
218
+ $top: DEFAULT_LIMIT,
219
+ $skip: DEFAULT_LIMIT * page,
220
+ },
221
+ });
222
+
223
+ return sharedFolders?.map(({
224
+ id: value, displayName,
225
+ }) => ({
226
+ value,
227
+ label: displayName,
228
+ })) || [];
229
+ },
230
+ },
194
231
  maxResults: {
195
232
  type: "integer",
196
233
  label: "Max Results",
@@ -198,6 +235,24 @@ export default {
198
235
  default: 100,
199
236
  optional: true,
200
237
  },
238
+ search: {
239
+ type: "string",
240
+ label: "Search",
241
+ description: "Search for an email in Microsoft Outlook. Can search for specific message properties such as `to:example@example.com` or `subject:example`. If the property is excluded, the search targets the default propertes `from`, `subject`, and `body`. For example, `pizza` will search for messages with the word `pizza` in the subject, body, or from address, but `to:example@example.com` will only search for messages to `example@example.com`.",
242
+ optional: true,
243
+ },
244
+ filter: {
245
+ type: "string",
246
+ label: "Filter",
247
+ description: "Filters results. For example, `contains(subject, 'meet for lunch?')` will include messages whose subject contains ‘meet for lunch?’. [See documentation](https://learn.microsoft.com/en-us/graph/filter-query-parameter) for the full list of operations.",
248
+ optional: true,
249
+ },
250
+ orderBy: {
251
+ type: "string",
252
+ label: "Order By",
253
+ description: "Order results by a property. For example, `receivedDateTime desc` will order messages by the received date in descending order.",
254
+ optional: true,
255
+ },
201
256
  },
202
257
  methods: {
203
258
  _getUrl(path) {
@@ -221,6 +276,7 @@ export default {
221
276
  headers: this._getHeaders(headers),
222
277
  ...otherConfig,
223
278
  };
279
+
224
280
  return axios($ ?? this, config);
225
281
  },
226
282
  async createHook({ ...args } = {}) {
@@ -396,6 +452,15 @@ export default {
396
452
  ...args,
397
453
  });
398
454
  },
455
+ async listSharedFolderMessages({
456
+ userId, sharedFolderId, ...args
457
+ } = {}) {
458
+ return await this._makeRequest({
459
+ method: "GET",
460
+ path: `/users/${userId}/mailFolders/${sharedFolderId}/messages`,
461
+ ...args,
462
+ });
463
+ },
399
464
  async getContact({
400
465
  contactId,
401
466
  ...args
@@ -452,6 +517,34 @@ export default {
452
517
  ...args,
453
518
  });
454
519
  },
520
+ listUsers(args = {}) {
521
+ return this._makeRequest({
522
+ path: "/users",
523
+ ...args,
524
+ });
525
+ },
526
+ async listSharedFolders({
527
+ userId, parentFolderId, ...args
528
+ } = {}) {
529
+ const { value } = await this._makeRequest({
530
+ path: `/users/${userId}/mailFolders${parentFolderId
531
+ ? `/${parentFolderId}/childFolders`
532
+ : ""}`,
533
+ ...args,
534
+ });
535
+
536
+ const foldersArray = [];
537
+ for (const folder of value) {
538
+ foldersArray.push(folder);
539
+ foldersArray.push(...await this.listSharedFolders({
540
+ userId,
541
+ parentFolderId: folder.id,
542
+ ...args,
543
+ }));
544
+ }
545
+
546
+ return foldersArray;
547
+ },
455
548
  async *paginate({
456
549
  fn, args = {}, max,
457
550
  }) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pipedream/microsoft_outlook",
3
- "version": "1.5.5",
3
+ "version": "1.6.0",
4
4
  "description": "Pipedream Microsoft Outlook Components",
5
5
  "main": "microsoft_outlook.app.mjs",
6
6
  "keywords": [
@@ -5,7 +5,7 @@ export default {
5
5
  key: "microsoft_outlook-new-attachment-received",
6
6
  name: "New Attachment Received (Instant)",
7
7
  description: "Emit new event when a new email containing one or more attachments arrives in a specified Microsoft Outlook folder.",
8
- version: "0.0.4",
8
+ version: "0.0.5",
9
9
  type: "source",
10
10
  dedupe: "unique",
11
11
  methods: {
@@ -5,7 +5,7 @@ export default {
5
5
  key: "microsoft_outlook-new-contact",
6
6
  name: "New Contact Event (Instant)",
7
7
  description: "Emit new event when a new Contact is created",
8
- version: "0.0.16",
8
+ version: "0.0.17",
9
9
  type: "source",
10
10
  hooks: {
11
11
  ...common.hooks,
@@ -1,5 +1,5 @@
1
- import common from "../common/common-new-email.mjs";
2
1
  import md5 from "md5";
2
+ import common from "../common/common-new-email.mjs";
3
3
  import sampleEmit from "./test-event.mjs";
4
4
 
5
5
  export default {
@@ -7,7 +7,7 @@ export default {
7
7
  key: "microsoft_outlook-new-email",
8
8
  name: "New Email Event (Instant)",
9
9
  description: "Emit new event when an email is received in specified folders.",
10
- version: "0.1.0",
10
+ version: "0.1.1",
11
11
  type: "source",
12
12
  dedupe: "unique",
13
13
  methods: {
@@ -0,0 +1,87 @@
1
+ import { DEFAULT_POLLING_SOURCE_TIMER_INTERVAL } from "@pipedream/platform";
2
+ import microsoftOutlook from "../../microsoft_outlook.app.mjs";
3
+ import sampleEmit from "./test-event.mjs";
4
+
5
+ export default {
6
+ key: "microsoft_outlook-new-email-in-shared-folder",
7
+ name: "New Email in Shared Folder Event",
8
+ description: "Emit new event when an email is received in specified shared folders.",
9
+ version: "0.0.1",
10
+ type: "source",
11
+ dedupe: "unique",
12
+ props: {
13
+ microsoftOutlook,
14
+ db: "$.service.db",
15
+ timer: {
16
+ type: "$.interface.timer",
17
+ default: {
18
+ intervalSeconds: DEFAULT_POLLING_SOURCE_TIMER_INTERVAL,
19
+ },
20
+ },
21
+ userId: {
22
+ propDefinition: [
23
+ microsoftOutlook,
24
+ "userId",
25
+ ],
26
+ },
27
+ sharedFolderId: {
28
+ propDefinition: [
29
+ microsoftOutlook,
30
+ "sharedFolderId",
31
+ ({ userId }) => ({
32
+ userId,
33
+ }),
34
+ ],
35
+ },
36
+ },
37
+ methods: {
38
+ _getLastDate() {
39
+ return this.db.get("lastDate") || "1970-01-01T00:00:00Z";
40
+ },
41
+ _setLastDate(lastDate) {
42
+ this.db.set("lastDate", lastDate);
43
+ },
44
+ async startEvent(maxResults = 0) {
45
+ const lastDate = this._getLastDate();
46
+ const items = this.microsoftOutlook.paginate({
47
+ fn: this.microsoftOutlook.listSharedFolderMessages,
48
+ args: {
49
+ params: {
50
+ $orderBy: "createdDateTime desc",
51
+ $filter: `createdDateTime gt ${lastDate}`,
52
+ },
53
+ sharedFolderId: this.sharedFolderId,
54
+ userId: this.userId,
55
+ },
56
+ max: maxResults,
57
+ });
58
+
59
+ let responseArray = [];
60
+
61
+ for await (const item of items) {
62
+ responseArray.push(item);
63
+ }
64
+ if (responseArray.length) this._setLastDate(responseArray[0].createdDateTime);
65
+
66
+ for (const item of responseArray.reverse()) {
67
+ this.$emit(
68
+ item,
69
+ {
70
+ id: item.conversationId,
71
+ summary: `A new email with id: "${item.conversationId}" was received!`,
72
+ ts: item.createdDateTime,
73
+ },
74
+ );
75
+ }
76
+ },
77
+ },
78
+ hooks: {
79
+ async deploy() {
80
+ await this.startEvent(25);
81
+ },
82
+ },
83
+ async run() {
84
+ await this.startEvent();
85
+ },
86
+ sampleEmit,
87
+ };
@@ -0,0 +1,55 @@
1
+ export default {
2
+ "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users('hungvturing%40outlook.com')/messages/$entity",
3
+ "@odata.etag": "W/\"CQAAABYAAjSvdS5Q4eKWQh5kr77AAA1qCBu\"",
4
+ "id": "AQMkADAwATMwAi0wMAoARgAAA5s75F287T1HnVlwotePjeEHAAaU2NK91LlDh4pZCHmSvvsAAAIBDAAAAAaU2NK91LlDh4pZCHmSvvsAAAA1qWTHAAAA",
5
+ "createdDateTime": "2023-07-03T09:32:32Z",
6
+ "lastModifiedDateTime": "2023-07-03T09:32:33Z",
7
+ "changeKey": "CQAAABYAvdS5Q4eKWQh5kr77AAA1qCBu",
8
+ "categories": [],
9
+ "receivedDateTime": "2023-07-03T09:32:33Z",
10
+ "sentDateTime": "2023-07-03T09:32:17Z",
11
+ "hasAttachments": false,
12
+ "internetMessageId": "<CAMy7fS6yVwqvj_O5+Bvuhgda4zQLKD9b7gydA_g5mg@mail.gmail.com>",
13
+ "subject": "Hi hello",
14
+ "bodyPreview": "Hi hello how are you?",
15
+ "importance": "normal",
16
+ "parentFolderId": "AQMkADAwATMwM0YjM3LTAwAi0wMAoALgAAA5s75F287T1HnVlwotePjeEBAAaU2NK91LlDh4pZCHmSvvsAAAIBDAAAAA==",
17
+ "conversationId": "AQQkADAwATMwM0YjM3LTAwAi0wMAoAEAA_cUTd_wdjS71eaRr3Nrqc",
18
+ "conversationIndex": "AQHZrZFLY0u9Xmka9za6nA==",
19
+ "isDeliveryReceiptRequested": null,
20
+ "isReadReceiptRequested": false,
21
+ "isRead": false,
22
+ "isDraft": false,
23
+ "webLink": "https://outlook.live.com/owa/?ItemID=AQMkADAwATMwYjM3LTAwAi0wMAoARgAAA5s75F287T1HnVlwotePjeEHAAaU2NK91LlDh4pZCHmSvvsAAAIBDAAAAAaU2NK91LlDh4pZCHmSvvsAAAA1qWTHAAAA&exvsurl=1&viewmodel=ReadMessageItem",
24
+ "inferenceClassification": "focused",
25
+ "body": {
26
+ "contentType": "html",
27
+ "content": "<html><head>\r\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"></head><body><div dir=\"ltr\">Hi hello how are&nbsp;you?</div></body></html>"
28
+ },
29
+ "sender": {
30
+ "emailAddress": {
31
+ "name": "John Doe",
32
+ "address": "john@doe.com"
33
+ }
34
+ },
35
+ "from": {
36
+ "emailAddress": {
37
+ "name": "John Doe",
38
+ "address": "john@doe.com"
39
+ }
40
+ },
41
+ "toRecipients": [
42
+ {
43
+ "emailAddress": {
44
+ "name": "johndoe@outlook.com",
45
+ "address": "johndoe@outlook.com"
46
+ }
47
+ }
48
+ ],
49
+ "ccRecipients": [],
50
+ "bccRecipients": [],
51
+ "replyTo": [],
52
+ "flag": {
53
+ "flagStatus": "notFlagged"
54
+ }
55
+ }