Add Activepieces integration for workflow automation
- Add Activepieces fork with SmoothSchedule custom piece - Create integrations app with Activepieces service layer - Add embed token endpoint for iframe integration - Create Automations page with embedded workflow builder - Add sidebar visibility fix for embed mode - Add list inactive customers endpoint to Public API - Include SmoothSchedule triggers: event created/updated/cancelled - Include SmoothSchedule actions: create/update/cancel events, list resources/services/customers 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
{
|
||||
"extends": [
|
||||
"../../../../.eslintrc.base.json"
|
||||
],
|
||||
"ignorePatterns": [
|
||||
"!**/*"
|
||||
],
|
||||
"overrides": [
|
||||
{
|
||||
"files": [
|
||||
"*.ts",
|
||||
"*.tsx",
|
||||
"*.js",
|
||||
"*.jsx"
|
||||
],
|
||||
"rules": {}
|
||||
},
|
||||
{
|
||||
"files": [
|
||||
"*.ts",
|
||||
"*.tsx"
|
||||
],
|
||||
"rules": {}
|
||||
},
|
||||
{
|
||||
"files": [
|
||||
"*.js",
|
||||
"*.jsx"
|
||||
],
|
||||
"rules": {}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
# pieces-microsoft-outlook
|
||||
|
||||
This library was generated with [Nx](https://nx.dev).
|
||||
|
||||
## Building
|
||||
|
||||
Run `nx build pieces-microsoft-outlook` to build the library.
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"name": "@activepieces/piece-microsoft-outlook",
|
||||
"version": "0.1.14",
|
||||
"dependencies": {
|
||||
"@microsoft/microsoft-graph-client": "3.0.7",
|
||||
"@microsoft/microsoft-graph-types": "2.40.0"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,65 @@
|
||||
{
|
||||
"name": "pieces-microsoft-outlook",
|
||||
"$schema": "../../../../node_modules/nx/schemas/project-schema.json",
|
||||
"sourceRoot": "packages/pieces/community/microsoft-outlook/src",
|
||||
"projectType": "library",
|
||||
"release": {
|
||||
"version": {
|
||||
"currentVersionResolver": "git-tag",
|
||||
"preserveLocalDependencyProtocols": false,
|
||||
"manifestRootsToUpdate": [
|
||||
"dist/{projectRoot}"
|
||||
]
|
||||
}
|
||||
},
|
||||
"tags": [],
|
||||
"targets": {
|
||||
"build": {
|
||||
"executor": "@nx/js:tsc",
|
||||
"outputs": [
|
||||
"{options.outputPath}"
|
||||
],
|
||||
"options": {
|
||||
"outputPath": "dist/packages/pieces/community/microsoft-outlook",
|
||||
"tsConfig": "packages/pieces/community/microsoft-outlook/tsconfig.lib.json",
|
||||
"packageJson": "packages/pieces/community/microsoft-outlook/package.json",
|
||||
"main": "packages/pieces/community/microsoft-outlook/src/index.ts",
|
||||
"assets": [
|
||||
"packages/pieces/community/microsoft-outlook/*.md",
|
||||
{
|
||||
"input": "packages/pieces/community/microsoft-outlook/src/i18n",
|
||||
"output": "./src/i18n",
|
||||
"glob": "**/!(i18n.json)"
|
||||
}
|
||||
],
|
||||
"buildableProjectDepsInPackageJsonType": "dependencies",
|
||||
"updateBuildableProjectDepsInPackageJson": true
|
||||
},
|
||||
"dependsOn": [
|
||||
"^build",
|
||||
"prebuild"
|
||||
]
|
||||
},
|
||||
"nx-release-publish": {
|
||||
"options": {
|
||||
"packageRoot": "dist/{projectRoot}"
|
||||
}
|
||||
},
|
||||
"lint": {
|
||||
"executor": "@nx/eslint:lint",
|
||||
"outputs": [
|
||||
"{options.outputFile}"
|
||||
]
|
||||
},
|
||||
"prebuild": {
|
||||
"executor": "nx:run-commands",
|
||||
"options": {
|
||||
"cwd": "packages/pieces/community/microsoft-outlook",
|
||||
"command": "bun install --no-save --silent"
|
||||
},
|
||||
"dependsOn": [
|
||||
"^build"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,84 @@
|
||||
{
|
||||
"\n1. Sign in to [Microsoft Azure Portal](https://portal.azure.com/).\n2. From the left sidebar, go to **Microsoft Enfra ID**.\n3. Under **Manage**, click on **App registrations**.\n4. Click the **New registration** button.\n5. Enter a **Name** for your app.\n6. For **Supported account types**, choose:\n - **Accounts in any organizational directory (Any Microsoft Entra ID tenant - Multitenant) and personal Microsoft accounts**\n - Or select based on your requirement.\n7. In **Redirect URI**, select **Web** and ad": "\n1. Melden Sie sich bei [Microsoft Azure Portal](https://portal.azure.com/).\n. Von der linken Seitenleiste gehen Sie zur **Microsoft Enfra ID**.\n3. Unter **Verwalten** klicken Sie auf **App-Registrierungen**.\n4. Klicken Sie auf die **Neue Registrierung** Schaltfläche.\n5. Geben Sie einen **Name** für Ihre App ein.\n6. Für **unterstützte Kontotypen**, auswählen:\n - **Konten in jedem Organisationsverzeichnis (jeder Microsoft-Entra-ID-Mieter - Multitenant) und persönlichen Microsoft-Konten**\n - Oder wählen Sie nach Ihren Anforderungen aus.\n7. In **Umleitungs-URI** wählen Sie **Web** und fügen Sie die angegebene URL hinzu.\n8. Klicken Sie auf **Registrieren**.\n9. Nach der Registrierung werden Sie zur Übersichtsseite der App weitergeleitet. Kopieren Sie die **Anwendungs-(Client)-ID**.\n10. Gehen Sie aus dem linken Menü zu **Zertifikate & Geheimnisse**.\n - Unter **Kundengeheimnis**, klicken Sie auf **Neues Kundengeheimnis**.\n - Geben Sie eine Beschreibung an, setzen Sie ein Ablaufdatum und klicken Sie auf **Hinzufügen**.\n - Kopieren Sie den **Wert** des Client-Geheimnisses (dies wird nicht wieder angezeigt).\n11. Gehe zu **API Berechtigungen** vom linken Menü.\n - Klicke **Berechtigung hinzufügen**.\n - Wähle **Microsoft Graph** → **delegierte Berechtigungen**.\n - Fügen Sie folgende Bereiche hinzu:\n - Mail. eadSchreiben\n - Mail.Senden Sie \n - Kalender. ead\n\t - offline_access\n\t - User.Lesen Sie\n - Klicken Sie auf **Berechtigungen hinzufügen**.\n12. Kopieren Sie Ihre **Client-ID** und **Client-Geheimnis**.\n",
|
||||
"Send Email": "E-Mail senden",
|
||||
"Download Attachment": "Anhang herunterladen",
|
||||
"Reply to Email": "Auf E-Mail antworten",
|
||||
"Create Draft Email": "Entwurf E-Mail erstellen",
|
||||
"Add Label to Email": "Label zur E-Mail hinzufügen",
|
||||
"Remove Label from Email": "Label aus E-Mail entfernen",
|
||||
"Move Email to Folder": "E-Mail in Ordner verschieben",
|
||||
"Send Draft Email": "Entwurf E-Mail senden",
|
||||
"Forward Email": "E-Mail weiterleiten",
|
||||
"Find Email": "E-Mail finden",
|
||||
"Custom API Call": "Eigener API-Aufruf",
|
||||
"Sends an email using Microsoft Outlook.": "Sendet eine E-Mail mit Microsoft Outlook.",
|
||||
"Download attachments from a specific email message.": "Laden Sie Anhänge von einer bestimmten E-Mail herunter.",
|
||||
"Reply to an outlook email.": "Auf eine Outlook-E-Mail antworten.",
|
||||
"Creates a draft email message.": "Erstellt eine E-Mail-Entwurfs-Nachricht.",
|
||||
"Adds a category (label) to an email message.": "Fügt einer E-Mail eine Kategorie (Label) hinzu.",
|
||||
"Removes a category (label) from an email message.": "Entfernt eine Kategorie (Label) aus einer E-Mail-Nachricht.",
|
||||
"Moves an email message to a specific folder.": "Verschiebt eine E-Mail in einen bestimmten Ordner.",
|
||||
"Sends a draft email message.": "Sendet eine E-Mail Entwurfsnachricht.",
|
||||
"Forwards an email message.": "Eine E-Mail weiterleiten.",
|
||||
"Searches for emails using full-text search.": "Sucht nach E-Mails mit Volltextsuche.",
|
||||
"Make a custom API call to a specific endpoint": "Einen benutzerdefinierten API-Aufruf an einen bestimmten Endpunkt machen",
|
||||
"To Email(s)": "An E-Mail(s)",
|
||||
"CC Email(s)": "CC Email(s)",
|
||||
"BCC Email(s)": "BCC E-Mail(s)",
|
||||
"Subject": "Betreff",
|
||||
"Body Format": "Body Format",
|
||||
"Body": "Körper",
|
||||
"Attachments": "Anhänge",
|
||||
"Message ID": "Nachrichten-ID",
|
||||
"Email": "E-Mail",
|
||||
"Reply Body": "Antwort-Körper",
|
||||
"CC Recipients": "CC-Empfänger",
|
||||
"BCC Recipients": "BCC-Empfänger",
|
||||
"Create Draft": "Entwurf erstellen",
|
||||
"Categories": "Kategorien",
|
||||
"Categories to Remove": "Zu entfernende Kategorien",
|
||||
"Destination Folder": "Zielordner",
|
||||
"Draft Email": "Entwurf E-Mail",
|
||||
"Comment": "Kommentar",
|
||||
"Search Query": "Suchanfrage",
|
||||
"Folder": "Ordner",
|
||||
"Max Results": "Maximale Ergebnisse",
|
||||
"Method": "Methode",
|
||||
"Headers": "Kopfzeilen",
|
||||
"Query Parameters": "Abfrageparameter",
|
||||
"Response is Binary ?": "Antwort ist binär?",
|
||||
"No Error on Failure": "Kein Fehler bei Fehler",
|
||||
"Timeout (in seconds)": "Timeout (in Sekunden)",
|
||||
"The ID of the email message containing the attachment.": "Die ID der E-Mail-Nachricht, die den Anhang enthält.",
|
||||
"Select the email message to reply to.": "Wählen Sie die E-Mail-Nachricht, auf die Sie antworten möchten.",
|
||||
"If enabled, creates draft without sending.": "Wenn aktiviert, erstellt Entwurf ohne zu senden.",
|
||||
"Select the email message to add the label to.": "Wählen Sie die E-Mail-Nachricht, zu der die Bezeichnung hinzugefügt werden soll.",
|
||||
"Categories to add to the email.": "Kategorien, die zur E-Mail hinzugefügt werden sollen.",
|
||||
"Select the email message to remove the label from.": "Wählen Sie die E-Mail-Nachricht, von der die Bezeichnung entfernt werden soll.",
|
||||
"Categories to remove from the email.": "Kategorien aus der E-Mail zu entfernen.",
|
||||
"Select the email message to move.": "Wählen Sie die zu verschiebende E-Mail-Nachricht.",
|
||||
"The folder to move the email to.": "Der Ordner, an den die E-Mail verschoben wird.",
|
||||
"Select the draft email message to send.": "Wählen Sie den zu sendenden Entwurf der E-Mail-Nachricht.",
|
||||
"Select the email message to forward.": "Wählen Sie die E-Mail-Nachricht, die weitergeleitet werden soll.",
|
||||
"Optional comment to include with the forwarded message.": "Optionaler Kommentar mit der weitergeleiteten Nachricht.",
|
||||
"Search terms to find emails (e.g., \"from:john@example.com\", \"subject:urgent\", \"hasAttachments:true\")": "Suchbegriffe für E-Mails (z.B. \"from:john@example.com\", \"subject:urgent\", \"hasAttachments:true\")",
|
||||
"Search in a specific folder. Leave empty to search all folders.": "Suche in einem bestimmten Ordner. Leer lassen, um alle Ordner zu durchsuchen.",
|
||||
"Maximum number of results to return (1-1000).": "Maximale Ergebnisanzahl (1-1000).",
|
||||
"Authorization headers are injected automatically from your connection.": "Autorisierungs-Header werden automatisch von Ihrer Verbindung injiziert.",
|
||||
"Enable for files like PDFs, images, etc..": "Aktivieren für Dateien wie PDFs, Bilder, etc..",
|
||||
"HTML": "HTML",
|
||||
"Text": "Text",
|
||||
"GET": "ERHALTEN",
|
||||
"POST": "POST",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "LÖSCHEN",
|
||||
"HEAD": "HEAD",
|
||||
"New Email": "Neue E-Mail",
|
||||
"New Email in Folder": "Neue E-Mail im Ordner",
|
||||
"New Attachment": "Neuer Anhang",
|
||||
"Triggers when a new email is received in the inbox.": "Wird ausgelöst, wenn eine neue E-Mail im Posteingang empfangen wird.",
|
||||
"Triggers when a new email is delivered into the specified folder.": "Wird ausgelöst, wenn eine neue E-Mail in den angegebenen Ordner geschickt wird.",
|
||||
"Triggers when a new email containing one or more attachments arrives.": "Wird ausgelöst, wenn eine neue E-Mail mit einem oder mehreren Anhängen eintrifft.",
|
||||
"Monitor attachments in a specific folder. Leave empty to monitor all folders.": "Anhänge in einem bestimmten Ordner überwachen. Leer lassen, um alle Ordner zu überwachen."
|
||||
}
|
||||
@@ -0,0 +1,84 @@
|
||||
{
|
||||
"\n1. Sign in to [Microsoft Azure Portal](https://portal.azure.com/).\n2. From the left sidebar, go to **Microsoft Enfra ID**.\n3. Under **Manage**, click on **App registrations**.\n4. Click the **New registration** button.\n5. Enter a **Name** for your app.\n6. For **Supported account types**, choose:\n - **Accounts in any organizational directory (Any Microsoft Entra ID tenant - Multitenant) and personal Microsoft accounts**\n - Or select based on your requirement.\n7. In **Redirect URI**, select **Web** and ad": "\n1. Sign in to [Microsoft Azure Portal](https://portal.azure.com/).\n2. From the left sidebar, go to **Microsoft Enfra ID**.\n3. Under **Manage**, click on **App registrations**.\n4. Click the **New registration** button.\n5. Enter a **Name** for your app.\n6. For **Supported account types**, choose:\n - **Accounts in any organizational directory (Any Microsoft Entra ID tenant - Multitenant) and personal Microsoft accounts**\n - Or select based on your requirement.\n7. In **Redirect URI**, select **Web** and add the given URL.\n8. Click **Register**.\n9. After registration, you’ll be redirected to the app’s overview page. Copy the **Application (client) ID**.\n10. From the left menu, go to **Certificates & secrets**.\n - Under **Client secrets**, click **New client secret**.\n - Provide a description, set an expiry, and click **Add**.\n - Copy the **Value** of the client secret (this will not be shown again).\n11. Go to **API permissions** from the left menu.\n - Click **Add a permission**.\n - Select **Microsoft Graph** → **Delegated permissions**.\n - Add the following scopes:\n - Mail.ReadWrite\n - Mail.Send\n\t - Calendars.Read\n\t - offline_access\n\t - User.Read\n - Click **Add permissions**.\n12. Copy your **Client ID** and **Client Secret**.\n",
|
||||
"Send Email": "Enviar Email",
|
||||
"Download Attachment": "Descargar adjunto",
|
||||
"Reply to Email": "Responder al email",
|
||||
"Create Draft Email": "Crear Email borrador",
|
||||
"Add Label to Email": "Añadir etiqueta al email",
|
||||
"Remove Label from Email": "Quitar etiqueta del email",
|
||||
"Move Email to Folder": "Mover correo a la carpeta",
|
||||
"Send Draft Email": "Enviar Email borrador",
|
||||
"Forward Email": "Reenviar Email",
|
||||
"Find Email": "Buscar Email",
|
||||
"Custom API Call": "Llamada API personalizada",
|
||||
"Sends an email using Microsoft Outlook.": "Envía un correo electrónico usando Microsoft Outlook.",
|
||||
"Download attachments from a specific email message.": "Descargar archivos adjuntos de un mensaje de correo electrónico específico.",
|
||||
"Reply to an outlook email.": "Responder a un correo electrónico de perspectiva.",
|
||||
"Creates a draft email message.": "Crea un borrador de mensaje de correo electrónico.",
|
||||
"Adds a category (label) to an email message.": "Añade una categoría (etiqueta) a un mensaje de correo electrónico.",
|
||||
"Removes a category (label) from an email message.": "Elimina una categoría (etiqueta) de un mensaje de correo electrónico.",
|
||||
"Moves an email message to a specific folder.": "Mueve un mensaje de correo electrónico a una carpeta específica.",
|
||||
"Sends a draft email message.": "Envía un borrador de mensaje de correo electrónico.",
|
||||
"Forwards an email message.": "Reenviar un mensaje de correo electrónico.",
|
||||
"Searches for emails using full-text search.": "Busca correos electrónicos usando búsqueda de texto completo.",
|
||||
"Make a custom API call to a specific endpoint": "Hacer una llamada API personalizada a un extremo específico",
|
||||
"To Email(s)": "A Email(s)",
|
||||
"CC Email(s)": "CC Email(s)",
|
||||
"BCC Email(s)": "Correo electrónico BCC",
|
||||
"Subject": "Asunto",
|
||||
"Body Format": "Formato del cuerpo",
|
||||
"Body": "Cuerpo",
|
||||
"Attachments": "Adjuntos",
|
||||
"Message ID": "ID del mensaje",
|
||||
"Email": "E-mail",
|
||||
"Reply Body": "Responder cuerpo",
|
||||
"CC Recipients": "Destinatarios CC",
|
||||
"BCC Recipients": "Destinatarios BCC",
|
||||
"Create Draft": "Crear borrador",
|
||||
"Categories": "Categorías",
|
||||
"Categories to Remove": "Categorías a eliminar",
|
||||
"Destination Folder": "Carpeta de destino",
|
||||
"Draft Email": "Email borrador",
|
||||
"Comment": "Comentario",
|
||||
"Search Query": "Buscar consulta",
|
||||
"Folder": "Carpeta",
|
||||
"Max Results": "Resultados máximos",
|
||||
"Method": "Método",
|
||||
"Headers": "Encabezados",
|
||||
"Query Parameters": "Parámetros de consulta",
|
||||
"Response is Binary ?": "¿Respuesta es binaria?",
|
||||
"No Error on Failure": "No hay ningún error en fallo",
|
||||
"Timeout (in seconds)": "Tiempo de espera (en segundos)",
|
||||
"The ID of the email message containing the attachment.": "El ID del mensaje de correo electrónico que contiene el adjunto.",
|
||||
"Select the email message to reply to.": "Seleccione el mensaje de correo electrónico al que responder.",
|
||||
"If enabled, creates draft without sending.": "Si está activado, crea borrador sin enviar.",
|
||||
"Select the email message to add the label to.": "Seleccione el mensaje de correo electrónico al que añadir la etiqueta.",
|
||||
"Categories to add to the email.": "Categorías a añadir al correo electrónico.",
|
||||
"Select the email message to remove the label from.": "Seleccione el mensaje de correo electrónico para eliminar la etiqueta.",
|
||||
"Categories to remove from the email.": "Categorías a eliminar del correo electrónico.",
|
||||
"Select the email message to move.": "Seleccione el mensaje de correo electrónico a mover.",
|
||||
"The folder to move the email to.": "La carpeta a la que mover el correo electrónico.",
|
||||
"Select the draft email message to send.": "Seleccione el borrador de mensaje de correo electrónico a enviar.",
|
||||
"Select the email message to forward.": "Seleccione el mensaje de correo electrónico a continuación.",
|
||||
"Optional comment to include with the forwarded message.": "Comentario opcional para incluir con el mensaje reenviado.",
|
||||
"Search terms to find emails (e.g., \"from:john@example.com\", \"subject:urgent\", \"hasAttachments:true\")": "Buscar términos para encontrar correos electrónicos (por ejemplo, \"from:john@example.com\", \"tema:urgente\", \"hasAttachments:true\")",
|
||||
"Search in a specific folder. Leave empty to search all folders.": "Buscar en una carpeta específica. Dejar vacío para buscar en todas las carpetas.",
|
||||
"Maximum number of results to return (1-1000).": "Número máximo de resultados a devolver (1-1000).",
|
||||
"Authorization headers are injected automatically from your connection.": "Las cabeceras de autorización se inyectan automáticamente desde tu conexión.",
|
||||
"Enable for files like PDFs, images, etc..": "Activar para archivos como PDFs, imágenes, etc.",
|
||||
"HTML": "HTML",
|
||||
"Text": "Texto",
|
||||
"GET": "RECOGER",
|
||||
"POST": "POST",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "BORRAR",
|
||||
"HEAD": "LIMPIO",
|
||||
"New Email": "Nuevo Email",
|
||||
"New Email in Folder": "Nuevo correo en la carpeta",
|
||||
"New Attachment": "Nuevo adjunto",
|
||||
"Triggers when a new email is received in the inbox.": "Se activa cuando se recibe un nuevo correo electrónico en la bandeja de entrada.",
|
||||
"Triggers when a new email is delivered into the specified folder.": "Se activa cuando se envía un nuevo correo electrónico a la carpeta especificada.",
|
||||
"Triggers when a new email containing one or more attachments arrives.": "Se activa cuando llega un nuevo correo que contiene uno o más archivos adjuntos.",
|
||||
"Monitor attachments in a specific folder. Leave empty to monitor all folders.": "Supervisar los archivos adjuntos en una carpeta específica. Dejar en blanco para monitorizar todas las carpetas."
|
||||
}
|
||||
@@ -0,0 +1,84 @@
|
||||
{
|
||||
"\n1. Sign in to [Microsoft Azure Portal](https://portal.azure.com/).\n2. From the left sidebar, go to **Microsoft Enfra ID**.\n3. Under **Manage**, click on **App registrations**.\n4. Click the **New registration** button.\n5. Enter a **Name** for your app.\n6. For **Supported account types**, choose:\n - **Accounts in any organizational directory (Any Microsoft Entra ID tenant - Multitenant) and personal Microsoft accounts**\n - Or select based on your requirement.\n7. In **Redirect URI**, select **Web** and ad": "\n1. Sign in to [Microsoft Azure Portal](https://portal.azure.com/).\n2. From the left sidebar, go to **Microsoft Enfra ID**.\n3. Under **Manage**, click on **App registrations**.\n4. Click the **New registration** button.\n5. Enter a **Name** for your app.\n6. For **Supported account types**, choose:\n - **Accounts in any organizational directory (Any Microsoft Entra ID tenant - Multitenant) and personal Microsoft accounts**\n - Or select based on your requirement.\n7. In **Redirect URI**, select **Web** and add the given URL.\n8. Click **Register**.\n9. After registration, you’ll be redirected to the app’s overview page. Copy the **Application (client) ID**.\n10. From the left menu, go to **Certificates & secrets**.\n - Under **Client secrets**, click **New client secret**.\n - Provide a description, set an expiry, and click **Add**.\n - Copy the **Value** of the client secret (this will not be shown again).\n11. Go to **API permissions** from the left menu.\n - Click **Add a permission**.\n - Select **Microsoft Graph** → **Delegated permissions**.\n - Add the following scopes:\n - Mail.ReadWrite\n - Mail.Send\n\t - Calendars.Read\n\t - offline_access\n\t - User.Read\n - Click **Add permissions**.\n12. Copy your **Client ID** and **Client Secret**.\n",
|
||||
"Send Email": "Envoyer un e-mail",
|
||||
"Download Attachment": "Télécharger la pièce jointe",
|
||||
"Reply to Email": "Répondre à l'e-mail",
|
||||
"Create Draft Email": "Créer un brouillon d'email",
|
||||
"Add Label to Email": "Ajouter une étiquette à l'e-mail",
|
||||
"Remove Label from Email": "Supprimer l'étiquette de l'e-mail",
|
||||
"Move Email to Folder": "Déplacer l'e-mail vers le dossier",
|
||||
"Send Draft Email": "Envoyer un brouillon d'email",
|
||||
"Forward Email": "Transférer l'email",
|
||||
"Find Email": "Trouver un e-mail",
|
||||
"Custom API Call": "Appel API personnalisé",
|
||||
"Sends an email using Microsoft Outlook.": "Envoie un e-mail en utilisant Microsoft Outlook.",
|
||||
"Download attachments from a specific email message.": "Télécharger les pièces jointes à partir d'un courriel spécifique.",
|
||||
"Reply to an outlook email.": "Répondre à un e-mail Outlook.",
|
||||
"Creates a draft email message.": "Crée un brouillon de courriel.",
|
||||
"Adds a category (label) to an email message.": "Ajoute une catégorie (étiquette) à un message électronique.",
|
||||
"Removes a category (label) from an email message.": "Supprime une catégorie (étiquette) d'un message électronique.",
|
||||
"Moves an email message to a specific folder.": "Déplace un courriel vers un dossier spécifique.",
|
||||
"Sends a draft email message.": "Envoie un message électronique brouillon.",
|
||||
"Forwards an email message.": "Transfère un message email.",
|
||||
"Searches for emails using full-text search.": "Recherche des e-mails en utilisant la recherche en texte complet.",
|
||||
"Make a custom API call to a specific endpoint": "Passer un appel API personnalisé à un endpoint spécifique",
|
||||
"To Email(s)": "E-mail(S) À",
|
||||
"CC Email(s)": "Email(s) CC",
|
||||
"BCC Email(s)": "E-mail(s) BCC",
|
||||
"Subject": "Sujet",
|
||||
"Body Format": "Format du corps",
|
||||
"Body": "Corps",
|
||||
"Attachments": "Pièces jointes",
|
||||
"Message ID": "ID du message",
|
||||
"Email": "Courriel",
|
||||
"Reply Body": "Corps de la réponse",
|
||||
"CC Recipients": "Destinataires CC",
|
||||
"BCC Recipients": "Destinataires BCC",
|
||||
"Create Draft": "Créer un brouillon",
|
||||
"Categories": "Catégories",
|
||||
"Categories to Remove": "Catégories à supprimer",
|
||||
"Destination Folder": "Dossier de destination",
|
||||
"Draft Email": "Courriel brouillon",
|
||||
"Comment": "Commenter",
|
||||
"Search Query": "Requête de recherche",
|
||||
"Folder": "Dossier",
|
||||
"Max Results": "Nombre maximum de résultats",
|
||||
"Method": "Méthode",
|
||||
"Headers": "En-têtes",
|
||||
"Query Parameters": "Paramètres de requête",
|
||||
"Response is Binary ?": "La réponse est Binaire ?",
|
||||
"No Error on Failure": "Aucune erreur en cas d'échec",
|
||||
"Timeout (in seconds)": "Délai d'attente (en secondes)",
|
||||
"The ID of the email message containing the attachment.": "L'ID du message contenant la pièce jointe.",
|
||||
"Select the email message to reply to.": "Sélectionnez le courriel auquel vous souhaitez répondre.",
|
||||
"If enabled, creates draft without sending.": "Si activé, crée un brouillon sans l'envoyer.",
|
||||
"Select the email message to add the label to.": "Sélectionnez le message de courriel auquel ajouter l'étiquette.",
|
||||
"Categories to add to the email.": "Catégories à ajouter à l'email.",
|
||||
"Select the email message to remove the label from.": "Sélectionnez le message de courriel dont vous voulez supprimer l'étiquette.",
|
||||
"Categories to remove from the email.": "Catégories à supprimer de l'email.",
|
||||
"Select the email message to move.": "Sélectionnez le message e-mail à déplacer.",
|
||||
"The folder to move the email to.": "Le dossier vers lequel déplacer l'email.",
|
||||
"Select the draft email message to send.": "Sélectionnez le brouillon de courriel à envoyer.",
|
||||
"Select the email message to forward.": "Sélectionnez le courriel à transférer.",
|
||||
"Optional comment to include with the forwarded message.": "Commentaire facultatif à inclure avec le message envoyé.",
|
||||
"Search terms to find emails (e.g., \"from:john@example.com\", \"subject:urgent\", \"hasAttachments:true\")": "Rechercher des termes pour trouver des e-mails (par exemple, \"depuis:john@example.com\", \"subject:urgent\", \"hasAttachments:true\")",
|
||||
"Search in a specific folder. Leave empty to search all folders.": "Rechercher dans un dossier spécifique. Laisser vide pour rechercher tous les dossiers.",
|
||||
"Maximum number of results to return (1-1000).": "Nombre maximum de résultats à retourner (1-1000).",
|
||||
"Authorization headers are injected automatically from your connection.": "Les en-têtes d'autorisation sont injectés automatiquement à partir de votre connexion.",
|
||||
"Enable for files like PDFs, images, etc..": "Activer pour les fichiers comme les PDF, les images, etc.",
|
||||
"HTML": "HTML",
|
||||
"Text": "Texte",
|
||||
"GET": "GET",
|
||||
"POST": "POST",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "DELETE",
|
||||
"HEAD": "HEAD",
|
||||
"New Email": "Nouvel e-mail",
|
||||
"New Email in Folder": "Nouveau courriel dans le dossier",
|
||||
"New Attachment": "Nouvelle pièce jointe",
|
||||
"Triggers when a new email is received in the inbox.": "Se déclenche lorsqu'un nouvel e-mail est reçu dans la boîte de réception.",
|
||||
"Triggers when a new email is delivered into the specified folder.": "Déclenche lorsqu'un nouvel e-mail est envoyé dans le dossier spécifié.",
|
||||
"Triggers when a new email containing one or more attachments arrives.": "Déclenche lorsqu'un nouvel e-mail contenant une ou plusieurs pièces jointes arrive.",
|
||||
"Monitor attachments in a specific folder. Leave empty to monitor all folders.": "Surveiller les pièces jointes dans un dossier spécifique. Laisser vide pour surveiller tous les dossiers."
|
||||
}
|
||||
@@ -0,0 +1,84 @@
|
||||
{
|
||||
"\n1. Sign in to [Microsoft Azure Portal](https://portal.azure.com/).\n2. From the left sidebar, go to **Microsoft Enfra ID**.\n3. Under **Manage**, click on **App registrations**.\n4. Click the **New registration** button.\n5. Enter a **Name** for your app.\n6. For **Supported account types**, choose:\n - **Accounts in any organizational directory (Any Microsoft Entra ID tenant - Multitenant) and personal Microsoft accounts**\n - Or select based on your requirement.\n7. In **Redirect URI**, select **Web** and ad": "\n1. Sign in to [Microsoft Azure Portal](https://portal.azure.com/).\n2. From the left sidebar, go to **Microsoft Enfra ID**.\n3. Under **Manage**, click on **App registrations**.\n4. Click the **New registration** button.\n5. Enter a **Name** for your app.\n6. For **Supported account types**, choose:\n - **Accounts in any organizational directory (Any Microsoft Entra ID tenant - Multitenant) and personal Microsoft accounts**\n - Or select based on your requirement.\n7. In **Redirect URI**, select **Web** and add the given URL.\n8. Click **Register**.\n9. After registration, you’ll be redirected to the app’s overview page. Copy the **Application (client) ID**.\n10. From the left menu, go to **Certificates & secrets**.\n - Under **Client secrets**, click **New client secret**.\n - Provide a description, set an expiry, and click **Add**.\n - Copy the **Value** of the client secret (this will not be shown again).\n11. Go to **API permissions** from the left menu.\n - Click **Add a permission**.\n - Select **Microsoft Graph** → **Delegated permissions**.\n - Add the following scopes:\n - Mail.ReadWrite\n - Mail.Send\n\t - Calendars.Read\n\t - offline_access\n\t - User.Read\n - Click **Add permissions**.\n12. Copy your **Client ID** and **Client Secret**.\n",
|
||||
"Send Email": "メール送信",
|
||||
"Download Attachment": "添付ファイルをダウンロード",
|
||||
"Reply to Email": "メールに返信",
|
||||
"Create Draft Email": "ドラフトメールを作成",
|
||||
"Add Label to Email": "電子メールにラベルを追加",
|
||||
"Remove Label from Email": "メールからラベルを削除",
|
||||
"Move Email to Folder": "メールをフォルダに移動",
|
||||
"Send Draft Email": "ドラフトメールを送信",
|
||||
"Forward Email": "メールを転送",
|
||||
"Find Email": "電子メールを検索",
|
||||
"Custom API Call": "カスタムAPI通話",
|
||||
"Sends an email using Microsoft Outlook.": "Microsoft Outlookを使用して電子メールを送信します。",
|
||||
"Download attachments from a specific email message.": "特定の電子メールメッセージから添付ファイルをダウンロードします。",
|
||||
"Reply to an outlook email.": "Outlookのメールに返信します。",
|
||||
"Creates a draft email message.": "下書きメールメッセージを作成します。",
|
||||
"Adds a category (label) to an email message.": "メールメッセージにカテゴリ(ラベル)を追加します。",
|
||||
"Removes a category (label) from an email message.": "メールメッセージからカテゴリ(ラベル)を削除します。",
|
||||
"Moves an email message to a specific folder.": "メールメッセージを特定のフォルダに移動します。",
|
||||
"Sends a draft email message.": "下書きメールを送信します。",
|
||||
"Forwards an email message.": "電子メールメッセージを転送します。",
|
||||
"Searches for emails using full-text search.": "全文検索を使用してメールを検索します。",
|
||||
"Make a custom API call to a specific endpoint": "特定のエンドポイントへのカスタム API コールを実行します。",
|
||||
"To Email(s)": "電子メールへ",
|
||||
"CC Email(s)": "CC Email(s)",
|
||||
"BCC Email(s)": "BCC メール",
|
||||
"Subject": "件名",
|
||||
"Body Format": "本文フォーマット",
|
||||
"Body": "本文",
|
||||
"Attachments": "添付ファイル",
|
||||
"Message ID": "メッセージID",
|
||||
"Email": "Eメールアドレス",
|
||||
"Reply Body": "本文に返信",
|
||||
"CC Recipients": "CC受信者",
|
||||
"BCC Recipients": "BCC受信者",
|
||||
"Create Draft": "下書きを作成",
|
||||
"Categories": "カテゴリ",
|
||||
"Categories to Remove": "削除するカテゴリ",
|
||||
"Destination Folder": "宛先フォルダ",
|
||||
"Draft Email": "下書きメール",
|
||||
"Comment": "コメント",
|
||||
"Search Query": "検索クエリ",
|
||||
"Folder": "Folder",
|
||||
"Max Results": "最大結果",
|
||||
"Method": "方法",
|
||||
"Headers": "ヘッダー",
|
||||
"Query Parameters": "クエリパラメータ",
|
||||
"Response is Binary ?": "応答はバイナリですか?",
|
||||
"No Error on Failure": "失敗時にエラーはありません",
|
||||
"Timeout (in seconds)": "タイムアウト(秒)",
|
||||
"The ID of the email message containing the attachment.": "添付ファイルを含む電子メールメッセージの ID。",
|
||||
"Select the email message to reply to.": "返信するメールメッセージを選択します。",
|
||||
"If enabled, creates draft without sending.": "有効にした場合、送信せずに下書きを作成します。",
|
||||
"Select the email message to add the label to.": "ラベルを追加する電子メールメッセージを選択します。",
|
||||
"Categories to add to the email.": "メールに追加するカテゴリ。",
|
||||
"Select the email message to remove the label from.": "ラベルを削除するメールメッセージを選択します。",
|
||||
"Categories to remove from the email.": "メールから削除するカテゴリ。",
|
||||
"Select the email message to move.": "移動する電子メールメッセージを選択します。",
|
||||
"The folder to move the email to.": "メールを移動するフォルダ。",
|
||||
"Select the draft email message to send.": "送信する下書きメールメッセージを選択します。",
|
||||
"Select the email message to forward.": "転送するメールメッセージを選択します。",
|
||||
"Optional comment to include with the forwarded message.": "転送メッセージに含める任意のコメント。",
|
||||
"Search terms to find emails (e.g., \"from:john@example.com\", \"subject:urgent\", \"hasAttachments:true\")": "メールを検索する語句(例:\"from:john@example.com\", \"subject:urgent\", \"hasAttachments:true\")",
|
||||
"Search in a specific folder. Leave empty to search all folders.": "特定のフォルダを検索します。すべてのフォルダを検索するには空のままにします。",
|
||||
"Maximum number of results to return (1-1000).": "返す結果の最大数(1-1000)",
|
||||
"Authorization headers are injected automatically from your connection.": "認証ヘッダは接続から自動的に注入されます。",
|
||||
"Enable for files like PDFs, images, etc..": "PDF、画像などのファイルを有効にします。",
|
||||
"HTML": "HTML",
|
||||
"Text": "テキスト",
|
||||
"GET": "取得",
|
||||
"POST": "POST",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "削除",
|
||||
"HEAD": "頭",
|
||||
"New Email": "新しいメール",
|
||||
"New Email in Folder": "フォルダ内の新しいメール",
|
||||
"New Attachment": "新しい添付ファイル",
|
||||
"Triggers when a new email is received in the inbox.": "受信トレイに新しいメールを受信したときにトリガーします。",
|
||||
"Triggers when a new email is delivered into the specified folder.": "指定したフォルダに新しいメールが配信されたときにトリガーされます。",
|
||||
"Triggers when a new email containing one or more attachments arrives.": "添付ファイルを含む新しいメールが到着したときにトリガーされます。",
|
||||
"Monitor attachments in a specific folder. Leave empty to monitor all folders.": "特定のフォルダ内の添付ファイルを監視します。すべてのフォルダを監視するには空白のままにします。"
|
||||
}
|
||||
@@ -0,0 +1,84 @@
|
||||
{
|
||||
"\n1. Sign in to [Microsoft Azure Portal](https://portal.azure.com/).\n2. From the left sidebar, go to **Microsoft Enfra ID**.\n3. Under **Manage**, click on **App registrations**.\n4. Click the **New registration** button.\n5. Enter a **Name** for your app.\n6. For **Supported account types**, choose:\n - **Accounts in any organizational directory (Any Microsoft Entra ID tenant - Multitenant) and personal Microsoft accounts**\n - Or select based on your requirement.\n7. In **Redirect URI**, select **Web** and ad": "\n1. Log in bij [Microsoft Azure Portal](https://portal.azure.com/).\n. Ga naar **Microsoft Enfra ID**.\n3. Onder **Beheren**, klik op **App registraties**.\n4. Klik op de **Nieuwe registratie** knop.\n5. Voer een **Naam** in voor uw app.\n6. Voor **Ondersteunde accounttypen**, kies keuze:\n - **Accounts in elke map van de organisatie (Any Microsoft Entra ID-tenant - Multitenant) en persoonlijke Microsoft accounts**\n - Of selecteer gebaseerd op uw vereiste.\n7. In **Redirect URI**, selecteer **Web** en voeg de opgegeven URL toe.\n8. Klik **Register**.\n9. Na registratie wordt u doorgestuurd naar de overzichtspagina. Kopieer de **Applicatie (client) ID**.\n10. Ga in het linkermenu, naar **Certificaten & geheimen**.\n - onder **Client secrets**, klik op **Nieuw client geheim**.\n - Geef een beschrijving, verloop, en klik **Toevoegen**.\n - Kopieer de **Waarde** van de client secret (dit zal niet meer worden getoond).\n11. Ga naar **API-rechten** vanuit het linkermenu.\n - Klik **Een machtiging toevoegen**.\n - Selecteer **Microsoft Graph** → **gedelegeerde rechten**.\n - Voeg de volgende toepassingsgebieden toe:\n - Mail. eadWrite\n - Mail.Send \n - Kalenders. ead\n\t - offline_access\n\t - User.Read\n - Klik **Machtigingen toevoegen**.\n12. Kopieer uw **Client ID** en **Client Secret**.\n",
|
||||
"Send Email": "E-mail verzenden",
|
||||
"Download Attachment": "Bijlage downloaden",
|
||||
"Reply to Email": "Beantwoord e-mail",
|
||||
"Create Draft Email": "Ontwerp E-mail aanmaken",
|
||||
"Add Label to Email": "Label toevoegen aan e-mail",
|
||||
"Remove Label from Email": "Label uit e-mail verwijderen",
|
||||
"Move Email to Folder": "Verplaats E-mail naar map",
|
||||
"Send Draft Email": "Concept E-mail verzenden",
|
||||
"Forward Email": "E-mail doorsturen",
|
||||
"Find Email": "Zoek e-mail",
|
||||
"Custom API Call": "Custom API Call",
|
||||
"Sends an email using Microsoft Outlook.": "Stuurt een e-mail met Microsoft Outlook.",
|
||||
"Download attachments from a specific email message.": "Bijlagen van een specifiek e-mailbericht downloaden.",
|
||||
"Reply to an outlook email.": "Reageer op een e-mail met perspectief.",
|
||||
"Creates a draft email message.": "Maakt een concept voor een e-mailbericht.",
|
||||
"Adds a category (label) to an email message.": "Voegt een categorie (label) toe aan een e-mail bericht.",
|
||||
"Removes a category (label) from an email message.": "Verwijdert een categorie (label) uit een e-mail bericht.",
|
||||
"Moves an email message to a specific folder.": "Verplaatst een e-mailbericht naar een specifieke map.",
|
||||
"Sends a draft email message.": "Stuurt een conceptbericht",
|
||||
"Forwards an email message.": "Een e-mailbericht doorsturen.",
|
||||
"Searches for emails using full-text search.": "Zoekt naar e-mails met full-text zoeken.",
|
||||
"Make a custom API call to a specific endpoint": "Maak een aangepaste API call naar een specifiek eindpunt",
|
||||
"To Email(s)": "Naar E-mail(s)",
|
||||
"CC Email(s)": "CC Email(s)",
|
||||
"BCC Email(s)": "BCC e-mail(s)",
|
||||
"Subject": "Onderwerp",
|
||||
"Body Format": "Lichaam formaat",
|
||||
"Body": "Lichaam",
|
||||
"Attachments": "Bijlagen",
|
||||
"Message ID": "Bericht ID",
|
||||
"Email": "E-mail",
|
||||
"Reply Body": "Antwoord inhoud",
|
||||
"CC Recipients": "CC Ontvangers",
|
||||
"BCC Recipients": "BCC Ontvangers",
|
||||
"Create Draft": "Concept maken",
|
||||
"Categories": "Categoriechar@@0n",
|
||||
"Categories to Remove": "Te verwijderen categorieën",
|
||||
"Destination Folder": "Doelmap map",
|
||||
"Draft Email": "Ontwerp E-mail",
|
||||
"Comment": "Opmerking",
|
||||
"Search Query": "Zoek query",
|
||||
"Folder": "Map",
|
||||
"Max Results": "Max. aantal resultaten",
|
||||
"Method": "Methode",
|
||||
"Headers": "Kopteksten",
|
||||
"Query Parameters": "Query parameters",
|
||||
"Response is Binary ?": "Antwoord is binair?",
|
||||
"No Error on Failure": "Geen fout bij fout",
|
||||
"Timeout (in seconds)": "Time-out (in seconden)",
|
||||
"The ID of the email message containing the attachment.": "Het ID van het e-mailbericht met de bijlage.",
|
||||
"Select the email message to reply to.": "Selecteer het e-mailbericht waarop u wilt reageren.",
|
||||
"If enabled, creates draft without sending.": "Indien ingeschakeld, wordt concept aangemaakt zonder verzending.",
|
||||
"Select the email message to add the label to.": "Selecteer het e-mailbericht waar het label aan toe te voegen.",
|
||||
"Categories to add to the email.": "Categorieën toe te voegen aan de e-mail.",
|
||||
"Select the email message to remove the label from.": "Selecteer het e-mailbericht waar het label van verwijderd moet worden.",
|
||||
"Categories to remove from the email.": "Categorieën om te verwijderen van de e-mail.",
|
||||
"Select the email message to move.": "Selecteer het te verplaatsen e-mailbericht.",
|
||||
"The folder to move the email to.": "De map waarnaar de e-mail moet worden verplaatst.",
|
||||
"Select the draft email message to send.": "Selecteer het ontwerp van het e-mailbericht dat u wilt verzenden.",
|
||||
"Select the email message to forward.": "Selecteer het e-mailbericht om door te gaan.",
|
||||
"Optional comment to include with the forwarded message.": "Optioneel commentaar om mee te nemen met het doorgestuurde bericht.",
|
||||
"Search terms to find emails (e.g., \"from:john@example.com\", \"subject:urgent\", \"hasAttachments:true\")": "Zoek termen om e-mails te vinden (bijv. \"van:john@example.com\", \"subject:urgent\", \"hasAttachments:true\")",
|
||||
"Search in a specific folder. Leave empty to search all folders.": "Zoek in een specifieke map. Laat leeg om in alle mappen te zoeken.",
|
||||
"Maximum number of results to return (1-1000).": "Maximum aantal resultaten om terug te keren (1-1000).",
|
||||
"Authorization headers are injected automatically from your connection.": "Autorisatie headers worden automatisch geïnjecteerd vanuit uw verbinding.",
|
||||
"Enable for files like PDFs, images, etc..": "Inschakelen voor bestanden zoals PDF's, afbeeldingen etc..",
|
||||
"HTML": "HTML",
|
||||
"Text": "Tekstveld",
|
||||
"GET": "KRIJG",
|
||||
"POST": "POSTE",
|
||||
"PATCH": "BEKIJK",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "VERWIJDEREN",
|
||||
"HEAD": "HOOFD",
|
||||
"New Email": "Nieuw e-mailadres",
|
||||
"New Email in Folder": "Nieuw e-mailadres in map",
|
||||
"New Attachment": "Nieuwe bijlage",
|
||||
"Triggers when a new email is received in the inbox.": "Triggert wanneer een nieuwe e-mail wordt ontvangen in de inbox.",
|
||||
"Triggers when a new email is delivered into the specified folder.": "Triggert wanneer een nieuwe e-mail wordt verstuurd naar de opgegeven map.",
|
||||
"Triggers when a new email containing one or more attachments arrives.": "Triggert wanneer er een nieuwe e-mail met één of meer bijlagen arriveert.",
|
||||
"Monitor attachments in a specific folder. Leave empty to monitor all folders.": "Bijlagen in een specifieke map bijhouden. Laat leeg om alle mappen te controleren."
|
||||
}
|
||||
@@ -0,0 +1,84 @@
|
||||
{
|
||||
"\n1. Sign in to [Microsoft Azure Portal](https://portal.azure.com/).\n2. From the left sidebar, go to **Microsoft Enfra ID**.\n3. Under **Manage**, click on **App registrations**.\n4. Click the **New registration** button.\n5. Enter a **Name** for your app.\n6. For **Supported account types**, choose:\n - **Accounts in any organizational directory (Any Microsoft Entra ID tenant - Multitenant) and personal Microsoft accounts**\n - Or select based on your requirement.\n7. In **Redirect URI**, select **Web** and ad": "\n1. Sign in to [Microsoft Azure Portal](https://portal.azure.com/).\n2. From the left sidebar, go to **Microsoft Enfra ID**.\n3. Under **Manage**, click on **App registrations**.\n4. Click the **New registration** button.\n5. Enter a **Name** for your app.\n6. For **Supported account types**, choose:\n - **Accounts in any organizational directory (Any Microsoft Entra ID tenant - Multitenant) and personal Microsoft accounts**\n - Or select based on your requirement.\n7. In **Redirect URI**, select **Web** and add the given URL.\n8. Click **Register**.\n9. After registration, you’ll be redirected to the app’s overview page. Copy the **Application (client) ID**.\n10. From the left menu, go to **Certificates & secrets**.\n - Under **Client secrets**, click **New client secret**.\n - Provide a description, set an expiry, and click **Add**.\n - Copy the **Value** of the client secret (this will not be shown again).\n11. Go to **API permissions** from the left menu.\n - Click **Add a permission**.\n - Select **Microsoft Graph** → **Delegated permissions**.\n - Add the following scopes:\n - Mail.ReadWrite\n - Mail.Send\n\t - Calendars.Read\n\t - offline_access\n\t - User.Read\n - Click **Add permissions**.\n12. Copy your **Client ID** and **Client Secret**.\n",
|
||||
"Send Email": "Enviar e-mail",
|
||||
"Download Attachment": "Baixar anexo",
|
||||
"Reply to Email": "Responder para o E-mail",
|
||||
"Create Draft Email": "Criar e-mail de rascunho",
|
||||
"Add Label to Email": "Adicionar etiqueta ao e-mail",
|
||||
"Remove Label from Email": "Remover etiqueta do e-mail",
|
||||
"Move Email to Folder": "Mover e-mail para pasta",
|
||||
"Send Draft Email": "Enviar e-mail de rascunho",
|
||||
"Forward Email": "Encaminhar Email",
|
||||
"Find Email": "Encontrar E-mail",
|
||||
"Custom API Call": "Chamada de API personalizada",
|
||||
"Sends an email using Microsoft Outlook.": "Envia um email usando o Microsoft Outlook.",
|
||||
"Download attachments from a specific email message.": "Download de anexos de uma mensagem de e-mail específica.",
|
||||
"Reply to an outlook email.": "Responde a um e-mail de antecipação.",
|
||||
"Creates a draft email message.": "Cria uma mensagem de e-mail de rascunho.",
|
||||
"Adds a category (label) to an email message.": "Adiciona uma categoria (etiqueta) a uma mensagem de e-mail.",
|
||||
"Removes a category (label) from an email message.": "Remove uma categoria (etiqueta) de uma mensagem de e-mail.",
|
||||
"Moves an email message to a specific folder.": "Move uma mensagem de e-mail para uma pasta específica.",
|
||||
"Sends a draft email message.": "Envia uma mensagem de e-mail de rascunho.",
|
||||
"Forwards an email message.": "Envia uma mensagem de e-mail.",
|
||||
"Searches for emails using full-text search.": "Pesquisa por e-mails usando pesquisa de texto completo.",
|
||||
"Make a custom API call to a specific endpoint": "Faça uma chamada de API personalizada para um ponto de extremidade específico",
|
||||
"To Email(s)": "Para e-mail(s)",
|
||||
"CC Email(s)": "CC Email(s)",
|
||||
"BCC Email(s)": "E-mail(s) BCC",
|
||||
"Subject": "Cargo",
|
||||
"Body Format": "Formato do Corpo",
|
||||
"Body": "Conteúdo",
|
||||
"Attachments": "Anexos",
|
||||
"Message ID": "ID da mensagem",
|
||||
"Email": "e-mail",
|
||||
"Reply Body": "Corpo da Resposta",
|
||||
"CC Recipients": "Destinatários CC",
|
||||
"BCC Recipients": "Destinatários do BCC",
|
||||
"Create Draft": "Criar rascunho",
|
||||
"Categories": "categorias",
|
||||
"Categories to Remove": "Categorias para Remover",
|
||||
"Destination Folder": "Pasta de destino",
|
||||
"Draft Email": "E-mail do rascunho",
|
||||
"Comment": "Comentar",
|
||||
"Search Query": "Consulta de Pesquisa",
|
||||
"Folder": "Pasta",
|
||||
"Max Results": "Resultados no Máx.",
|
||||
"Method": "Método",
|
||||
"Headers": "Cabeçalhos",
|
||||
"Query Parameters": "Parâmetros da consulta",
|
||||
"Response is Binary ?": "A resposta é binária ?",
|
||||
"No Error on Failure": "Nenhum erro no Failure",
|
||||
"Timeout (in seconds)": "Tempo limite (em segundos)",
|
||||
"The ID of the email message containing the attachment.": "A identificação da mensagem de e-mail que contém o anexo.",
|
||||
"Select the email message to reply to.": "Selecione a mensagem de e-mail para responder.",
|
||||
"If enabled, creates draft without sending.": "Se ativado, cria rascunho sem enviar.",
|
||||
"Select the email message to add the label to.": "Selecione a mensagem de e-mail para adicionar a etiqueta.",
|
||||
"Categories to add to the email.": "Categorias para adicionar ao e-mail.",
|
||||
"Select the email message to remove the label from.": "Selecione a mensagem de e-mail para remover a etiqueta.",
|
||||
"Categories to remove from the email.": "Categorias para remover do e-mail.",
|
||||
"Select the email message to move.": "Selecione a mensagem de e-mail para mover",
|
||||
"The folder to move the email to.": "A pasta para mover o e-mail para.",
|
||||
"Select the draft email message to send.": "Selecione rascunho da mensagem de e-mail para enviar.",
|
||||
"Select the email message to forward.": "Selecione a mensagem de e-mail para avançar.",
|
||||
"Optional comment to include with the forwarded message.": "Comentário opcional para incluir com a mensagem encaminhada.",
|
||||
"Search terms to find emails (e.g., \"from:john@example.com\", \"subject:urgent\", \"hasAttachments:true\")": "Termos de pesquisa para encontrar e-mails (por exemplo, \"from:john@example.com\", \"subject:urgent\", \"hasAttachments:true\")",
|
||||
"Search in a specific folder. Leave empty to search all folders.": "Pesquisar em uma pasta específica. Deixe em branco para pesquisar todas as pastas.",
|
||||
"Maximum number of results to return (1-1000).": "Número máximo de resultados a retornar (1-1000).",
|
||||
"Authorization headers are injected automatically from your connection.": "Os cabeçalhos de autorização são inseridos automaticamente a partir da sua conexão.",
|
||||
"Enable for files like PDFs, images, etc..": "Habilitar para arquivos como PDFs, imagens, etc..",
|
||||
"HTML": "HTML",
|
||||
"Text": "texto",
|
||||
"GET": "OBTER",
|
||||
"POST": "POSTAR",
|
||||
"PATCH": "COMPRAR",
|
||||
"PUT": "COLOCAR",
|
||||
"DELETE": "EXCLUIR",
|
||||
"HEAD": "CABEÇA",
|
||||
"New Email": "Novo E-mail",
|
||||
"New Email in Folder": "Novo e-mail na pasta",
|
||||
"New Attachment": "Novo Anexo",
|
||||
"Triggers when a new email is received in the inbox.": "Aciona quando um novo e-mail é recebido na caixa de entrada.",
|
||||
"Triggers when a new email is delivered into the specified folder.": "Aciona quando um novo e-mail é entregue na pasta especificada.",
|
||||
"Triggers when a new email containing one or more attachments arrives.": "Dispara quando um novo email contendo um ou mais anexos chegar.",
|
||||
"Monitor attachments in a specific folder. Leave empty to monitor all folders.": "Monitora anexos em uma pasta específica. Deixe em branco para monitorar todas as pastas."
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
{
|
||||
"Microsoft Outlook": "Microsoft Outlook",
|
||||
"Send Email": "Отправить письмо",
|
||||
"Download Attachment": "Загрузить вложение",
|
||||
"Reply to Email": "Ответить на E-mail",
|
||||
"Custom API Call": "Пользовательский вызов API",
|
||||
"Sends an email using Microsoft Outlook.": "Отправляет письмо с помощью Microsoft Outlook.",
|
||||
"Download attachments from a specific email message.": "Загрузить вложения из определенного сообщения электронной почты.",
|
||||
"Reply to an outlook email.": "Ответить на письмо с прогнозами.",
|
||||
"Make a custom API call to a specific endpoint": "Сделать пользовательский API вызов к определенной конечной точке",
|
||||
"To Email(s)": "К E-mail(ам)",
|
||||
"CC Email(s)": "CC Email(s)",
|
||||
"BCC Email(s)": "BCC E-mail(ы)",
|
||||
"Subject": "Тема",
|
||||
"Body Format": "Формат тела",
|
||||
"Body": "Тело",
|
||||
"Attachments": "Вложения",
|
||||
"Message ID": "ID сообщения",
|
||||
"Reply Body": "Текст ответа",
|
||||
"CC Recipients": "Получатели СС",
|
||||
"BCC Recipients": "Получатели BCC",
|
||||
"Create Draft": "Создать черновик",
|
||||
"Method": "Метод",
|
||||
"Headers": "Заголовки",
|
||||
"Query Parameters": "Параметры запроса",
|
||||
"No Error on Failure": "Нет ошибок при ошибке",
|
||||
"Timeout (in seconds)": "Таймаут (в секундах)",
|
||||
"The ID of the email message containing the attachment.": "ID сообщения электронной почты, содержащего вложение.",
|
||||
"If enabled, creates draft without sending.": "Если включено, создаёт черновик без отправки.",
|
||||
"Authorization headers are injected automatically from your connection.": "Заголовки авторизации включаются автоматически из вашего соединения.",
|
||||
"HTML": "HTML",
|
||||
"Text": "Текст",
|
||||
"GET": "ПОЛУЧИТЬ",
|
||||
"POST": "ПОСТ",
|
||||
"PATCH": "ПАТЧ",
|
||||
"PUT": "ПОКУПИТЬ",
|
||||
"DELETE": "УДАЛИТЬ",
|
||||
"HEAD": "HEAD",
|
||||
"New Email": "Новое письмо",
|
||||
"Triggers when a new email is received in the inbox.": "Срабатывает при получении нового письма во входящих."
|
||||
}
|
||||
@@ -0,0 +1,84 @@
|
||||
{
|
||||
"\n1. Sign in to [Microsoft Azure Portal](https://portal.azure.com/).\n2. From the left sidebar, go to **Microsoft Enfra ID**.\n3. Under **Manage**, click on **App registrations**.\n4. Click the **New registration** button.\n5. Enter a **Name** for your app.\n6. For **Supported account types**, choose:\n - **Accounts in any organizational directory (Any Microsoft Entra ID tenant - Multitenant) and personal Microsoft accounts**\n - Or select based on your requirement.\n7. In **Redirect URI**, select **Web** and ad": "\n1. Sign in to [Microsoft Azure Portal](https://portal.azure.com/).\n2. From the left sidebar, go to **Microsoft Enfra ID**.\n3. Under **Manage**, click on **App registrations**.\n4. Click the **New registration** button.\n5. Enter a **Name** for your app.\n6. For **Supported account types**, choose:\n - **Accounts in any organizational directory (Any Microsoft Entra ID tenant - Multitenant) and personal Microsoft accounts**\n - Or select based on your requirement.\n7. In **Redirect URI**, select **Web** and add the given URL.\n8. Click **Register**.\n9. After registration, you’ll be redirected to the app’s overview page. Copy the **Application (client) ID**.\n10. From the left menu, go to **Certificates & secrets**.\n - Under **Client secrets**, click **New client secret**.\n - Provide a description, set an expiry, and click **Add**.\n - Copy the **Value** of the client secret (this will not be shown again).\n11. Go to **API permissions** from the left menu.\n - Click **Add a permission**.\n - Select **Microsoft Graph** → **Delegated permissions**.\n - Add the following scopes:\n - Mail.ReadWrite\n - Mail.Send\n\t - Calendars.Read\n\t - offline_access\n\t - User.Read\n - Click **Add permissions**.\n12. Copy your **Client ID** and **Client Secret**.\n",
|
||||
"Send Email": "Send Email",
|
||||
"Download Attachment": "Download Attachment",
|
||||
"Reply to Email": "Reply to Email",
|
||||
"Create Draft Email": "Create Draft Email",
|
||||
"Add Label to Email": "Add Label to Email",
|
||||
"Remove Label from Email": "Remove Label from Email",
|
||||
"Move Email to Folder": "Move Email to Folder",
|
||||
"Send Draft Email": "Send Draft Email",
|
||||
"Forward Email": "Forward Email",
|
||||
"Find Email": "Find Email",
|
||||
"Custom API Call": "Custom API Call",
|
||||
"Sends an email using Microsoft Outlook.": "Sends an email using Microsoft Outlook.",
|
||||
"Download attachments from a specific email message.": "Download attachments from a specific email message.",
|
||||
"Reply to an outlook email.": "Reply to an outlook email.",
|
||||
"Creates a draft email message.": "Creates a draft email message.",
|
||||
"Adds a category (label) to an email message.": "Adds a category (label) to an email message.",
|
||||
"Removes a category (label) from an email message.": "Removes a category (label) from an email message.",
|
||||
"Moves an email message to a specific folder.": "Moves an email message to a specific folder.",
|
||||
"Sends a draft email message.": "Sends a draft email message.",
|
||||
"Forwards an email message.": "Forwards an email message.",
|
||||
"Searches for emails using full-text search.": "Searches for emails using full-text search.",
|
||||
"Make a custom API call to a specific endpoint": "Make a custom API call to a specific endpoint",
|
||||
"To Email(s)": "To Email(s)",
|
||||
"CC Email(s)": "CC Email(s)",
|
||||
"BCC Email(s)": "BCC Email(s)",
|
||||
"Subject": "Subject",
|
||||
"Body Format": "Body Format",
|
||||
"Body": "Body",
|
||||
"Attachments": "Attachments",
|
||||
"Message ID": "Message ID",
|
||||
"Email": "Email",
|
||||
"Reply Body": "Reply Body",
|
||||
"CC Recipients": "CC Recipients",
|
||||
"BCC Recipients": "BCC Recipients",
|
||||
"Create Draft": "Create Draft",
|
||||
"Categories": "Categories",
|
||||
"Categories to Remove": "Categories to Remove",
|
||||
"Destination Folder": "Destination Folder",
|
||||
"Draft Email": "Draft Email",
|
||||
"Comment": "Comment",
|
||||
"Search Query": "Search Query",
|
||||
"Folder": "Folder",
|
||||
"Max Results": "Max Results",
|
||||
"Method": "Method",
|
||||
"Headers": "Headers",
|
||||
"Query Parameters": "Query Parameters",
|
||||
"Response is Binary ?": "Response is Binary ?",
|
||||
"No Error on Failure": "No Error on Failure",
|
||||
"Timeout (in seconds)": "Timeout (in seconds)",
|
||||
"The ID of the email message containing the attachment.": "The ID of the email message containing the attachment.",
|
||||
"Select the email message to reply to.": "Select the email message to reply to.",
|
||||
"If enabled, creates draft without sending.": "If enabled, creates draft without sending.",
|
||||
"Select the email message to add the label to.": "Select the email message to add the label to.",
|
||||
"Categories to add to the email.": "Categories to add to the email.",
|
||||
"Select the email message to remove the label from.": "Select the email message to remove the label from.",
|
||||
"Categories to remove from the email.": "Categories to remove from the email.",
|
||||
"Select the email message to move.": "Select the email message to move.",
|
||||
"The folder to move the email to.": "The folder to move the email to.",
|
||||
"Select the draft email message to send.": "Select the draft email message to send.",
|
||||
"Select the email message to forward.": "Select the email message to forward.",
|
||||
"Optional comment to include with the forwarded message.": "Optional comment to include with the forwarded message.",
|
||||
"Search terms to find emails (e.g., \"from:john@example.com\", \"subject:urgent\", \"hasAttachments:true\")": "Search terms to find emails (e.g., \"from:john@example.com\", \"subject:urgent\", \"hasAttachments:true\")",
|
||||
"Search in a specific folder. Leave empty to search all folders.": "Search in a specific folder. Leave empty to search all folders.",
|
||||
"Maximum number of results to return (1-1000).": "Maximum number of results to return (1-1000).",
|
||||
"Authorization headers are injected automatically from your connection.": "Authorization headers are injected automatically from your connection.",
|
||||
"Enable for files like PDFs, images, etc..": "Enable for files like PDFs, images, etc..",
|
||||
"HTML": "HTML",
|
||||
"Text": "Text",
|
||||
"GET": "GET",
|
||||
"POST": "POST",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "DELETE",
|
||||
"HEAD": "HEAD",
|
||||
"New Email": "New Email",
|
||||
"New Email in Folder": "New Email in Folder",
|
||||
"New Attachment": "New Attachment",
|
||||
"Triggers when a new email is received in the inbox.": "Triggers when a new email is received in the inbox.",
|
||||
"Triggers when a new email is delivered into the specified folder.": "Triggers when a new email is delivered into the specified folder.",
|
||||
"Triggers when a new email containing one or more attachments arrives.": "Triggers when a new email containing one or more attachments arrives.",
|
||||
"Monitor attachments in a specific folder. Leave empty to monitor all folders.": "Monitor attachments in a specific folder. Leave empty to monitor all folders."
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
{
|
||||
"Microsoft Outlook": "Microsoft Outlook",
|
||||
"Send Email": "Send Email",
|
||||
"Download Attachment": "Download Attachment",
|
||||
"Reply to Email": "Reply to Email",
|
||||
"Custom API Call": "Custom API Call",
|
||||
"Sends an email using Microsoft Outlook.": "Sends an email using Microsoft Outlook.",
|
||||
"Download attachments from a specific email message.": "Download attachments from a specific email message.",
|
||||
"Reply to an outlook email.": "Reply to an outlook email.",
|
||||
"Make a custom API call to a specific endpoint": "Make a custom API call to a specific endpoint",
|
||||
"To Email(s)": "To Email(s)",
|
||||
"CC Email(s)": "CC Email(s)",
|
||||
"BCC Email(s)": "BCC Email(s)",
|
||||
"Subject": "Subject",
|
||||
"Body Format": "Body Format",
|
||||
"Body": "Body",
|
||||
"Attachments": "Attachments",
|
||||
"Message ID": "Message ID",
|
||||
"Reply Body": "Reply Body",
|
||||
"CC Recipients": "CC Recipients",
|
||||
"BCC Recipients": "BCC Recipients",
|
||||
"Create Draft": "Create Draft",
|
||||
"Method": "Method",
|
||||
"Headers": "Headers",
|
||||
"Query Parameters": "Query Parameters",
|
||||
"No Error on Failure": "No Error on Failure",
|
||||
"Timeout (in seconds)": "Timeout (in seconds)",
|
||||
"The ID of the email message containing the attachment.": "The ID of the email message containing the attachment.",
|
||||
"If enabled, creates draft without sending.": "If enabled, creates draft without sending.",
|
||||
"Authorization headers are injected automatically from your connection.": "Authorization headers are injected automatically from your connection.",
|
||||
"HTML": "HTML",
|
||||
"Text": "Text",
|
||||
"GET": "GET",
|
||||
"POST": "POST",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "DELETE",
|
||||
"HEAD": "HEAD",
|
||||
"New Email": "New Email",
|
||||
"Triggers when a new email is received in the inbox.": "Triggers when a new email is received in the inbox."
|
||||
}
|
||||
@@ -0,0 +1,84 @@
|
||||
{
|
||||
"\n1. Sign in to [Microsoft Azure Portal](https://portal.azure.com/).\n2. From the left sidebar, go to **Microsoft Enfra ID**.\n3. Under **Manage**, click on **App registrations**.\n4. Click the **New registration** button.\n5. Enter a **Name** for your app.\n6. For **Supported account types**, choose:\n - **Accounts in any organizational directory (Any Microsoft Entra ID tenant - Multitenant) and personal Microsoft accounts**\n - Or select based on your requirement.\n7. In **Redirect URI**, select **Web** and ad": "\n1. Sign in to [Microsoft Azure Portal](https://portal.azure.com/).\n2. From the left sidebar, go to **Microsoft Enfra ID**.\n3. Under **Manage**, click on **App registrations**.\n4. Click the **New registration** button.\n5. Enter a **Name** for your app.\n6. For **Supported account types**, choose:\n - **Accounts in any organizational directory (Any Microsoft Entra ID tenant - Multitenant) and personal Microsoft accounts**\n - Or select based on your requirement.\n7. In **Redirect URI**, select **Web** and add the given URL.\n8. Click **Register**.\n9. After registration, you’ll be redirected to the app’s overview page. Copy the **Application (client) ID**.\n10. From the left menu, go to **Certificates & secrets**.\n - Under **Client secrets**, click **New client secret**.\n - Provide a description, set an expiry, and click **Add**.\n - Copy the **Value** of the client secret (this will not be shown again).\n11. Go to **API permissions** from the left menu.\n - Click **Add a permission**.\n - Select **Microsoft Graph** → **Delegated permissions**.\n - Add the following scopes:\n - Mail.ReadWrite\n - Mail.Send\n\t - Calendars.Read\n\t - offline_access\n\t - User.Read\n - Click **Add permissions**.\n12. Copy your **Client ID** and **Client Secret**.\n",
|
||||
"Send Email": "Send Email",
|
||||
"Download Attachment": "Download Attachment",
|
||||
"Reply to Email": "Reply to Email",
|
||||
"Create Draft Email": "Create Draft Email",
|
||||
"Add Label to Email": "Add Label to Email",
|
||||
"Remove Label from Email": "Remove Label from Email",
|
||||
"Move Email to Folder": "Move Email to Folder",
|
||||
"Send Draft Email": "Send Draft Email",
|
||||
"Forward Email": "Forward Email",
|
||||
"Find Email": "Find Email",
|
||||
"Custom API Call": "自定义 API 呼叫",
|
||||
"Sends an email using Microsoft Outlook.": "Sends an email using Microsoft Outlook.",
|
||||
"Download attachments from a specific email message.": "Download attachments from a specific email message.",
|
||||
"Reply to an outlook email.": "Reply to an outlook email.",
|
||||
"Creates a draft email message.": "Creates a draft email message.",
|
||||
"Adds a category (label) to an email message.": "Adds a category (label) to an email message.",
|
||||
"Removes a category (label) from an email message.": "Removes a category (label) from an email message.",
|
||||
"Moves an email message to a specific folder.": "Moves an email message to a specific folder.",
|
||||
"Sends a draft email message.": "Sends a draft email message.",
|
||||
"Forwards an email message.": "Forwards an email message.",
|
||||
"Searches for emails using full-text search.": "Searches for emails using full-text search.",
|
||||
"Make a custom API call to a specific endpoint": "将一个自定义 API 调用到一个特定的终点",
|
||||
"To Email(s)": "To Email(s)",
|
||||
"CC Email(s)": "CC Email(s)",
|
||||
"BCC Email(s)": "BCC Email(s)",
|
||||
"Subject": "Subject",
|
||||
"Body Format": "Body Format",
|
||||
"Body": "正文内容",
|
||||
"Attachments": "Attachments",
|
||||
"Message ID": "Message ID",
|
||||
"Email": "电子邮件地址",
|
||||
"Reply Body": "Reply Body",
|
||||
"CC Recipients": "CC Recipients",
|
||||
"BCC Recipients": "BCC Recipients",
|
||||
"Create Draft": "Create Draft",
|
||||
"Categories": "Categories",
|
||||
"Categories to Remove": "Categories to Remove",
|
||||
"Destination Folder": "Destination Folder",
|
||||
"Draft Email": "Draft Email",
|
||||
"Comment": "Comment",
|
||||
"Search Query": "Search Query",
|
||||
"Folder": "Folder",
|
||||
"Max Results": "Max Results",
|
||||
"Method": "方法",
|
||||
"Headers": "信头",
|
||||
"Query Parameters": "查询参数",
|
||||
"Response is Binary ?": "Response is Binary ?",
|
||||
"No Error on Failure": "失败时没有错误",
|
||||
"Timeout (in seconds)": "超时(秒)",
|
||||
"The ID of the email message containing the attachment.": "The ID of the email message containing the attachment.",
|
||||
"Select the email message to reply to.": "Select the email message to reply to.",
|
||||
"If enabled, creates draft without sending.": "If enabled, creates draft without sending.",
|
||||
"Select the email message to add the label to.": "Select the email message to add the label to.",
|
||||
"Categories to add to the email.": "Categories to add to the email.",
|
||||
"Select the email message to remove the label from.": "Select the email message to remove the label from.",
|
||||
"Categories to remove from the email.": "Categories to remove from the email.",
|
||||
"Select the email message to move.": "Select the email message to move.",
|
||||
"The folder to move the email to.": "The folder to move the email to.",
|
||||
"Select the draft email message to send.": "Select the draft email message to send.",
|
||||
"Select the email message to forward.": "Select the email message to forward.",
|
||||
"Optional comment to include with the forwarded message.": "Optional comment to include with the forwarded message.",
|
||||
"Search terms to find emails (e.g., \"from:john@example.com\", \"subject:urgent\", \"hasAttachments:true\")": "Search terms to find emails (e.g., \"from:john@example.com\", \"subject:urgent\", \"hasAttachments:true\")",
|
||||
"Search in a specific folder. Leave empty to search all folders.": "Search in a specific folder. Leave empty to search all folders.",
|
||||
"Maximum number of results to return (1-1000).": "Maximum number of results to return (1-1000).",
|
||||
"Authorization headers are injected automatically from your connection.": "授权头自动从您的连接中注入。",
|
||||
"Enable for files like PDFs, images, etc..": "Enable for files like PDFs, images, etc..",
|
||||
"HTML": "HTML",
|
||||
"Text": "文本",
|
||||
"GET": "获取",
|
||||
"POST": "帖子",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "弹出",
|
||||
"DELETE": "删除",
|
||||
"HEAD": "黑色",
|
||||
"New Email": "New Email",
|
||||
"New Email in Folder": "New Email in Folder",
|
||||
"New Attachment": "New Attachment",
|
||||
"Triggers when a new email is received in the inbox.": "Triggers when a new email is received in the inbox.",
|
||||
"Triggers when a new email is delivered into the specified folder.": "Triggers when a new email is delivered into the specified folder.",
|
||||
"Triggers when a new email containing one or more attachments arrives.": "Triggers when a new email containing one or more attachments arrives.",
|
||||
"Monitor attachments in a specific folder. Leave empty to monitor all folders.": "Monitor attachments in a specific folder. Leave empty to monitor all folders."
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
import { createCustomApiCallAction } from '@activepieces/pieces-common';
|
||||
import { createPiece, OAuth2PropertyValue } from '@activepieces/pieces-framework';
|
||||
import { PieceCategory } from '@activepieces/shared';
|
||||
import { addLabelToEmailAction } from './lib/actions/add-label-to-email';
|
||||
import { createDraftEmailAction } from './lib/actions/create-draft-email';
|
||||
import { downloadAttachmentAction } from './lib/actions/download-email-attachment';
|
||||
import { findEmailAction } from './lib/actions/find-email';
|
||||
import { forwardEmailAction } from './lib/actions/forward-email';
|
||||
import { moveEmailToFolderAction } from './lib/actions/move-email-to-folder';
|
||||
import { removeLabelFromEmailAction } from './lib/actions/remove-label-from-email';
|
||||
import { replyEmailAction } from './lib/actions/reply-email';
|
||||
import { sendDraftEmailAction } from './lib/actions/send-draft-email';
|
||||
import { sendEmailAction } from './lib/actions/send-email';
|
||||
import { microsoftOutlookAuth } from './lib/common/auth';
|
||||
import { newAttachmentTrigger } from './lib/triggers/new-attachment';
|
||||
import { newEmailInFolderTrigger } from './lib/triggers/new-email-in-folder';
|
||||
import { newEmailTrigger } from './lib/triggers/new-email';
|
||||
|
||||
export const microsoftOutlook = createPiece({
|
||||
displayName: 'Microsoft Outlook',
|
||||
auth: microsoftOutlookAuth,
|
||||
minimumSupportedRelease: '0.36.1',
|
||||
logoUrl: 'https://cdn.activepieces.com/pieces/microsoft-outlook.jpg',
|
||||
categories: [PieceCategory.PRODUCTIVITY],
|
||||
authors: ['lucaslimasouza', 'kishanprmr'],
|
||||
actions: [
|
||||
sendEmailAction,
|
||||
downloadAttachmentAction,
|
||||
replyEmailAction,
|
||||
createDraftEmailAction,
|
||||
addLabelToEmailAction,
|
||||
removeLabelFromEmailAction,
|
||||
moveEmailToFolderAction,
|
||||
sendDraftEmailAction,
|
||||
forwardEmailAction,
|
||||
findEmailAction,
|
||||
createCustomApiCallAction({
|
||||
auth: microsoftOutlookAuth,
|
||||
baseUrl: () => 'https://graph.microsoft.com/v1.0/',
|
||||
authMapping: async (auth) => ({
|
||||
Authorization: `Bearer ${(auth as OAuth2PropertyValue).access_token}`,
|
||||
}),
|
||||
}),
|
||||
],
|
||||
triggers: [
|
||||
newEmailTrigger,
|
||||
newEmailInFolderTrigger,
|
||||
newAttachmentTrigger,
|
||||
],
|
||||
});
|
||||
@@ -0,0 +1,43 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { Client } from '@microsoft/microsoft-graph-client';
|
||||
import { microsoftOutlookAuth } from '../common/auth';
|
||||
import { messageIdDropdown } from '../common/props';
|
||||
|
||||
export const addLabelToEmailAction = createAction({
|
||||
auth: microsoftOutlookAuth,
|
||||
name: 'addLabelToEmail',
|
||||
displayName: 'Add Label to Email',
|
||||
description: 'Adds a category (label) to an email message.',
|
||||
props: {
|
||||
messageId: messageIdDropdown({
|
||||
displayName: 'Email',
|
||||
description: 'Select the email message to add the label to.',
|
||||
required: true,
|
||||
}),
|
||||
categories: Property.Array({
|
||||
displayName: 'Categories',
|
||||
description: 'Categories to add to the email.',
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
async run(context) {
|
||||
const { messageId, categories } = context.propsValue;
|
||||
|
||||
const client = Client.initWithMiddleware({
|
||||
authProvider: {
|
||||
getAccessToken: () => Promise.resolve(context.auth.access_token),
|
||||
},
|
||||
});
|
||||
|
||||
const message = await client.api(`/me/messages/${messageId}`).get();
|
||||
const existingCategories = message.categories || [];
|
||||
|
||||
const updatedCategories = [...new Set([...existingCategories, ...categories])];
|
||||
|
||||
const response = await client.api(`/me/messages/${messageId}`).patch({
|
||||
categories: updatedCategories,
|
||||
});
|
||||
|
||||
return response;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,108 @@
|
||||
import { ApFile, createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { Client } from '@microsoft/microsoft-graph-client';
|
||||
import { BodyType, Message } from '@microsoft/microsoft-graph-types';
|
||||
import { microsoftOutlookAuth } from '../common/auth';
|
||||
|
||||
export const createDraftEmailAction = createAction({
|
||||
auth: microsoftOutlookAuth,
|
||||
name: 'createDraftEmail',
|
||||
displayName: 'Create Draft Email',
|
||||
description: 'Creates a draft email message.',
|
||||
props: {
|
||||
recipients: Property.Array({
|
||||
displayName: 'To Email(s)',
|
||||
required: true,
|
||||
}),
|
||||
ccRecipients: Property.Array({
|
||||
displayName: 'CC Email(s)',
|
||||
required: false,
|
||||
defaultValue: [],
|
||||
}),
|
||||
bccRecipients: Property.Array({
|
||||
displayName: 'BCC Email(s)',
|
||||
required: false,
|
||||
defaultValue: [],
|
||||
}),
|
||||
subject: Property.ShortText({
|
||||
displayName: 'Subject',
|
||||
required: true,
|
||||
}),
|
||||
bodyFormat: Property.StaticDropdown({
|
||||
displayName: 'Body Format',
|
||||
required: true,
|
||||
defaultValue: 'text',
|
||||
options: {
|
||||
disabled: false,
|
||||
options: [
|
||||
{ label: 'HTML', value: 'html' },
|
||||
{ label: 'Text', value: 'text' },
|
||||
],
|
||||
},
|
||||
}),
|
||||
body: Property.LongText({
|
||||
displayName: 'Body',
|
||||
required: true,
|
||||
}),
|
||||
attachments: Property.Array({
|
||||
displayName: 'Attachments',
|
||||
required: false,
|
||||
defaultValue: [],
|
||||
properties: {
|
||||
file: Property.File({
|
||||
displayName: 'File',
|
||||
required: true,
|
||||
}),
|
||||
fileName: Property.ShortText({
|
||||
displayName: 'File Name',
|
||||
required: false,
|
||||
}),
|
||||
},
|
||||
}),
|
||||
},
|
||||
async run(context) {
|
||||
const recipients = context.propsValue.recipients as string[];
|
||||
const ccRecipients = context.propsValue.ccRecipients as string[];
|
||||
const bccRecipients = context.propsValue.bccRecipients as string[];
|
||||
const attachments = context.propsValue.attachments as Array<{ file: ApFile; fileName: string }>;
|
||||
|
||||
const { subject, body, bodyFormat } = context.propsValue;
|
||||
|
||||
const mailPayload: Message = {
|
||||
subject,
|
||||
body: {
|
||||
content: body,
|
||||
contentType: bodyFormat as BodyType,
|
||||
},
|
||||
toRecipients: recipients.map((mail) => ({
|
||||
emailAddress: {
|
||||
address: mail,
|
||||
},
|
||||
})),
|
||||
ccRecipients: ccRecipients.map((mail) => ({
|
||||
emailAddress: {
|
||||
address: mail,
|
||||
},
|
||||
})),
|
||||
bccRecipients: bccRecipients.map((mail) => ({
|
||||
emailAddress: {
|
||||
address: mail,
|
||||
},
|
||||
})),
|
||||
attachments: attachments.map((attachment) => ({
|
||||
'@odata.type': '#microsoft.graph.fileAttachment',
|
||||
name: attachment.fileName || attachment.file.filename,
|
||||
contentBytes: attachment.file.base64,
|
||||
})),
|
||||
};
|
||||
|
||||
const client = Client.initWithMiddleware({
|
||||
authProvider: {
|
||||
getAccessToken: () => Promise.resolve(context.auth.access_token),
|
||||
},
|
||||
});
|
||||
|
||||
const response = await client.api('/me/messages').post(mailPayload);
|
||||
|
||||
return response;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,48 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { Client, PageCollection } from '@microsoft/microsoft-graph-client';
|
||||
import { FileAttachment } from '@microsoft/microsoft-graph-types';
|
||||
import { microsoftOutlookAuth } from '../common/auth';
|
||||
|
||||
export const downloadAttachmentAction = createAction({
|
||||
auth: microsoftOutlookAuth,
|
||||
name: 'downloadAttachment',
|
||||
displayName: 'Download Attachment',
|
||||
description: 'Download attachments from a specific email message.',
|
||||
props: {
|
||||
messageId: Property.ShortText({
|
||||
displayName: 'Message ID',
|
||||
description: 'The ID of the email message containing the attachment.',
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
async run(context) {
|
||||
const { messageId } = context.propsValue;
|
||||
|
||||
const client = Client.initWithMiddleware({
|
||||
authProvider: {
|
||||
getAccessToken: () => Promise.resolve(context.auth.access_token),
|
||||
},
|
||||
});
|
||||
|
||||
const response: PageCollection = await client
|
||||
.api(`/me/messages/${messageId}/attachments`)
|
||||
.get();
|
||||
|
||||
const attachments = [];
|
||||
|
||||
for (const attachment of response.value as FileAttachment[]) {
|
||||
if (attachment.name && attachment.contentBytes) {
|
||||
attachments.push({
|
||||
...attachment,
|
||||
file: await context.files.write({
|
||||
fileName: attachment.name || 'test.png',
|
||||
data: Buffer.from(attachment.contentBytes, 'base64'),
|
||||
}),
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return attachments;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,73 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { Client, PageCollection } from '@microsoft/microsoft-graph-client';
|
||||
import { Message } from '@microsoft/microsoft-graph-types';
|
||||
import dayjs from 'dayjs';
|
||||
import { microsoftOutlookAuth } from '../common/auth';
|
||||
import { mailFolderIdDropdown } from '../common/props';
|
||||
|
||||
export const findEmailAction = createAction({
|
||||
auth: microsoftOutlookAuth,
|
||||
name: 'findEmail',
|
||||
displayName: 'Find Email',
|
||||
description: 'Searches for emails using full-text search.',
|
||||
props: {
|
||||
searchQuery: Property.ShortText({
|
||||
displayName: 'Search Query',
|
||||
description:
|
||||
'Search terms to find emails (e.g., "from:john@example.com", "subject:urgent", "hasAttachments:true")',
|
||||
required: true,
|
||||
}),
|
||||
folderId: mailFolderIdDropdown({
|
||||
displayName: 'Folder',
|
||||
description: 'Search in a specific folder. Leave empty to search all folders.',
|
||||
required: false,
|
||||
}),
|
||||
top: Property.Number({
|
||||
displayName: 'Max Results',
|
||||
description: 'Maximum number of results to return (1-1000).',
|
||||
required: false,
|
||||
defaultValue: 25,
|
||||
}),
|
||||
},
|
||||
async run(context) {
|
||||
const { searchQuery, folderId, top } = context.propsValue;
|
||||
|
||||
const client = Client.initWithMiddleware({
|
||||
authProvider: {
|
||||
getAccessToken: () => Promise.resolve(context.auth.access_token),
|
||||
},
|
||||
});
|
||||
|
||||
const baseUrl = folderId ? `/me/mailFolders/${folderId}/messages` : '/me/messages';
|
||||
const searchParam = `$search="${searchQuery}"`;
|
||||
const topParam = top ? `$top=${Math.min(Math.max(top, 1), 1000)}` : '$top=25';
|
||||
const selectParam = ['id', 'subject', 'from', 'toRecipients', 'receivedDateTime'].join(',');
|
||||
|
||||
const queryParams = [searchParam, topParam, selectParam].filter(Boolean).join('&');
|
||||
const url = `${baseUrl}?${queryParams}`;
|
||||
|
||||
const headers: Record<string, string> = {
|
||||
ConsistencyLevel: 'eventual',
|
||||
Prefer: 'outlook.body-content-type="text"',
|
||||
};
|
||||
|
||||
const response: PageCollection = await client.api(url).headers(headers).get();
|
||||
|
||||
const messages = response.value as Message[];
|
||||
const nextPageUrl = response['@odata.nextLink'];
|
||||
|
||||
if (searchQuery) {
|
||||
messages.sort(
|
||||
(a, b) => dayjs(b.receivedDateTime).valueOf() - dayjs(a.receivedDateTime).valueOf(),
|
||||
);
|
||||
}
|
||||
|
||||
return {
|
||||
found: messages.length > 0,
|
||||
result: messages,
|
||||
hasMore: !!nextPageUrl,
|
||||
nextPageUrl: nextPageUrl,
|
||||
totalCount: messages.length,
|
||||
};
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,66 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { Client } from '@microsoft/microsoft-graph-client';
|
||||
import { BodyType, Message } from '@microsoft/microsoft-graph-types';
|
||||
import { microsoftOutlookAuth } from '../common/auth';
|
||||
import { messageIdDropdown } from '../common/props';
|
||||
|
||||
export const forwardEmailAction = createAction({
|
||||
auth: microsoftOutlookAuth,
|
||||
name: 'forwardEmail',
|
||||
displayName: 'Forward Email',
|
||||
description: 'Forwards an email message.',
|
||||
props: {
|
||||
messageId: messageIdDropdown({
|
||||
displayName: 'Email',
|
||||
description: 'Select the email message to forward.',
|
||||
required: true,
|
||||
}),
|
||||
recipients: Property.Array({
|
||||
displayName: 'To Email(s)',
|
||||
required: true,
|
||||
}),
|
||||
comment: Property.LongText({
|
||||
displayName: 'Comment',
|
||||
description: 'Optional comment to include with the forwarded message.',
|
||||
required: false,
|
||||
}),
|
||||
},
|
||||
async run(context) {
|
||||
const { messageId, comment } = context.propsValue;
|
||||
const recipients = context.propsValue.recipients as string[];
|
||||
|
||||
const client = Client.initWithMiddleware({
|
||||
authProvider: {
|
||||
getAccessToken: () => Promise.resolve(context.auth.access_token),
|
||||
},
|
||||
});
|
||||
|
||||
const message = await client.api(`/me/messages/${messageId}`).get();
|
||||
|
||||
const messagePayload: Message = {
|
||||
toRecipients: recipients.map((mail) => ({
|
||||
emailAddress: {
|
||||
address: mail,
|
||||
},
|
||||
})),
|
||||
body: {
|
||||
contentType: 'html',
|
||||
content: (comment ?? '') + '<br><br>' + message.body.content,
|
||||
},
|
||||
attachments: message.attachments,
|
||||
};
|
||||
|
||||
const response = await client
|
||||
.api(`/me/messages/${messageId}/forward`)
|
||||
.post({
|
||||
message:messagePayload,
|
||||
});
|
||||
|
||||
return {
|
||||
success: true,
|
||||
message: 'Email forwarded successfully.',
|
||||
messageId: response.id,
|
||||
...response,
|
||||
};
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,39 @@
|
||||
import { createAction, Property, OAuth2PropertyValue } from '@activepieces/pieces-framework';
|
||||
import { Client, PageCollection } from '@microsoft/microsoft-graph-client';
|
||||
import { MailFolder } from '@microsoft/microsoft-graph-types';
|
||||
import { microsoftOutlookAuth } from '../common/auth';
|
||||
import { mailFolderIdDropdown, messageIdDropdown } from '../common/props';
|
||||
|
||||
export const moveEmailToFolderAction = createAction({
|
||||
auth: microsoftOutlookAuth,
|
||||
name: 'moveEmailToFolder',
|
||||
displayName: 'Move Email to Folder',
|
||||
description: 'Moves an email message to a specific folder.',
|
||||
props: {
|
||||
messageId: messageIdDropdown({
|
||||
displayName: 'Email',
|
||||
description: 'Select the email message to move.',
|
||||
required: true,
|
||||
}),
|
||||
destinationFolderId: mailFolderIdDropdown({
|
||||
displayName: 'Destination Folder',
|
||||
description: 'The folder to move the email to.',
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
async run(context) {
|
||||
const { messageId, destinationFolderId } = context.propsValue;
|
||||
|
||||
const client = Client.initWithMiddleware({
|
||||
authProvider: {
|
||||
getAccessToken: () => Promise.resolve(context.auth.access_token),
|
||||
},
|
||||
});
|
||||
|
||||
const response = await client.api(`/me/messages/${messageId}/move`).post({
|
||||
destinationId: destinationFolderId,
|
||||
});
|
||||
|
||||
return response;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,45 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { Client } from '@microsoft/microsoft-graph-client';
|
||||
import { microsoftOutlookAuth } from '../common/auth';
|
||||
import { messageIdDropdown } from '../common/props';
|
||||
|
||||
export const removeLabelFromEmailAction = createAction({
|
||||
auth: microsoftOutlookAuth,
|
||||
name: 'removeLabelFromEmail',
|
||||
displayName: 'Remove Label from Email',
|
||||
description: 'Removes a category (label) from an email message.',
|
||||
props: {
|
||||
messageId: messageIdDropdown({
|
||||
displayName: 'Email',
|
||||
description: 'Select the email message to remove the label from.',
|
||||
required: true,
|
||||
}),
|
||||
categories: Property.Array({
|
||||
displayName: 'Categories to Remove',
|
||||
description: 'Categories to remove from the email.',
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
async run(context) {
|
||||
const { messageId, categories } = context.propsValue;
|
||||
|
||||
const client = Client.initWithMiddleware({
|
||||
authProvider: {
|
||||
getAccessToken: () => Promise.resolve(context.auth.access_token),
|
||||
},
|
||||
});
|
||||
|
||||
const message = await client.api(`/me/messages/${messageId}`).get();
|
||||
const existingCategories = message.categories || [];
|
||||
|
||||
const updatedCategories = existingCategories.filter(
|
||||
(category: string) => !categories.includes(category)
|
||||
);
|
||||
|
||||
const response = await client.api(`/me/messages/${messageId}`).patch({
|
||||
categories: updatedCategories,
|
||||
});
|
||||
|
||||
return response;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,163 @@
|
||||
import { ApFile, createAction, Property, OAuth2PropertyValue } from '@activepieces/pieces-framework';
|
||||
import { microsoftOutlookAuth } from '../common/auth';
|
||||
import { BodyType, Message } from '@microsoft/microsoft-graph-types';
|
||||
import { Client, PageCollection } from '@microsoft/microsoft-graph-client';
|
||||
|
||||
export const replyEmailAction = createAction({
|
||||
auth: microsoftOutlookAuth,
|
||||
name: 'reply-email',
|
||||
displayName: 'Reply to Email',
|
||||
description: 'Reply to an outlook email.',
|
||||
props: {
|
||||
messageId: Property.Dropdown({
|
||||
auth: microsoftOutlookAuth,
|
||||
displayName: 'Email',
|
||||
description: 'Select the email message to reply to.',
|
||||
required: true,
|
||||
refreshers: [],
|
||||
options: async ({ auth }) => {
|
||||
if (!auth) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
|
||||
const client = Client.initWithMiddleware({
|
||||
authProvider: {
|
||||
getAccessToken: () => Promise.resolve((auth as OAuth2PropertyValue).access_token),
|
||||
},
|
||||
});
|
||||
|
||||
try {
|
||||
const response: PageCollection = await client
|
||||
.api('/me/messages?$top=50&$select=id,subject,from,receivedDateTime')
|
||||
.orderby('receivedDateTime desc')
|
||||
.get();
|
||||
|
||||
const messages = response.value as Message[];
|
||||
|
||||
return {
|
||||
disabled: false,
|
||||
options: messages.map((message) => ({
|
||||
label: `${message.subject || 'No Subject'} - ${message.from?.emailAddress?.name || message.from?.emailAddress?.address || 'Unknown Sender'}`,
|
||||
value: message.id || '',
|
||||
})),
|
||||
};
|
||||
} catch (error) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
},
|
||||
}),
|
||||
bodyFormat: Property.StaticDropdown({
|
||||
displayName: 'Body Format',
|
||||
required: true,
|
||||
defaultValue: 'text',
|
||||
options: {
|
||||
disabled: false,
|
||||
options: [
|
||||
{ label: 'HTML', value: 'html' },
|
||||
{ label: 'Text', value: 'text' },
|
||||
],
|
||||
},
|
||||
}),
|
||||
replyBody: Property.LongText({
|
||||
displayName: 'Reply Body',
|
||||
required: true,
|
||||
}),
|
||||
ccRecipients: Property.Array({
|
||||
displayName: 'CC Recipients',
|
||||
required: false,
|
||||
}),
|
||||
bccRecipients: Property.Array({
|
||||
displayName: 'BCC Recipients',
|
||||
required: false,
|
||||
}),
|
||||
attachments: Property.Array({
|
||||
displayName: 'Attachments',
|
||||
required: false,
|
||||
defaultValue: [],
|
||||
properties: {
|
||||
file: Property.File({
|
||||
displayName: 'File',
|
||||
required: true,
|
||||
}),
|
||||
fileName: Property.ShortText({
|
||||
displayName: 'File Name',
|
||||
required: false,
|
||||
}),
|
||||
},
|
||||
}),
|
||||
draft: Property.Checkbox({
|
||||
displayName: 'Create Draft',
|
||||
description: 'If enabled, creates draft without sending.',
|
||||
required: true,
|
||||
defaultValue: false,
|
||||
}),
|
||||
},
|
||||
async run(context) {
|
||||
const { replyBody, bodyFormat, messageId, draft } = context.propsValue;
|
||||
const ccRecipients = context.propsValue.ccRecipients as string[];
|
||||
const bccRecipients = context.propsValue.bccRecipients as string[];
|
||||
const attachments = context.propsValue.attachments as Array<{
|
||||
file: ApFile;
|
||||
fileName: string;
|
||||
}>;
|
||||
const mailPayload: Message = {
|
||||
body: {
|
||||
content: replyBody,
|
||||
contentType: bodyFormat as BodyType,
|
||||
},
|
||||
ccRecipients: ccRecipients.map((mail) => ({
|
||||
emailAddress: {
|
||||
address: mail,
|
||||
},
|
||||
})),
|
||||
bccRecipients: bccRecipients.map((mail) => ({
|
||||
emailAddress: {
|
||||
address: mail,
|
||||
},
|
||||
})),
|
||||
attachments: attachments.map((attachment) => ({
|
||||
'@odata.type': '#microsoft.graph.fileAttachment',
|
||||
name: attachment.fileName || attachment.file.filename,
|
||||
contentBytes: attachment.file.base64,
|
||||
})),
|
||||
};
|
||||
const client = Client.initWithMiddleware({
|
||||
authProvider: {
|
||||
getAccessToken: () => Promise.resolve(context.auth.access_token),
|
||||
},
|
||||
});
|
||||
try {
|
||||
const response: Message = await client
|
||||
.api(`/me/messages/${messageId}/createReply`)
|
||||
.post({
|
||||
message: mailPayload,
|
||||
});
|
||||
const draftId = response.id;
|
||||
if (!draft) {
|
||||
await client.api(`/me/messages/${draftId}/send`).post({});
|
||||
return {
|
||||
success: true,
|
||||
message: 'Reply sent successfully.',
|
||||
draftId: draftId,
|
||||
};
|
||||
}
|
||||
return {
|
||||
success: true,
|
||||
message: 'Draft created successfully.',
|
||||
draftId: draftId,
|
||||
draftLink: `https://outlook.office.com/mail/drafts/id/${draftId}`,
|
||||
};
|
||||
} catch (error) {
|
||||
console.error('Reply Email Error:', error);
|
||||
const errorMessage =
|
||||
error instanceof Error ? error.message : 'Unknown error';
|
||||
throw new Error(errorMessage);
|
||||
}
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,35 @@
|
||||
import { createAction } from '@activepieces/pieces-framework';
|
||||
import { Client } from '@microsoft/microsoft-graph-client';
|
||||
import { microsoftOutlookAuth } from '../common/auth';
|
||||
import { draftMessageIdDropdown } from '../common/props';
|
||||
|
||||
export const sendDraftEmailAction = createAction({
|
||||
auth: microsoftOutlookAuth,
|
||||
name: 'sendDraftEmail',
|
||||
displayName: 'Send Draft Email',
|
||||
description: 'Sends a draft email message.',
|
||||
props: {
|
||||
messageId: draftMessageIdDropdown({
|
||||
displayName: 'Draft Email',
|
||||
description: 'Select the draft email message to send.',
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
async run(context) {
|
||||
const { messageId } = context.propsValue;
|
||||
|
||||
const client = Client.initWithMiddleware({
|
||||
authProvider: {
|
||||
getAccessToken: () => Promise.resolve(context.auth.access_token),
|
||||
},
|
||||
});
|
||||
|
||||
await client.api(`/me/messages/${messageId}/send`).post({});
|
||||
|
||||
return {
|
||||
success: true,
|
||||
message: 'Draft sent successfully.',
|
||||
messageId: messageId,
|
||||
};
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,112 @@
|
||||
import { ApFile, createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { Client } from '@microsoft/microsoft-graph-client';
|
||||
import { BodyType, Message } from '@microsoft/microsoft-graph-types';
|
||||
|
||||
import { microsoftOutlookAuth } from '../common/auth';
|
||||
|
||||
export const sendEmailAction = createAction({
|
||||
auth: microsoftOutlookAuth,
|
||||
name: 'send-email',
|
||||
displayName: 'Send Email',
|
||||
description: 'Sends an email using Microsoft Outlook.',
|
||||
props: {
|
||||
recipients: Property.Array({
|
||||
displayName: 'To Email(s)',
|
||||
required: true,
|
||||
}),
|
||||
ccRecipients: Property.Array({
|
||||
displayName: 'CC Email(s)',
|
||||
required: false,
|
||||
defaultValue: [],
|
||||
}),
|
||||
bccRecipients: Property.Array({
|
||||
displayName: 'BCC Email(s)',
|
||||
required: false,
|
||||
defaultValue: [],
|
||||
}),
|
||||
subject: Property.ShortText({
|
||||
displayName: 'Subject',
|
||||
required: true,
|
||||
}),
|
||||
bodyFormat: Property.StaticDropdown({
|
||||
displayName: 'Body Format',
|
||||
required: true,
|
||||
defaultValue: 'text',
|
||||
options: {
|
||||
disabled: false,
|
||||
options: [
|
||||
{ label: 'HTML', value: 'html' },
|
||||
{ label: 'Text', value: 'text' },
|
||||
],
|
||||
},
|
||||
}),
|
||||
body: Property.LongText({
|
||||
displayName: 'Body',
|
||||
required: true,
|
||||
}),
|
||||
attachments: Property.Array({
|
||||
displayName: 'Attachments',
|
||||
required: false,
|
||||
defaultValue: [],
|
||||
properties: {
|
||||
file: Property.File({
|
||||
displayName: 'File',
|
||||
required: true,
|
||||
}),
|
||||
fileName: Property.ShortText({
|
||||
displayName: 'File Name',
|
||||
required: false,
|
||||
}),
|
||||
},
|
||||
}),
|
||||
},
|
||||
async run(context) {
|
||||
const recipients = context.propsValue.recipients as string[];
|
||||
const ccRecipients = context.propsValue.ccRecipients as string[];
|
||||
const bccRecipients = context.propsValue.bccRecipients as string[];
|
||||
const attachments = context.propsValue.attachments as Array<{ file: ApFile; fileName: string }>;
|
||||
|
||||
const { subject, body, bodyFormat } = context.propsValue;
|
||||
|
||||
const mailPayload: Message = {
|
||||
subject,
|
||||
body: {
|
||||
content: body,
|
||||
contentType: bodyFormat as BodyType,
|
||||
},
|
||||
toRecipients: recipients.map((mail) => ({
|
||||
emailAddress: {
|
||||
address: mail,
|
||||
},
|
||||
})),
|
||||
ccRecipients: ccRecipients.map((mail) => ({
|
||||
emailAddress: {
|
||||
address: mail,
|
||||
},
|
||||
})),
|
||||
bccRecipients: bccRecipients.map((mail) => ({
|
||||
emailAddress: {
|
||||
address: mail,
|
||||
},
|
||||
})),
|
||||
attachments: attachments.map((attachment) => ({
|
||||
'@odata.type': '#microsoft.graph.fileAttachment',
|
||||
name: attachment.fileName || attachment.file.filename,
|
||||
contentBytes: attachment.file.base64,
|
||||
})),
|
||||
};
|
||||
|
||||
const client = Client.initWithMiddleware({
|
||||
authProvider: {
|
||||
getAccessToken: () => Promise.resolve(context.auth.access_token),
|
||||
},
|
||||
});
|
||||
|
||||
const response = await client.api('/me/sendMail').post({
|
||||
message: mailPayload,
|
||||
saveToSentItems: 'true',
|
||||
});
|
||||
|
||||
return response;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,54 @@
|
||||
import { OAuth2PropertyValue, PieceAuth } from '@activepieces/pieces-framework';
|
||||
import { Client } from '@microsoft/microsoft-graph-client';
|
||||
|
||||
const authDesc = `
|
||||
1. Sign in to [Microsoft Azure Portal](https://portal.azure.com/).
|
||||
2. From the left sidebar, go to **Microsoft Enfra ID**.
|
||||
3. Under **Manage**, click on **App registrations**.
|
||||
4. Click the **New registration** button.
|
||||
5. Enter a **Name** for your app.
|
||||
6. For **Supported account types**, choose:
|
||||
- **Accounts in any organizational directory (Any Microsoft Entra ID tenant - Multitenant) and personal Microsoft accounts**
|
||||
- Or select based on your requirement.
|
||||
7. In **Redirect URI**, select **Web** and add the given URL.
|
||||
8. Click **Register**.
|
||||
9. After registration, you’ll be redirected to the app’s overview page. Copy the **Application (client) ID**.
|
||||
10. From the left menu, go to **Certificates & secrets**.
|
||||
- Under **Client secrets**, click **New client secret**.
|
||||
- Provide a description, set an expiry, and click **Add**.
|
||||
- Copy the **Value** of the client secret (this will not be shown again).
|
||||
11. Go to **API permissions** from the left menu.
|
||||
- Click **Add a permission**.
|
||||
- Select **Microsoft Graph** → **Delegated permissions**.
|
||||
- Add the following scopes:
|
||||
- Mail.ReadWrite
|
||||
- Mail.Send
|
||||
- Calendars.Read
|
||||
- offline_access
|
||||
- User.Read
|
||||
- Click **Add permissions**.
|
||||
12. Copy your **Client ID** and **Client Secret**.
|
||||
`
|
||||
|
||||
export const microsoftOutlookAuth = PieceAuth.OAuth2({
|
||||
description:authDesc,
|
||||
authUrl: 'https://login.microsoftonline.com/common/oauth2/v2.0/authorize',
|
||||
tokenUrl: 'https://login.microsoftonline.com/common/oauth2/v2.0/token',
|
||||
required: true,
|
||||
scope: ['Mail.ReadWrite', 'Mail.Send', 'Calendars.Read', 'offline_access', 'User.Read'],
|
||||
prompt: 'omit',
|
||||
validate: async ({ auth }) => {
|
||||
try {
|
||||
const authValue = auth as OAuth2PropertyValue;
|
||||
const client = Client.initWithMiddleware({
|
||||
authProvider: {
|
||||
getAccessToken: () => Promise.resolve(authValue.access_token),
|
||||
},
|
||||
});
|
||||
await client.api('/me').get();
|
||||
return { valid: true };
|
||||
} catch (error) {
|
||||
return { valid: false, error: 'Invalid Credentials.' };
|
||||
}
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,145 @@
|
||||
import { OAuth2PropertyValue, Property } from '@activepieces/pieces-framework';
|
||||
import { PageCollection, Client } from '@microsoft/microsoft-graph-client';
|
||||
import { MailFolder, Message } from '@microsoft/microsoft-graph-types';
|
||||
import { microsoftOutlookAuth } from './auth';
|
||||
|
||||
type DropdownParams = {
|
||||
displayName: string;
|
||||
description: string;
|
||||
required: boolean;
|
||||
};
|
||||
|
||||
export const messageIdDropdown = (params: DropdownParams) =>
|
||||
Property.Dropdown({
|
||||
auth: microsoftOutlookAuth,
|
||||
displayName: params.displayName,
|
||||
description: params.description,
|
||||
required: params.required,
|
||||
refreshers: [],
|
||||
options: async ({ auth }) => {
|
||||
if (!auth) {
|
||||
return {
|
||||
placeholder: 'Please connect your account first.',
|
||||
disabled: true,
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
|
||||
const client = Client.initWithMiddleware({
|
||||
authProvider: {
|
||||
getAccessToken: () => Promise.resolve((auth as OAuth2PropertyValue).access_token),
|
||||
},
|
||||
});
|
||||
|
||||
try {
|
||||
const response: PageCollection = await client
|
||||
.api('/me/messages?$top=50&$select=id,subject,from,receivedDateTime')
|
||||
.orderby('receivedDateTime desc')
|
||||
.get();
|
||||
|
||||
const messages = response.value as Message[];
|
||||
|
||||
return {
|
||||
disabled: false,
|
||||
options: messages.map((message) => ({
|
||||
label: `${message.subject || 'No Subject'}`,
|
||||
value: message.id,
|
||||
})),
|
||||
};
|
||||
} catch (error) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
export const draftMessageIdDropdown = (params: DropdownParams) =>
|
||||
Property.Dropdown({
|
||||
auth: microsoftOutlookAuth,
|
||||
displayName: params.displayName,
|
||||
description: params.description,
|
||||
required: params.required,
|
||||
refreshers: [],
|
||||
options: async ({ auth }) => {
|
||||
if (!auth) {
|
||||
return {
|
||||
placeholder: 'Please connect your account first.',
|
||||
disabled: true,
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
|
||||
const client = Client.initWithMiddleware({
|
||||
authProvider: {
|
||||
getAccessToken: () => Promise.resolve((auth as OAuth2PropertyValue).access_token),
|
||||
},
|
||||
});
|
||||
|
||||
try {
|
||||
const response: PageCollection = await client
|
||||
.api('/me/mailFolders/drafts/messages?$top=50&$select=id,subject,from,receivedDateTime')
|
||||
.orderby('receivedDateTime desc')
|
||||
.get();
|
||||
|
||||
const messages = response.value as Message[];
|
||||
|
||||
return {
|
||||
disabled: false,
|
||||
options: messages.map((message) => ({
|
||||
label: `${message.subject || 'No Subject'}`,
|
||||
value: message.id,
|
||||
})),
|
||||
};
|
||||
} catch (error) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
export const mailFolderIdDropdown = (params: DropdownParams) =>
|
||||
Property.Dropdown({
|
||||
auth: microsoftOutlookAuth,
|
||||
displayName: params.displayName,
|
||||
description: params.description,
|
||||
required: params.required,
|
||||
refreshers: [],
|
||||
options: async ({ auth }) => {
|
||||
if (!auth) {
|
||||
return {
|
||||
placeholder: 'Please connect your account first.',
|
||||
disabled: true,
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
|
||||
const client = Client.initWithMiddleware({
|
||||
authProvider: {
|
||||
getAccessToken: () => Promise.resolve((auth as OAuth2PropertyValue).access_token),
|
||||
},
|
||||
});
|
||||
|
||||
try {
|
||||
const response: PageCollection = await client.api('/me/mailFolders').get();
|
||||
|
||||
const folders = response.value as MailFolder[];
|
||||
|
||||
return {
|
||||
disabled: false,
|
||||
options: folders.map((folder) => ({
|
||||
label: folder.displayName || folder.id || 'Unknown',
|
||||
value: folder.id || '',
|
||||
})),
|
||||
};
|
||||
} catch (error) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,136 @@
|
||||
import { FilesService, TriggerStrategy, createTrigger } from '@activepieces/pieces-framework';
|
||||
import { Client, PageCollection } from '@microsoft/microsoft-graph-client';
|
||||
import { Message, FileAttachment } from '@microsoft/microsoft-graph-types';
|
||||
import dayjs from 'dayjs';
|
||||
import { microsoftOutlookAuth } from '../common/auth';
|
||||
import { mailFolderIdDropdown } from '../common/props';
|
||||
import { isNil } from '@activepieces/shared';
|
||||
|
||||
async function enrichAttachments(
|
||||
client: Client,
|
||||
messages: Message[],
|
||||
files: FilesService,
|
||||
): Promise<Record<string, any>[]> {
|
||||
const attachments: Record<string, any>[] = [];
|
||||
|
||||
for (const message of messages) {
|
||||
const attachmentResponse: PageCollection = await client
|
||||
.api(`/me/messages/${message.id}/attachments`)
|
||||
.get();
|
||||
|
||||
for (const attachment of attachmentResponse.value as FileAttachment[]) {
|
||||
const { contentBytes, ...rest } = attachment;
|
||||
|
||||
if (attachment.name && contentBytes) {
|
||||
const file = await files.write({
|
||||
fileName: attachment.name,
|
||||
data: Buffer.from(contentBytes, 'base64'),
|
||||
});
|
||||
|
||||
attachments.push({
|
||||
file,
|
||||
messageId: message.id!,
|
||||
messageSubject: message.subject,
|
||||
messageSender: message.sender,
|
||||
messageReceivedDateTime: message.receivedDateTime,
|
||||
parentFolderId: message.parentFolderId,
|
||||
...rest,
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
return attachments;
|
||||
}
|
||||
|
||||
export const newAttachmentTrigger = createTrigger({
|
||||
auth: microsoftOutlookAuth,
|
||||
name: 'newAttachment',
|
||||
displayName: 'New Attachment',
|
||||
description: 'Triggers when a new email containing one or more attachments arrives.',
|
||||
props: {
|
||||
folderId: mailFolderIdDropdown({
|
||||
displayName: 'Folder',
|
||||
description: 'Monitor attachments in a specific folder. Leave empty to monitor all folders.',
|
||||
required: false,
|
||||
}),
|
||||
},
|
||||
sampleData: {},
|
||||
type: TriggerStrategy.POLLING,
|
||||
async onEnable(context) {
|
||||
await context.store.put('lastPoll', Date.now());
|
||||
},
|
||||
async onDisable(context) {
|
||||
// return
|
||||
},
|
||||
async test(context) {
|
||||
const { folderId } = context.propsValue;
|
||||
const client = Client.initWithMiddleware({
|
||||
authProvider: {
|
||||
getAccessToken: () => Promise.resolve(context.auth.access_token),
|
||||
},
|
||||
});
|
||||
const baseUrl = folderId ? `/me/mailFolders/${folderId}/messages` : '/me/messages';
|
||||
|
||||
const response: PageCollection = await client
|
||||
.api(`${baseUrl}?$filter=hasAttachments eq true`)
|
||||
.top(10)
|
||||
.get();
|
||||
|
||||
const attachments = await enrichAttachments(client, response.value as Message[], context.files);
|
||||
|
||||
const items = attachments.map((attachment) => ({
|
||||
epochMilliSeconds: dayjs(attachment['messageReceivedDateTime']).valueOf(),
|
||||
data: attachment,
|
||||
}));
|
||||
|
||||
return items.map((item) => item.data);
|
||||
},
|
||||
async run(context) {
|
||||
const lastFetchEpochMS = await context.store.get<number>('lastPoll');
|
||||
if (isNil(lastFetchEpochMS)) {
|
||||
throw new Error("lastPoll doesn't exist in the store.");
|
||||
}
|
||||
|
||||
const { folderId } = context.propsValue;
|
||||
const client = Client.initWithMiddleware({
|
||||
authProvider: {
|
||||
getAccessToken: () => Promise.resolve(context.auth.access_token),
|
||||
},
|
||||
});
|
||||
|
||||
const baseUrl = folderId ? `/me/mailFolders/${folderId}/messages` : '/me/messages';
|
||||
let response: PageCollection = await client
|
||||
.api(
|
||||
`${baseUrl}?$filter=receivedDateTime gt ${dayjs(
|
||||
lastFetchEpochMS,
|
||||
).toISOString()} and hasAttachments eq true`,
|
||||
)
|
||||
.orderby('receivedDateTime desc')
|
||||
.get();
|
||||
|
||||
const messages: Message[] = [];
|
||||
|
||||
while (response.value.length > 0) {
|
||||
messages.push(...(response.value as Message[]));
|
||||
|
||||
if (response['@odata.nextLink']) {
|
||||
response = await client.api(response['@odata.nextLink']).get();
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
const attachments = await enrichAttachments(client, messages, context.files);
|
||||
|
||||
const items = attachments.map((attachment) => ({
|
||||
epochMilliSeconds: dayjs(attachment['messageReceivedDateTime']).valueOf(),
|
||||
data: attachment,
|
||||
}));
|
||||
|
||||
const newLastEpochMilliSeconds = items.reduce(
|
||||
(acc, item) => Math.max(acc, item.epochMilliSeconds),
|
||||
lastFetchEpochMS,
|
||||
);
|
||||
await context.store.put('lastPoll', newLastEpochMilliSeconds);
|
||||
return items.filter((f) => f.epochMilliSeconds > lastFetchEpochMS).map((item) => item.data);
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,95 @@
|
||||
import { DedupeStrategy, Polling, pollingHelper } from '@activepieces/pieces-common';
|
||||
import {
|
||||
AppConnectionValueForAuthProperty,
|
||||
PiecePropValueSchema,
|
||||
TriggerStrategy,
|
||||
createTrigger,
|
||||
} from '@activepieces/pieces-framework';
|
||||
import { Client, PageCollection } from '@microsoft/microsoft-graph-client';
|
||||
import { Message } from '@microsoft/microsoft-graph-types';
|
||||
import dayjs from 'dayjs';
|
||||
import { microsoftOutlookAuth } from '../common/auth';
|
||||
import { mailFolderIdDropdown } from '../common/props';
|
||||
|
||||
const polling: Polling<AppConnectionValueForAuthProperty<typeof microsoftOutlookAuth>, { folderId?: string }> = {
|
||||
strategy: DedupeStrategy.TIMEBASED,
|
||||
items: async ({ auth, lastFetchEpochMS, propsValue }) => {
|
||||
const client = Client.initWithMiddleware({
|
||||
authProvider: {
|
||||
getAccessToken: () => Promise.resolve(auth.access_token),
|
||||
},
|
||||
});
|
||||
|
||||
const messages = [];
|
||||
const folderId = propsValue.folderId;
|
||||
|
||||
const filter =
|
||||
lastFetchEpochMS === 0
|
||||
? '$top=10'
|
||||
: `$filter=createdDateTime gt ${dayjs(lastFetchEpochMS).toISOString()}`;
|
||||
|
||||
let response: PageCollection = await client
|
||||
.api(`/me/mailFolders/${folderId}/messages?${filter}`)
|
||||
.orderby('createdDateTime desc')
|
||||
.get();
|
||||
|
||||
if (lastFetchEpochMS === 0) {
|
||||
for (const message of response.value as Message[]) {
|
||||
messages.push(message);
|
||||
}
|
||||
} else {
|
||||
while (response.value.length > 0) {
|
||||
for (const message of response.value as Message[]) {
|
||||
messages.push(message);
|
||||
}
|
||||
|
||||
if (response['@odata.nextLink']) {
|
||||
response = await client.api(response['@odata.nextLink']).get();
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return messages.map((message) => ({
|
||||
epochMilliSeconds: dayjs(message.createdDateTime).valueOf(),
|
||||
data: message,
|
||||
}));
|
||||
},
|
||||
};
|
||||
|
||||
export const newEmailInFolderTrigger = createTrigger({
|
||||
auth: microsoftOutlookAuth,
|
||||
name: 'newEmailInFolder',
|
||||
displayName: 'New Email in Folder',
|
||||
description: 'Triggers when a new email is delivered into the specified folder.',
|
||||
props: {
|
||||
folderId: mailFolderIdDropdown({
|
||||
displayName: 'Folder',
|
||||
description: '',
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
sampleData: {},
|
||||
type: TriggerStrategy.POLLING,
|
||||
async onEnable(context) {
|
||||
await pollingHelper.onEnable(polling, {
|
||||
auth: context.auth,
|
||||
store: context.store,
|
||||
propsValue: context.propsValue,
|
||||
});
|
||||
},
|
||||
async onDisable(context) {
|
||||
await pollingHelper.onDisable(polling, {
|
||||
auth: context.auth,
|
||||
store: context.store,
|
||||
propsValue: context.propsValue,
|
||||
});
|
||||
},
|
||||
async test(context) {
|
||||
return await pollingHelper.test(polling, context);
|
||||
},
|
||||
async run(context) {
|
||||
return await pollingHelper.poll(polling, context);
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,87 @@
|
||||
import { DedupeStrategy, Polling, pollingHelper } from '@activepieces/pieces-common';
|
||||
import {
|
||||
AppConnectionValueForAuthProperty,
|
||||
PiecePropValueSchema,
|
||||
TriggerStrategy,
|
||||
createTrigger,
|
||||
} from '@activepieces/pieces-framework';
|
||||
import { Client, PageCollection } from '@microsoft/microsoft-graph-client';
|
||||
import { Message } from '@microsoft/microsoft-graph-types';
|
||||
import dayjs from 'dayjs';
|
||||
import { microsoftOutlookAuth } from '../common/auth';
|
||||
|
||||
const polling: Polling<AppConnectionValueForAuthProperty<typeof microsoftOutlookAuth>, Record<string,any>> = {
|
||||
strategy: DedupeStrategy.TIMEBASED,
|
||||
items: async ({ auth, lastFetchEpochMS }) => {
|
||||
const client = Client.initWithMiddleware({
|
||||
authProvider: {
|
||||
getAccessToken: () => Promise.resolve(auth.access_token),
|
||||
},
|
||||
});
|
||||
|
||||
const messages = [];
|
||||
|
||||
const filter =
|
||||
lastFetchEpochMS === 0
|
||||
? '$top=10'
|
||||
: `$filter=receivedDateTime gt ${dayjs(lastFetchEpochMS).toISOString()}`;
|
||||
|
||||
let response: PageCollection = await client
|
||||
.api(`/me/mailFolders/inbox/messages?${filter}`)
|
||||
.orderby('receivedDateTime desc')
|
||||
.get();
|
||||
|
||||
if (lastFetchEpochMS === 0) {
|
||||
for (const message of response.value as Message[]) {
|
||||
messages.push(message);
|
||||
}
|
||||
} else {
|
||||
while (response.value.length > 0) {
|
||||
for (const message of response.value as Message[]) {
|
||||
messages.push(message);
|
||||
}
|
||||
|
||||
if (response['@odata.nextLink']) {
|
||||
response = await client.api(response['@odata.nextLink']).get();
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return messages.map((message) => ({
|
||||
epochMilliSeconds: dayjs(message.receivedDateTime).valueOf(),
|
||||
data: message,
|
||||
}));
|
||||
},
|
||||
};
|
||||
|
||||
export const newEmailTrigger = createTrigger({
|
||||
auth: microsoftOutlookAuth,
|
||||
name: 'newEmail',
|
||||
displayName: 'New Email',
|
||||
description: 'Triggers when a new email is received in the inbox.',
|
||||
props: {},
|
||||
sampleData: {},
|
||||
type: TriggerStrategy.POLLING,
|
||||
async onEnable(context) {
|
||||
await pollingHelper.onEnable(polling, {
|
||||
auth: context.auth,
|
||||
store: context.store,
|
||||
propsValue: context.propsValue,
|
||||
});
|
||||
},
|
||||
async onDisable(context) {
|
||||
await pollingHelper.onDisable(polling, {
|
||||
auth: context.auth,
|
||||
store: context.store,
|
||||
propsValue: context.propsValue,
|
||||
});
|
||||
},
|
||||
async test(context) {
|
||||
return await pollingHelper.test(polling, context);
|
||||
},
|
||||
async run(context) {
|
||||
return await pollingHelper.poll(polling, context);
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"extends": "../../../../tsconfig.base.json",
|
||||
"compilerOptions": {
|
||||
"module": "commonjs",
|
||||
"forceConsistentCasingInFileNames": true,
|
||||
"strict": true,
|
||||
"noImplicitOverride": true,
|
||||
"noImplicitReturns": true,
|
||||
"noFallthroughCasesInSwitch": true,
|
||||
"noPropertyAccessFromIndexSignature": true
|
||||
},
|
||||
"files": [],
|
||||
"include": [],
|
||||
"references": [
|
||||
{
|
||||
"path": "./tsconfig.lib.json"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"extends": "./tsconfig.json",
|
||||
"compilerOptions": {
|
||||
"module": "commonjs",
|
||||
"outDir": "../../../../dist/out-tsc",
|
||||
"declaration": true,
|
||||
"types": ["node"]
|
||||
},
|
||||
"exclude": ["jest.config.ts", "src/**/*.spec.ts", "src/**/*.test.ts"],
|
||||
"include": ["src/**/*.ts"]
|
||||
}
|
||||
Reference in New Issue
Block a user