@pomofficial/mailgun
Version:
Mailgun API connector for the Pomegranate framework
110 lines • 3.98 kB
JavaScript
;
/**
* @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