UNPKG

n8n-nodes-imap-ai

Version:

Simplified IMAP node for n8n with AI-agent support. Clean and modular email and mailbox management for automation workflows.

108 lines 4.63 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.GetEmailOperation = void 0; const mailparser_1 = require("mailparser"); const n8n_workflow_1 = require("n8n-workflow"); const helpers_1 = require("../utils/helpers"); class GetEmailOperation { async execute(executeFunctions, client, itemIndex) { var _a, _b, _c; const mailboxParam = executeFunctions.getNodeParameter('mailbox', itemIndex); const mailbox = helpers_1.ParameterValidator.extractMailboxName(mailboxParam); const emailUid = executeFunctions.getNodeParameter('emailUid', itemIndex); helpers_1.ParameterValidator.validateMailbox(mailboxParam); helpers_1.ParameterValidator.validateUid(emailUid); try { await client.mailboxOpen(mailbox); } catch (error) { throw new n8n_workflow_1.NodeApiError(executeFunctions.getNode(), { message: `Failed to open folder ${mailbox}: ${error.message}`, }); } let message; try { const searchResults = await client.search({ uid: emailUid.toString() }); if (searchResults.length === 0) { throw new n8n_workflow_1.NodeApiError(executeFunctions.getNode(), { message: `Email with UID ${emailUid} not found in ${mailbox}`, }); } const messageGenerator = client.fetch(emailUid.toString(), { source: true, uid: true, flags: true, size: true }, { uid: true }); for await (const msg of messageGenerator) { message = msg; break; } if (!message) { throw new Error(`No message data received for UID ${emailUid}`); } } catch (error) { throw new n8n_workflow_1.NodeApiError(executeFunctions.getNode(), { message: `Failed to fetch email with UID ${emailUid}: ${error.message}`, }); } if (!message) { throw new n8n_workflow_1.NodeApiError(executeFunctions.getNode(), { message: `Email with UID ${emailUid} not found in ${mailbox}`, }); } if (!message.source) { throw new n8n_workflow_1.NodeApiError(executeFunctions.getNode(), { message: `Email source not available for UID ${emailUid}`, }); } let parsed; try { parsed = await (0, mailparser_1.simpleParser)(message.source); console.log('Email parsed successfully:', { subject: parsed.subject, fromCount: parsed.from ? 1 : 0, textLength: typeof parsed.text === 'string' ? parsed.text.length : 0, htmlLength: typeof parsed.html === 'string' ? parsed.html.length : 0 }); } catch (error) { console.error('Email parsing failed:', error); throw new n8n_workflow_1.NodeApiError(executeFunctions.getNode(), { message: `Failed to parse email content: ${error.message}`, }); } const normalizeAddresses = (addresses) => { if (!addresses) return []; return Array.isArray(addresses) ? addresses : [addresses]; }; const emailData = { uid: typeof message.uid === 'string' ? parseInt(message.uid, 10) : message.uid, subject: parsed.subject || '', from: parsed.from || {}, to: normalizeAddresses(parsed.to), cc: normalizeAddresses(parsed.cc), bcc: normalizeAddresses(parsed.bcc), date: parsed.date || null, text: parsed.text || '', html: parsed.html || '', attachments: [], flags: message.flags || new Set(), seen: ((_a = message.flags) === null || _a === void 0 ? void 0 : _a.has('\\Seen')) || false, size: message.size }; console.log('Email data prepared for return:', { uid: emailData.uid, subject: emailData.subject, from: emailData.from, textLength: ((_b = emailData.text) === null || _b === void 0 ? void 0 : _b.length) || 0, htmlLength: ((_c = emailData.html) === null || _c === void 0 ? void 0 : _c.length) || 0, flagsCount: emailData.flags.size }); return emailData; } } exports.GetEmailOperation = GetEmailOperation; //# sourceMappingURL=getEmail.js.map