UNPKG

pip-services-email-node

Version:
202 lines 8.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); let _ = require('lodash'); let async = require('async'); let mustache = require('mustache'); const pip_services3_commons_node_1 = require("pip-services3-commons-node"); const pip_services3_components_node_1 = require("pip-services3-components-node"); const pip_services3_components_node_2 = require("pip-services3-components-node"); const pip_services3_commons_node_2 = require("pip-services3-commons-node"); const EmailCommandSet_1 = require("./EmailCommandSet"); class EmailController { constructor() { this._parameters = new pip_services3_commons_node_1.ConfigParams(); this._connectionResolver = new pip_services3_components_node_1.ConnectionResolver(); this._credentialResolver = new pip_services3_components_node_2.CredentialResolver(); this._disabled = false; } configure(config) { this._config = config.setDefaults(EmailController._defaultConfig); this._messageFrom = config.getAsStringWithDefault("message.from", this._messageFrom); this._messageCc = config.getAsStringWithDefault("message.cc", this._messageCc); this._messageBcc = config.getAsStringWithDefault("message.bcc", this._messageBcc); this._messageReplyTo = config.getAsStringWithDefault("message.reply_to", this._messageReplyTo); this._parameters = config.getSection("parameters"); this._disabled = config.getAsBooleanWithDefault("options.disabled", this._disabled); this._connectionResolver.configure(config); this._credentialResolver.configure(config); } setReferences(references) { this._connectionResolver.setReferences(references); this._credentialResolver.setReferences(references); } getCommandSet() { if (this._commandSet == null) this._commandSet = new EmailCommandSet_1.EmailCommandSet(this); return this._commandSet; } isOpen() { return this._transport != null; } open(correlationId, callback) { if (this._transport) { callback(null); return; } async.series([ (callback) => { this._connectionResolver.resolve(correlationId, (err, connection) => { this._connection = connection; callback(err); }); }, (callback) => { this._credentialResolver.lookup(correlationId, (err, credential) => { this._credential = credential; callback(err); }); }, (callback) => { if (this._connection != null) { let nodemailer = require('nodemailer'); let params = { host: this._connection.getHost(), secure: this._connection.getAsBoolean('ssl') || this._connection.getAsBoolean('secure') || this._connection.getAsBoolean('secure_connection'), port: this._connection.getPort(), }; if (this._credential != null) { params.auth = { type: this._credential.getAsString("type"), user: this._credential.getUsername(), pass: this._credential.getPassword() }; } this._transport = nodemailer.createTransport(params); } callback(); } ], callback); } close(correlationId, callback) { this._transport = null; callback(null); } getLanguageTemplate(value, language = 'en') { if (value == null) return value; if (!_.isObject(value)) return value; // Set default language language = language || "en"; // Get template for specified language let template = value[language]; // Get template for default language if (template == null) template = value["en"]; return "" + template; } renderTemplate(value, parameters, language = 'en') { let template = this.getLanguageTemplate(value, language); return template ? mustache.render(template, parameters) : null; } sendMessage(correlationId, message, parameters, callback) { // Silentry skip if disabled if (this._disabled) { if (callback) callback(null); return; } // Skip processing if email is disabled or message has no destination if (this._transport == null || message.to == null) { let err = new pip_services3_commons_node_2.BadRequestException(correlationId, 'EMAIL_DISABLED', 'emails disabled, or email recipient not set'); if (callback) callback(err); return; } try { parameters = this._parameters.override(parameters); let subject = this.renderTemplate(message.subject, parameters); let text = this.renderTemplate(message.text, parameters); let html = this.renderTemplate(message.html, parameters); let envelop = { from: message.from || this._messageFrom, cc: message.cc || this._messageCc, bcc: message.bcc || this._messageBcc, replyTo: message.reply_to || this._messageReplyTo, to: message.to, subject: subject, text: text, html: html }; this._transport.sendMail(envelop, callback); } catch (ex) { callback(ex); } } makeRecipientParameters(recipient, parameters) { parameters = this._parameters.override(parameters); parameters.append(recipient); return parameters; } sendMessageToRecipient(correlationId, recipient, message, parameters, callback) { // Silentry skip if disabled if (this._disabled) { if (callback) callback(null); return; } // Skip processing if email is disabled if (this._transport == null || recipient == null || recipient.email == null) { let err = new pip_services3_commons_node_2.BadRequestException(correlationId, 'EMAIL_DISABLED', 'emails disabled, or recipients email not set'); if (callback) callback(err); return; } try { let recParams = this.makeRecipientParameters(recipient, parameters); let recLanguage = recipient.language; let subject = this.renderTemplate(message.subject, recParams, recLanguage); let text = this.renderTemplate(message.text, recParams, recLanguage); let html = this.renderTemplate(message.html, recParams, recLanguage); let envelop = { from: message.from || this._messageFrom, cc: message.cc || this._messageCc, bcc: message.bcc || this._messageBcc, replyTo: message.reply_to || this._messageReplyTo, to: recipient.email, subject: subject, text: text, html: html }; this._transport.sendMail(envelop, callback); } catch (ex) { callback(ex); } } sendMessageToRecipients(correlationId, recipients, message, parameters, callback) { // Silentry skip if disabled if (this._disabled) { if (callback) callback(null); return; } // Skip processing if email is disabled if (this._transport == null || recipients == null || recipients.length == 0) { let err = new pip_services3_commons_node_2.BadRequestException(correlationId, 'EMAIL_DISABLED', 'emails disabled, or no recipients sent'); if (callback) callback(err); return; } // Send email separately to each user async.each(recipients, (recipient, callback) => { this.sendMessageToRecipient(correlationId, recipient, message, parameters, callback); }, callback); } } exports.EmailController = EmailController; EmailController._defaultConfig = pip_services3_commons_node_1.ConfigParams.fromTuples('message.from', null, 'message.cc', null, 'message.bcc', null, 'message.reply_to', null); //# sourceMappingURL=EmailController.js.map