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
JavaScript
;
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