MS Outlook – Attachments – Get Attachments

Estimated reading: 6 minutes

MS Outlook – Attachments – Get Attachments

Get Outlook message attachments. Uses the selected mailbox and returns the available result.

Collects attachment results while following the mapped @odata.nextLink until it is blank. Top Query controls the request page size rather than a guaranteed total result limit. Multiple pages consume callouts and heap. Attachment types can differ; file bytes are not guaranteed for every item.

Action details

PropertyValue
Action labelMS Outlook – Attachments – Get Attachments
CategoryCloudTools
Apex class and methodGetMSOutlookAttachments.getAttachments
Input typeGetMSOutlookAttachments.GetMSOutlookAttachmentsInput
Output typeList<List<MSOutlookAttachment>>
AuthorizationOAuth Delegated (Authorization Code) or OAuth Application (Client Credentials).
Flow automationUse an application connector configured as the Flow default.
Microsoft Graph operationGET /v1.0/me/messages/{messageId}/attachments for Authorization Code Flow; otherwise GET /v1.0/users/{userIdOrPrincipalName}/messages/{messageId}/attachments.

Prerequisites and permissions

Configure a CloudTools Connector with Connector Type set to Microsoft 365. Complete Microsoft sign-in for delegated access. For application access, grant application permissions and administrator consent, supply the target mailbox user ID or principal name, and ensure the app can access that mailbox.

Microsoft requires Mail.Read for delegated and application access. Mail.ReadWrite is also supported. See the Microsoft operation and permissions reference.

Mailbox selection: Authorization Code Flow uses /me and ignores userIdOrPrincipalName. Supplying another user does not redirect that call. Other authorization types use /users/{userIdOrPrincipalName}; their authentication must be valid for Microsoft Graph. Use Graph resource IDs rather than Salesforce record IDs.

Inputs

The table lists action labels, Apex field names, and data types. Provide one non-null request per invocation. Required text must not be blank.

InputApex fieldTypeRequiredDescription
User Id or Principal NameuserIdOrPrincipalNameStringUnless Authorization Code Flow is enabledUser id or user principal name. Required for application authorization; ignored for Authorization Code Flow.
Message IdmessageIdStringYesMessage identifier.
Select QueryselectQueryStringNoOData select query. Supply the value only, without a prefix such as $select= or a full URL. Microsoft validates query support.
Top QuerytopQueryStringNoOData top query. Supply the value only, without a prefix such as $select= or a full URL. Microsoft validates query support.

The invocable input has no connectorId field. Apex and Flow use CloudTools connector selection; the LWC controller accepts an additional connectorId property to select a record. This action does not resolve replacement tokens in its inputs; resolve dynamic values first. See Using Token Replacements.

Outputs

The invocable method returns List<List<MSOutlookAttachment>>: one outer result containing the collection for the first request. Read the inner list in Apex; Flow receives a collection output. An empty lookup produces an empty inner list. The JavaScript wrapper returns a flat array.

This action follows attachment continuation links and combines pages.

OutputApex fieldTypeDescription
IdidStringAttachment identifier.
NamenameStringAttachment name.
Content TypecontentTypeStringAttachment MIME content type.
SizesizeLongAttachment size in bytes.
Is InlineisInlineBooleanWhether attachment is inline.
Last Modified Date TimelastModifiedDateTimeStringLast modified timestamp.
Content IdcontentIdStringAttachment content id.
Content LocationcontentLocationStringAttachment content location.
Content BytescontentBytesStringBase64-encoded content.
OData TypeodataTypeStringOData type.
Additional PropertiesadditionalPropertiesList<DynamicObject>Additional data returned by query.

Optional properties depend on the response and any Select or Expand query. Do not treat an absent field as proof of its value. Timestamps represented by String remain text. Counts and metadata do not contain the full contents of the resource.

Use in Flow

Add MS Outlook – Attachments – Get Attachments in Flow Builder. Configure a Microsoft 365 application connector as the default for Flow automations, then populate the inputs above. Delegated connectors are not supported for CloudTools Flow automation. Add a fault path for callout errors. This implementation processes only the first input request; it is not a bulk action.

Use in custom Apex

This subscriber-org example uses the Apptigent namespace. Replace placeholders before use. Run in a context that permits callouts with a configured application connector. For an already-authorized delegated connector, omit the user value.

Apptigent.GetMSOutlookAttachments.GetMSOutlookAttachmentsInput request =
    new Apptigent.GetMSOutlookAttachments.GetMSOutlookAttachmentsInput();
request.userIdOrPrincipalName = 'REPLACE_WITH_MICROSOFT_USER_ID_OR_UPN';
request.messageId = 'REPLACE_WITH_MESSAGE_ID';

List<List<Apptigent.MSOutlookAttachment>> results =
    Apptigent.GetMSOutlookAttachments.getAttachments(
        new List<Apptigent.GetMSOutlookAttachments.GetMSOutlookAttachmentsInput>{ request }
    );

List<Apptigent.MSOutlookAttachment> items = results.isEmpty()
    ? new List<Apptigent.MSOutlookAttachment>() : results[0];
System.debug(items.size());

Submit one request per invocation. The example does not implement connector setup, delegated sign-in, or exception handling; those belong in the calling application.

Use in a Lightning Web Component

Use getMSOutlookAttachments from msOutlookConnectorLib, through MSOutlookConnectorController. This example uses repository c/ imports for a component in the same namespace. Replace placeholders and complete connector authorization before invoking it.

outlookActionExample.js

import { LightningElement } from 'lwc';
import { getMSOutlookAttachments, MSOutlookObjects } from 'c/msOutlookConnectorLib';

export default class OutlookActionExample extends LightningElement {
    connectorId = 'REPLACE_WITH_CONNECTOR_RECORD_ID';
    result = null;
    errorMessage = '';
    isRunning = false;
    completed = false;

    async handleRun() {
        if (this.isRunning) {
            return;
        }
        this.isRunning = true;
        this.errorMessage = '';
        try {
            const request = MSOutlookObjects.inputs.attachment();
            request.connectorId = this.connectorId;
            request.userIdOrPrincipalName = 'REPLACE_WITH_MICROSOFT_USER_ID_OR_UPN';
            request.messageId = 'REPLACE_WITH_MESSAGE_ID';
            const result = await getMSOutlookAttachments(request);
            if (!Array.isArray(result)) {
                throw new Error('No collection result was returned.');
            }
            this.result = result;
            this.completed = true;
        } catch (error) {
            this.errorMessage = error.requiresInteractiveAuthorization
                ? 'Sign in to Microsoft for this connector, then try again.'
                : error.message || 'The Outlook action failed.';
        } finally {
            this.isRunning = false;
        }
    }
}

outlookActionExample.html

<template>
    <lightning-button label="Run action" onclick={handleRun}
        disabled={isRunning}></lightning-button>
    <p role="alert">{errorMessage}</p>
</template>

The library accepts one request object and resolves to a flat array of items; use result.length and iterate the array, without an outer Apex list. The shared factory includes inputs for other actions; only the fields in this page and optional connectorId are used here.

The controller also exposes rawJson as a serialization of the mapped Apex result; it is not an original Microsoft response or an invocable Flow output.

This example reports authorization errors but does not implement sign-in. For delegated access, use getMSOutlookAuthorizationState, beginMSOutlookAuthorization, and createMSOutlookOAuthMessageHandler. Errors expose message and requiresInteractiveAuthorization.

Error handling and troubleshooting

SymptomWhat to check
Required fields errorPass a nonempty list with a non-null first request. Populate required resource fields and User Id or Principal Name for application authorization.
Authorization is requiredComplete or renew the current user’s delegated Microsoft authorization for the selected connector.
Access deniedCheck the operation permission, consent, connector identity, and mailbox access.
Resource not foundVerify IDs belong to the selected mailbox and refer to the expected resource. Authorization Code Flow ignores the user input.
Query rejectedSupply only supported OData values. Simplify Select, Expand, Filter, and Order By queries and review the Microsoft reference.
Unexpected resultCheck for an empty Apex result, a null JavaScript response, omitted properties, or incomplete pagination. Handle exceptions in the caller.
Share this Doc

MS Outlook – Attachments – Get Attachments

Or copy link

CONTENTS

Free eBook: The Ultimate Guide to Power Platform Custom Connectors

Antimanual

Ask our AI support assistant your questions about our platform, features, and services.

You are offline
Chatbot avatar
What can I help you with?

Subscribe

×
Cancel