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:
poduck
2025-12-18 22:59:37 -05:00
parent 9848268d34
commit 3aa7199503
16292 changed files with 1284892 additions and 4708 deletions

View File

@@ -0,0 +1,33 @@
{
"extends": [
"../../../../.eslintrc.base.json"
],
"ignorePatterns": [
"!**/*"
],
"overrides": [
{
"files": [
"*.ts",
"*.tsx",
"*.js",
"*.jsx"
],
"rules": {}
},
{
"files": [
"*.ts",
"*.tsx"
],
"rules": {}
},
{
"files": [
"*.js",
"*.jsx"
],
"rules": {}
}
]
}

View File

@@ -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.

View File

@@ -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"
}
}

View File

@@ -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"
]
}
}
}

View File

@@ -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."
}

View File

@@ -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, youll be redirected to the apps 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."
}

View File

@@ -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, youll be redirected to the apps 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."
}

View File

@@ -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, youll be redirected to the apps 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.": "特定のフォルダ内の添付ファイルを監視します。すべてのフォルダを監視するには空白のままにします。"
}

View File

@@ -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."
}

View File

@@ -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, youll be redirected to the apps 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."
}

View File

@@ -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.": "Срабатывает при получении нового письма во входящих."
}

View File

@@ -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, youll be redirected to the apps 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."
}

View File

@@ -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."
}

View File

@@ -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, youll be redirected to the apps 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."
}

View File

@@ -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,
],
});

View File

@@ -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;
},
});

View File

@@ -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;
},
});

View File

@@ -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;
},
});

View File

@@ -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,
};
},
});

View File

@@ -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,
};
},
});

View File

@@ -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;
},
});

View File

@@ -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;
},
});

View File

@@ -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);
}
},
});

View File

@@ -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,
};
},
});

View File

@@ -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;
},
});

View File

@@ -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, youll be redirected to the apps 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.' };
}
},
});

View File

@@ -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: [],
};
}
},
});

View File

@@ -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);
},
});

View File

@@ -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);
},
});

View File

@@ -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);
},
});

View File

@@ -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"
}
]
}

View File

@@ -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"]
}