\\
Based on __Microsoft Graph REST API__ ( More info: [Message Resource Type Link| https://docs.microsoft.com/en-us/graph/api/resources/message?view=graph-rest-1.0]).\\
\\
----
__⚠️ Proxy Configuration:__ If your server accesses the internet through a proxy, make sure to whitelist the following domains to allow authentication and Microsoft Graph API access:\\
•__login.microsoftonline.com__\\
•__graph.microsoft.com__\\
----
\\
!1. Microsoft Graph Application Registration\\
\\
It requires Microsoft Graph Application registration. Start at the Microsoft Azure portal:\\
[https://azure.microsoft.com/en-us/features/azure-portal/]\\
\\
\\
Open the __Microsoft Azure Portal__: [Link|https://azure.microsoft.com/en-us/features/azure-portal]\\
\\
__Application registration:__ Navigate to App registrations in the Azure Portal. Click on __New registration__ to create a new application.\\
\\
[SharePoint Integration|new_registration.png]\\
\\
In the Redirect URI section, for Platform configuration, select __Web__. The Redirect URL must end with __"register_microsoft_graph_api/"__.\\
\\
{{{

    http://localhost:9090/register_microsoft_graph_api/
    or
    https://your.crushftp.domain.com/register_microsoft_graph_api/

}}}\\
\\
__Secret key__: A new client secret must be created. Go to Certificates & secrets, and generate a new client secret by clicking on New client secret. ⚠️ Ensure you copy over the __value__ immediately!\\
\\
[SharePoint Integration/new_secret.png]\\
\\
[SharePoint Integration/secret_value.png]\\
\\
\\
__API permissions__ :\\
\\
Go to __API permissions__, click __Add a permission__, and select __Microsoft Graph__. Then choose __Application permissions__ and add the following permissions:\\
\\
[attachments|permission_microsoft_graph.png]\\
[attachments|permission_app_permissions.png]\\
[attachments|permission_user.png]\\
[attachments|permissions_mail.png]\\
\\
Grant __Admin consent__ for the newly added permission.\\
\\
[SharePoint Integration/app_permission_admin_consent.png]\\
\\
Alternatively, you can perform this action via __CrushFTP__: Click the __Get Admin Consent__ button. __⚠️ Note:__ Make sure the WebInterface host and port match the host and port specified in the App Registration’s __Redirect URL__.\\
\\
[attachments|admin_consent.png]\\
[attachments|client_id.png]\\

\\
You need to log in with an __admin account__ to grant permissions for CrushFTP.\\
⚠️ Any changes made to __API permissions__ in the __Azure App Registration__ require new admin consent.\\  
\\
----
!2. Task Settings\\
\\
[attachments|mail_task.png]\\
\\
__Client ID__ : See at App Registration -> Overview -> Application (client) ID\\
__Client Secret__: See at App Registration -> Manage -> Certificates & secrets) make sure to copy the value field, not the ID\\
__Tenant__: See at App Registration -> Overview -> Directory (tenant) ID\\
\\

__Folder__: Specifies the mail folder to process. Supports subfolders using the format Folder/Subbolder/SubSubFolder\\
__Search query__: Defines the search criteria for messages. It uses a specific syntax called Keyword Query Language ([KQL|https://learn.microsoft.com/en-us/sharepoint/dev/general-development/keyword-query-language-kql-syntax-reference]). In this language, the asterisk (*) wildcard is only supported for prefix matching (e.g., subject:report*). It does not have a character or function for suffix (*report) or contains (*report*) matching. Refer to the Microsoft Graph Search Parameters for syntax and options. More info: [Microsoft Graph Search Parameter Link|https://learn.microsoft.com/en-us/graph/search-query-parameter?tabs=http].\\
__Examples__:
{{{
from

Searches the display name and email address of the sender. 
Example: from:"John Doe" or from:john.doe@example.com
}}}\\
{{{
to

Searches the display names and email addresses in the To: line. 
Example: to:marketing
}}}\\
{{{
cc

Searches the display names and email addresses in the Cc: line. 
Example: cc:jane.doe@example.com
}}}\\
{{{
bcc

Searches the display names and email addresses in the Bcc: line. 
Example: bcc:"Project Leads"
}}}\\
{{{
recipients

Searches across all recipient fields (to, cc, and bcc) simultaneously. 
Example: recipients:management
}}}\\
{{{
subject

Searches the subject line of the message. For phrases, use double quotes. 
Example: subject:"Q4 Financial Report"
}}}\\
{{{
body

Searches the content of the message body. 
Example: body:invoice or body:"Action Required"
}}}\\
{{{
attachment

Searches the file names of attachments. 
Example: attachment:presentation.pptx
}}}\\
{{{
sent

Searches for messages sent on a specific date. You can use date keywords or specific dates in YYYY-MM-DD, YYYY-MM-DDThh:mm:ss, YYYY-MM-DDThh:mm:ssZ, or YYYY-MM-DDThh:mm:ssfrZ format. 
Example: sent:yesterday or sent:2025-10-14
}}}\\
{{{
received

Searches for messages received on a specific date. 
Example: received:last week or received:>=2025-10-01
}}}\\
{{{
hasattachment

Searches for messages that have at least one attachment. This is a boolean search. 
Example: hasattachment:true
}}}\\
{{{
importance

Searches for messages with a specific importance level. 
Example: importance:high
}}}\\
{{{
isread

Searches for messages based on their read status. 
Example: isread:false
}}}\\
{{{
size

Searches for messages based on their size in bytes. You can use range operators (>, <, >=, <=). 
Example: size:>5000000 (for messages larger than 5MB)
}}}\\
\\
__After processing copy message to this mailbox__: Specifies the destination mailbox for processed messages. Subfolders are also supported.\\
\\
__Variable patterns:__\\
\\
a.) Message-related variables:\\
\\
{{{
{mail_id}, {mail_createdDateTime}, {mail_lastModifiedDateTime}, {mail_hangeKey}, {mail_sentDateTime}, {mail_receivedDateTime}, {mail_hasAttachments}, {mail_internetMessageId}, {mail_subject}, {mail_body_content}, {mail_body_type}, {mail_importance}, {mail_parentFolderId}, {mail_conversationId}, {mail_isRead}, {mail_isDraft}, {mail_sender}, {mail_from} , {mail_to}, {mail_cc}, {mail_bcc}, {mail_reply_to}
}}}\\
\\ 
b.) Attachment-related variables:\\
\\
{{{
{id}, {contentType}, {size}, {name}, {lastModifiedDateTime}
}}}\\
\\
For alternatives, see the general POP/IMAP Task description: [POP/IMAP Task – CrushFTP Documentation Link| https://www.crushftp.com/crush11wiki/Wiki.jsp?page=CrushTask#section-CrushTask-POP3IMAP]\\