UNPKG

@pomofficial/mailgun

Version:

Mailgun API connector for the Pomegranate framework

110 lines 3.98 kB
"use strict"; /** * @file BetterMail * @author Jim Bulkowski <jim.b@paperelectron.com> * @project Mailgun * @license MIT {@link http://opensource.org/licenses/MIT} */ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 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) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const plugin_tools_1 = require("@pomegranate/plugin-tools"); const bluebird_1 = __importDefault(require("bluebird")); const mail_composer_1 = __importDefault(require("nodemailer/lib/mail-composer")); const mailgun_js_1 = __importDefault(require("mailgun-js")); class BetterMail { constructor(options, sendMail) { this.sendMail = sendMail; this.mg = mailgun_js_1.default({ apiKey: options.apiKey, domain: options.domain }); this.senderName = options.senderName; this.senderAddress = options.senderAddress; this.sender = bluebird_1.default.promisifyAll(this.mg.messages()); } compose(data) { let opts = { from: { name: this.senderName, address: this.senderAddress }, to: data.address, subject: data.subject, text: data.text, html: data.html }; let mc = new mail_composer_1.default(opts); return new Promise((resolve, reject) => { mc.compile().build((err, message) => { if (err) { reject(err); } resolve(message); }); }); } send(payload) { return this.compose(payload) .then((composedEmail) => { if (this.sendMail) { return this.sender.sendMimeAsync({ to: payload.address, message: composedEmail.toString() }); } console.log(payload); console.log('**********************************************************'); console.log(payload.text); console.log('**********************************************************'); return true; }); } } exports.BetterMail = BetterMail; class MailerCache { constructor() { this.senders = new Map(); } add(key, item) { this.senders.set(key, item); } use(key) { return this.senders.get(key); } } exports.BetterMailPlugin = plugin_tools_1.CreatePlugin('anything') .configuration({ name: 'BetterMail', injectableParam: 'BetterMail', }) .variables({ accounts: [ { param: 'tnm', apiKey: 'asdfghjkls', domain: 'example.com', senderName: '', senderAddress: '' } ], sendMail: true }) .hooks({ load: (Injector, PluginVariables, PluginFiles, PluginLogger, PluginLateError, RabbitMQ, PluginStore) => __awaiter(this, void 0, void 0, function* () { let mc = new MailerCache(); let sendMail = PluginVariables.sendMail; if (!sendMail) { PluginLogger.warn('BetterMail is running in dev mode, emails will not be sent.'); } PluginVariables.accounts.reduce((acc, item) => { mc.add(item.param, new BetterMail(item, sendMail)); return acc; }, mc); return mc; }) }); //# sourceMappingURL=BetterMail.js.map