create-emails
Version:
A Node.js API to create email accounts using cPanel’s API. This package automates email account creation, making it useful for hosting services, SaaS applications, and businesses that need email provisioning.
220 lines (219 loc) • 10.4 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (g && (g = 0, op[0] && (_ = 0)), _) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.fetchEmail = exports.listEmailsCpanel = exports.deleteEmailCpanel = exports.createEmailCpanel = void 0;
var axios_1 = require("axios");
var Imap = require("imap");
var mailparser_1 = require("mailparser");
var createEmailCpanel = function (_a, auth_1) { return __awaiter(void 0, [_a, auth_1], void 0, function (_b, auth) {
var apiEndpoint, response, error_1;
var domain = _b.domain, email = _b.email, password = _b.password, quota = _b.quota;
return __generator(this, function (_c) {
switch (_c.label) {
case 0:
apiEndpoint = "https://".concat(auth.cpanelHost, ":2083/execute/Email/add_pop");
_c.label = 1;
case 1:
_c.trys.push([1, 3, , 4]);
return [4 /*yield*/, axios_1.default.post(apiEndpoint, { domain: domain, email: email, password: password, quota: quota || 100 }, {
auth: auth,
headers: { "Content-Type": "application/x-www-form-urlencoded" },
})];
case 2:
response = _c.sent();
return [2 /*return*/, response.data];
case 3:
error_1 = _c.sent();
throw new Error(error_1.message);
case 4: return [2 /*return*/];
}
});
}); };
exports.createEmailCpanel = createEmailCpanel;
//create to delete email
var deleteEmailCpanel = function (_a, auth_1) { return __awaiter(void 0, [_a, auth_1], void 0, function (_b, auth) {
var apiEndpoint, response, error_2;
var domain = _b.domain, email = _b.email;
return __generator(this, function (_c) {
switch (_c.label) {
case 0:
apiEndpoint = "https://".concat(auth.cpanelHost, ":2083/execute/Email/delete_pop");
_c.label = 1;
case 1:
_c.trys.push([1, 3, , 4]);
return [4 /*yield*/, axios_1.default.post(apiEndpoint, { domain: domain, email: email }, {
auth: auth,
headers: { "Content-Type": "application/x-www-form-urlencoded" },
})];
case 2:
response = _c.sent();
return [2 /*return*/, response.data];
case 3:
error_2 = _c.sent();
throw new Error(error_2.message);
case 4: return [2 /*return*/];
}
});
}); };
exports.deleteEmailCpanel = deleteEmailCpanel;
//read emails sent and resend
var listEmailsCpanel = function (_a, auth_1) { return __awaiter(void 0, [_a, auth_1], void 0, function (_b, auth) {
var apiEndpoint, response, error_3;
var domain = _b.domain;
return __generator(this, function (_c) {
switch (_c.label) {
case 0:
apiEndpoint = "https://".concat(auth.cpanelHost, ":2083/execute/Email/list_pops");
_c.label = 1;
case 1:
_c.trys.push([1, 3, , 4]);
return [4 /*yield*/, axios_1.default.post(apiEndpoint, { domain: domain }, {
auth: auth,
headers: { "Content-Type": "application/x-www-form-urlencoded" },
})];
case 2:
response = _c.sent();
return [2 /*return*/, response.data];
case 3:
error_3 = _c.sent();
throw new Error(error_3.message);
case 4: return [2 /*return*/];
}
});
}); };
exports.listEmailsCpanel = listEmailsCpanel;
//fetch email
var fetchEmail = function (_a) { return __awaiter(void 0, [_a], void 0, function (_b) {
var emails, error_4;
var domain = _b.domain, email = _b.email, password = _b.password, folder = _b.folder;
return __generator(this, function (_c) {
switch (_c.label) {
case 0:
_c.trys.push([0, 2, , 3]);
return [4 /*yield*/, fetchEmails("INBOX", {
user: "".concat(email, "@").concat(domain),
password: password,
host: domain, // Replace with your IMAP server
port: 993,
tls: true,
tlsOptions: { rejectUnauthorized: false },
})];
case 1:
emails = _c.sent();
console.log("emails", emails);
return [2 /*return*/, emails];
case 2:
error_4 = _c.sent();
throw new Error(error_4.message);
case 3: return [2 /*return*/];
}
});
}); };
exports.fetchEmail = fetchEmail;
function fetchEmails(folder, imapConfig) {
if (folder === void 0) { folder = "INBOX"; }
return new Promise(function (resolve, reject) {
var imap = new Imap(imapConfig);
var emails = [];
imap.once("ready", function () {
console.log("IMAP connection established");
imap.getBoxes(function (err, boxes) {
if (err)
console.error("Error listing folders:", err);
else
console.log("Available folders:", boxes);
});
imap.openBox(folder, true, function (err, box) {
if (err) {
reject("Error opening folder: ".concat(err));
return;
}
console.log("Folder opened:", folder);
imap.search(["ALL"], function (err, results) {
if (err) {
reject("Error searching emails: ".concat(err));
return;
}
if (!results || results.length === 0) {
console.log("No emails found");
resolve([]);
imap.end();
return;
}
console.log("Found emails:", results.length);
var f = imap.fetch(results, { bodies: "" });
f.on("message", function (msg, seqno) {
msg.on("body", function (stream, info) {
(0, mailparser_1.simpleParser)(stream, function (err, parsed) {
var _a;
if (err) {
console.error("Error parsing email:", err);
return;
}
var email = {
subject: parsed.subject,
from: (_a = parsed.from) === null || _a === void 0 ? void 0 : _a.text,
date: parsed.date,
textBody: parsed.text,
htmlBody: parsed.html,
};
console.log("Parsed email:", email);
emails.push(email);
});
});
});
f.once("error", function (err) {
reject("Fetch error: ".concat(err));
});
f.once("end", function () {
console.log("Done fetching all messages!");
imap.end();
});
});
});
});
imap.once("error", function (err) {
reject("IMAP error: ".concat(err));
});
imap.once("end", function () {
console.log("IMAP connection closed.");
resolve(emails);
});
imap.connect();
});
}