mirror of
https://github.com/mgerb/mywebsite
synced 2026-01-12 02:42:48 +00:00
updated bunch of file paths and changed the way posts are loaded
This commit is contained in:
390
node_modules/nodemailer/src/compiler.js
generated
vendored
390
node_modules/nodemailer/src/compiler.js
generated
vendored
@@ -1,390 +0,0 @@
|
||||
'use strict';
|
||||
|
||||
var BuildMail = require('buildmail');
|
||||
var libmime = require('libmime');
|
||||
|
||||
module.exports = Compiler;
|
||||
|
||||
/**
|
||||
* Creates the object for composing a BuildMail instance out from the mail options
|
||||
*
|
||||
* @constructor
|
||||
* @param {Object} mail Mail options
|
||||
*/
|
||||
function Compiler(mail) {
|
||||
this.mail = mail || {};
|
||||
this.message = false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Builds BuildMail instance
|
||||
*/
|
||||
Compiler.prototype.compile = function() {
|
||||
this._alternatives = this._getAlternatives();
|
||||
this._htmlNode = this._alternatives.filter(function(alternative) {
|
||||
return /^text\/html\b/i.test(alternative.contentType);
|
||||
}).pop();
|
||||
this._attachments = this._getAttachments(!!this._htmlNode);
|
||||
|
||||
this._useRelated = !!(this._htmlNode && this._attachments.related.length);
|
||||
this._useAlternative = this._alternatives.length > 1;
|
||||
this._useMixed = this._attachments.attached.length > 1 || (this._alternatives.length && this._attachments.attached.length === 1);
|
||||
|
||||
// Compose MIME tree
|
||||
if (this._useMixed) {
|
||||
this.message = this._createMixed();
|
||||
} else if (this._useAlternative) {
|
||||
this.message = this._createAlternative();
|
||||
} else if (this._useRelated) {
|
||||
this.message = this._createRelated();
|
||||
} else {
|
||||
this.message = this._createContentNode(false, [].concat(this._alternatives || []).concat(this._attachments.attached || []).shift() || {
|
||||
contentType: 'text/plain',
|
||||
content: ''
|
||||
});
|
||||
}
|
||||
|
||||
// Add headers to the root node
|
||||
[
|
||||
'from',
|
||||
'sender',
|
||||
'to',
|
||||
'cc',
|
||||
'bcc',
|
||||
'reply-to',
|
||||
'in-reply-to',
|
||||
'references',
|
||||
'subject',
|
||||
'message-id',
|
||||
'date'
|
||||
].forEach(function(header) {
|
||||
var key = header.replace(/-(\w)/g, function(o, c) {
|
||||
return c.toUpperCase();
|
||||
});
|
||||
if (this.mail[key]) {
|
||||
this.message.setHeader(header, this.mail[key]);
|
||||
}
|
||||
}.bind(this));
|
||||
|
||||
// Add custom headers
|
||||
if (this.mail.headers) {
|
||||
this.message.addHeader(this.mail.headers);
|
||||
}
|
||||
|
||||
// Sets custom envelope
|
||||
if (this.mail.envelope) {
|
||||
this.message.setEnvelope(this.mail.envelope);
|
||||
}
|
||||
|
||||
return this.message;
|
||||
};
|
||||
|
||||
/**
|
||||
* Builds multipart/mixed node. It should always contain different type of elements on the same level
|
||||
* eg. text + attachments
|
||||
*
|
||||
* @param {Object} parentNode Parent for this note. If it does not exist, a root node is created
|
||||
* @returns {Object} BuildMail node element
|
||||
*/
|
||||
Compiler.prototype._createMixed = function(parentNode) {
|
||||
var node;
|
||||
|
||||
if (!parentNode) {
|
||||
node = new BuildMail('multipart/mixed');
|
||||
} else {
|
||||
node = parentNode.createChild('multipart/mixed');
|
||||
}
|
||||
|
||||
if (this._useAlternative) {
|
||||
this._createAlternative(node);
|
||||
} else if (this._useRelated) {
|
||||
this._createRelated(node);
|
||||
}
|
||||
|
||||
[].concat(!this._useAlternative && this._alternatives || []).concat(this._attachments.attached || []).forEach(function(element) {
|
||||
// if the element is a html node from related subpart then ignore it
|
||||
if (!this._useRelated || element !== this._htmlNode) {
|
||||
this._createContentNode(node, element);
|
||||
}
|
||||
}.bind(this));
|
||||
|
||||
return node;
|
||||
};
|
||||
|
||||
/**
|
||||
* Builds multipart/alternative node. It should always contain same type of elements on the same level
|
||||
* eg. text + html view of the same data
|
||||
*
|
||||
* @param {Object} parentNode Parent for this note. If it does not exist, a root node is created
|
||||
* @returns {Object} BuildMail node element
|
||||
*/
|
||||
Compiler.prototype._createAlternative = function(parentNode) {
|
||||
var node;
|
||||
|
||||
if (!parentNode) {
|
||||
node = new BuildMail('multipart/alternative');
|
||||
} else {
|
||||
node = parentNode.createChild('multipart/alternative');
|
||||
}
|
||||
|
||||
this._alternatives.forEach(function(alternative) {
|
||||
if (this._useRelated && this._htmlNode === alternative) {
|
||||
this._createRelated(node);
|
||||
} else {
|
||||
this._createContentNode(node, alternative);
|
||||
}
|
||||
}.bind(this));
|
||||
|
||||
return node;
|
||||
};
|
||||
|
||||
/**
|
||||
* Builds multipart/related node. It should always contain html node with related attachments
|
||||
*
|
||||
* @param {Object} parentNode Parent for this note. If it does not exist, a root node is created
|
||||
* @returns {Object} BuildMail node element
|
||||
*/
|
||||
Compiler.prototype._createRelated = function(parentNode) {
|
||||
var node;
|
||||
|
||||
if (!parentNode) {
|
||||
node = new BuildMail('multipart/related; type="text/html"');
|
||||
} else {
|
||||
node = parentNode.createChild('multipart/related; type="text/html"');
|
||||
}
|
||||
|
||||
this._createContentNode(node, this._htmlNode);
|
||||
|
||||
this._attachments.related.forEach(function(alternative) {
|
||||
this._createContentNode(node, alternative);
|
||||
}.bind(this));
|
||||
|
||||
return node;
|
||||
};
|
||||
|
||||
/**
|
||||
* Creates a regular node with contents
|
||||
*
|
||||
* @param {Object} parentNode Parent for this note. If it does not exist, a root node is created
|
||||
* @param {Object} element Node data
|
||||
* @returns {Object} BuildMail node element
|
||||
*/
|
||||
Compiler.prototype._createContentNode = function(parentNode, element) {
|
||||
element = element || {};
|
||||
element.content = element.content || '';
|
||||
|
||||
var node;
|
||||
var encoding = (element.encoding || 'utf8')
|
||||
.toString()
|
||||
.toLowerCase()
|
||||
.replace(/[-_\s]/g, '');
|
||||
|
||||
if (!parentNode) {
|
||||
node = new BuildMail(element.contentType, {
|
||||
filename: element.filename
|
||||
});
|
||||
} else {
|
||||
node = parentNode.createChild(element.contentType, {
|
||||
filename: element.filename
|
||||
});
|
||||
}
|
||||
|
||||
if (element.cid) {
|
||||
node.setHeader('Content-Id', '<' + element.cid.replace(/[<>]/g, '') + '>');
|
||||
}
|
||||
|
||||
if (this.mail.encoding && /^text\//i.test(element.contentType)) {
|
||||
node.setHeader('Content-Transfer-Encoding', this.mail.encoding);
|
||||
}
|
||||
|
||||
if (!/^text\//i.test(element.contentType) || element.contentDisposition) {
|
||||
node.setHeader('Content-Disposition', element.contentDisposition || 'attachment');
|
||||
}
|
||||
|
||||
if (typeof element.content === 'string' && ['utf8', 'usascii', 'ascii'].indexOf(encoding) < 0) {
|
||||
element.content = new Buffer(element.content, encoding);
|
||||
}
|
||||
|
||||
node.setContent(element.content);
|
||||
|
||||
return node;
|
||||
};
|
||||
|
||||
/**
|
||||
* List all attachments. Resulting attachment objects can be used as input for BuildMail nodes
|
||||
*
|
||||
* @param {Boolean} findRelated If true separate related attachments from attached ones
|
||||
* @returns {Object} An object of arrays (`related` and `attached`)
|
||||
*/
|
||||
Compiler.prototype._getAttachments = function(findRelated) {
|
||||
var attachments = [].concat(this.mail.attachments || []).map(function(attachment, i) {
|
||||
var data;
|
||||
|
||||
if (/^data:/i.test(attachment.path || attachment.href)) {
|
||||
attachment = this._processDataUrl(attachment);
|
||||
}
|
||||
|
||||
data = {
|
||||
contentType: attachment.contentType ||
|
||||
libmime.detectMimeType(attachment.filename || attachment.path || attachment.href || 'bin'),
|
||||
contentDisposition: attachment.contentDisposition || 'attachment'
|
||||
};
|
||||
|
||||
if (attachment.filename) {
|
||||
data.filename = attachment.filename;
|
||||
} else {
|
||||
data.filename = (attachment.path || attachment.href || '').split('/').pop() || 'attachment-' + (i + 1);
|
||||
if (data.filename.indexOf('.') < 0) {
|
||||
data.filename += '.' + libmime.detectExtension(data.contentType);
|
||||
}
|
||||
}
|
||||
|
||||
if (/^https?:\/\//i.test(attachment.path)) {
|
||||
attachment.href = attachment.path;
|
||||
attachment.path = undefined;
|
||||
}
|
||||
|
||||
if (attachment.cid) {
|
||||
data.cid = attachment.cid;
|
||||
}
|
||||
|
||||
if (attachment.path) {
|
||||
data.content = {
|
||||
path: attachment.path
|
||||
};
|
||||
} else if (attachment.href) {
|
||||
data.content = {
|
||||
href: attachment.href
|
||||
};
|
||||
} else {
|
||||
data.content = attachment.content || '';
|
||||
}
|
||||
|
||||
if (attachment.encoding) {
|
||||
data.encoding = attachment.encoding;
|
||||
}
|
||||
|
||||
return data;
|
||||
}.bind(this));
|
||||
|
||||
if (!findRelated) {
|
||||
return {
|
||||
attached: attachments,
|
||||
related: []
|
||||
};
|
||||
} else {
|
||||
return {
|
||||
attached: attachments.filter(function(attachment) {
|
||||
return !attachment.cid;
|
||||
}),
|
||||
related: attachments.filter(function(attachment) {
|
||||
return !!attachment.cid;
|
||||
})
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* List alternatives. Resulting objects can be used as input for BuildMail nodes
|
||||
*
|
||||
* @returns {Array} An array of alternative elements. Includes the `text` and `html` values as well
|
||||
*/
|
||||
Compiler.prototype._getAlternatives = function() {
|
||||
var alternatives = [],
|
||||
text, html;
|
||||
|
||||
if (this.mail.text) {
|
||||
if (typeof this.mail.text === 'object' && this.mail.text.content || this.mail.text.path || this.mail.text.href) {
|
||||
text = this.mail.text;
|
||||
} else {
|
||||
text = {
|
||||
content: this.mail.text
|
||||
};
|
||||
}
|
||||
text.contentType = 'text/plain' + (!text.encoding && libmime.isPlainText(text.content) ? '' : '; charset=utf-8');
|
||||
}
|
||||
|
||||
if (this.mail.html) {
|
||||
if (typeof this.mail.html === 'object' && this.mail.html.content || this.mail.html.path || this.mail.html.href) {
|
||||
html = this.mail.html;
|
||||
} else {
|
||||
html = {
|
||||
content: this.mail.html
|
||||
};
|
||||
}
|
||||
html.contentType = 'text/html' + (!html.encoding && libmime.isPlainText(html.content) ? '' : '; charset=utf-8');
|
||||
}
|
||||
|
||||
[].concat(text || []).concat(html || []).concat(this.mail.alternatives || []).forEach(function(alternative) {
|
||||
var data;
|
||||
|
||||
if (/^data:/i.test(alternative.path || alternative.href)) {
|
||||
alternative = this._processDataUrl(alternative);
|
||||
}
|
||||
|
||||
data = {
|
||||
contentType: alternative.contentType ||
|
||||
libmime.detectMimeType(alternative.filename || alternative.path || alternative.href || 'txt')
|
||||
};
|
||||
|
||||
if (alternative.filename) {
|
||||
data.filename = alternative.filename;
|
||||
}
|
||||
|
||||
if (/^https?:\/\//i.test(alternative.path)) {
|
||||
alternative.href = alternative.path;
|
||||
alternative.path = undefined;
|
||||
}
|
||||
|
||||
if (alternative.path) {
|
||||
data.content = {
|
||||
path: alternative.path
|
||||
};
|
||||
} else if (alternative.href) {
|
||||
data.content = {
|
||||
href: alternative.href
|
||||
};
|
||||
} else {
|
||||
data.content = alternative.content || '';
|
||||
}
|
||||
|
||||
if (alternative.encoding) {
|
||||
data.encoding = alternative.encoding;
|
||||
}
|
||||
|
||||
alternatives.push(data);
|
||||
}.bind(this));
|
||||
|
||||
return alternatives;
|
||||
};
|
||||
|
||||
/**
|
||||
* Parses data uri and converts it to a Buffer
|
||||
*
|
||||
* @param {Object} element Content element
|
||||
* @return {Object} Parsed element
|
||||
*/
|
||||
Compiler.prototype._processDataUrl = function(element) {
|
||||
var parts = (element.path || element.href).match(/^data:((?:[^;]*;)*(?:[^,]*)),(.*)$/i);
|
||||
if (!parts) {
|
||||
return element;
|
||||
}
|
||||
|
||||
element.content = /\bbase64$/i.test(parts[1]) ? new Buffer(parts[2], 'base64') : new Buffer(decodeURIComponent(parts[2]));
|
||||
|
||||
if ('path' in element) {
|
||||
element.path = false;
|
||||
}
|
||||
|
||||
if ('href' in element) {
|
||||
element.href = false;
|
||||
}
|
||||
|
||||
parts[1].split(';').forEach(function(item) {
|
||||
if (/^\w+\/[^\/]+$/i.test(item)) {
|
||||
element.contentType = element.contentType || item.toLowerCase();
|
||||
}
|
||||
});
|
||||
|
||||
return element;
|
||||
};
|
||||
145
node_modules/nodemailer/src/nodemailer.js
generated
vendored
145
node_modules/nodemailer/src/nodemailer.js
generated
vendored
@@ -1,25 +1,29 @@
|
||||
'use strict';
|
||||
|
||||
var Compiler = require('./compiler');
|
||||
var mailcomposer = require('mailcomposer');
|
||||
var EventEmitter = require('events').EventEmitter;
|
||||
var util = require('util');
|
||||
var directTransport = require('nodemailer-direct-transport');
|
||||
var smtpTransport = require('nodemailer-smtp-transport');
|
||||
var packageData = require('../package.json');
|
||||
var fs = require('fs');
|
||||
var hyperquest = require('hyperquest');
|
||||
var needle = require('needle');
|
||||
var PassThrough = require('stream').PassThrough;
|
||||
|
||||
// Export createTransport method
|
||||
module.exports.createTransport = function(transporter) {
|
||||
module.exports.createTransport = function (transporter, defaults) {
|
||||
transporter = transporter || directTransport({
|
||||
debug: true
|
||||
});
|
||||
|
||||
if (typeof transporter === 'object' && typeof transporter.send !== 'function') {
|
||||
if (
|
||||
(typeof transporter === 'object' && typeof transporter.send !== 'function') ||
|
||||
(typeof transporter === 'string' && /^smtps?:/i.test(transporter))
|
||||
) {
|
||||
transporter = smtpTransport(transporter);
|
||||
}
|
||||
|
||||
return new Nodemailer(transporter);
|
||||
return new Nodemailer(transporter, defaults);
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -28,9 +32,11 @@ module.exports.createTransport = function(transporter) {
|
||||
* @constructor
|
||||
* @param {Object} transporter Transport object instance to pass the mails to
|
||||
*/
|
||||
function Nodemailer(transporter) {
|
||||
function Nodemailer(transporter, defaults) {
|
||||
EventEmitter.call(this);
|
||||
|
||||
this._defaults = defaults || {};
|
||||
|
||||
this._plugins = {
|
||||
compile: [],
|
||||
stream: []
|
||||
@@ -45,7 +51,7 @@ function Nodemailer(transporter) {
|
||||
}
|
||||
util.inherits(Nodemailer, EventEmitter);
|
||||
|
||||
Nodemailer.prototype.use = function(step, plugin) {
|
||||
Nodemailer.prototype.use = function (step, plugin) {
|
||||
step = (step || '').toString();
|
||||
if (!this._plugins.hasOwnProperty(step)) {
|
||||
this._plugins[step] = [plugin];
|
||||
@@ -57,7 +63,7 @@ Nodemailer.prototype.use = function(step, plugin) {
|
||||
/**
|
||||
* Optional close method, passed to the underlying transport object
|
||||
*/
|
||||
Nodemailer.prototype.close = function( /* possible arguments */ ) {
|
||||
Nodemailer.prototype.close = function ( /* possible arguments */ ) {
|
||||
var args = Array.prototype.slice.call(arguments);
|
||||
if (typeof this.transporter.close === 'function') {
|
||||
this.transporter.close.apply(this.transporter, args);
|
||||
@@ -70,10 +76,32 @@ Nodemailer.prototype.close = function( /* possible arguments */ ) {
|
||||
* @param {Object} data E-data description
|
||||
* @param {Function} callback Callback to run once the sending succeeded or failed
|
||||
*/
|
||||
Nodemailer.prototype.sendMail = function(data, callback) {
|
||||
Nodemailer.prototype.sendMail = function (data, callback) {
|
||||
var promise;
|
||||
|
||||
if (!callback && typeof Promise === 'function') {
|
||||
promise = new Promise(function (resolve, reject) {
|
||||
callback = callbackPromise(resolve, reject);
|
||||
});
|
||||
}
|
||||
|
||||
data = data || {};
|
||||
data.headers = data.headers || {};
|
||||
callback = callback || function() {};
|
||||
callback = callback || function () {};
|
||||
|
||||
// apply defaults
|
||||
Object.keys(this._defaults).forEach(function (key) {
|
||||
if (!(key in data)) {
|
||||
data[key] = this._defaults[key];
|
||||
} else if (key === 'headers') {
|
||||
// headers is a special case. Allow setting individual default headers
|
||||
Object.keys(this._defaults.headers || {}).forEach(function (key) {
|
||||
if (!(key in data.headers)) {
|
||||
data.headers[key] = this._defaults.headers[key];
|
||||
}
|
||||
}.bind(this));
|
||||
}
|
||||
}.bind(this));
|
||||
|
||||
var mail = {
|
||||
data: data,
|
||||
@@ -82,27 +110,46 @@ Nodemailer.prototype.sendMail = function(data, callback) {
|
||||
};
|
||||
|
||||
if (typeof this.transporter === 'string') {
|
||||
return callback(new Error('Unsupported configuration, downgrade Nodemailer to v0.7.1 or see the migration guide https://github.com/andris9/Nodemailer#migration-guide'));
|
||||
return callback(new Error('Unsupported configuration, downgrade Nodemailer to v0.7.1 to use it'));
|
||||
}
|
||||
|
||||
this._processPlugins('compile', mail, function(err) {
|
||||
this._processPlugins('compile', mail, function (err) {
|
||||
if (err) {
|
||||
return callback(err);
|
||||
}
|
||||
|
||||
mail.message = new Compiler(mail.data).compile();
|
||||
mail.message = mailcomposer(mail.data);
|
||||
|
||||
if (mail.data.xMailer !== false) {
|
||||
mail.message.setHeader('X-Mailer', mail.data.xMailer || this._getVersionString());
|
||||
}
|
||||
|
||||
this._processPlugins('stream', mail, function(err) {
|
||||
if (mail.data.priority) {
|
||||
switch ((mail.data.priority || '').toString().toLowerCase()) {
|
||||
case 'high':
|
||||
mail.message.setHeader('X-Priority', '1 (Highest)');
|
||||
mail.message.setHeader('X-MSMail-Priority', 'High');
|
||||
mail.message.setHeader('Importance', 'High');
|
||||
break;
|
||||
case 'low':
|
||||
mail.message.setHeader('X-Priority', '5 (Lowest)');
|
||||
mail.message.setHeader('X-MSMail-Priority', 'Low');
|
||||
mail.message.setHeader('Importance', 'Low');
|
||||
break;
|
||||
default:
|
||||
// do not add anything, since all messages are 'Normal' by default
|
||||
}
|
||||
}
|
||||
|
||||
this._processPlugins('stream', mail, function (err) {
|
||||
if (err) {
|
||||
return callback(err);
|
||||
}
|
||||
this.transporter.send(mail, callback);
|
||||
}.bind(this));
|
||||
}.bind(this));
|
||||
|
||||
return promise;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -118,8 +165,17 @@ Nodemailer.prototype.sendMail = function(data, callback) {
|
||||
* @param {String|Number} key Property name or an Array index
|
||||
* @param {Function} callback Callback function with (err, value)
|
||||
*/
|
||||
Nodemailer.prototype.resolveContent = function(data, key, callback) {
|
||||
Nodemailer.prototype.resolveContent = function (data, key, callback) {
|
||||
var promise;
|
||||
|
||||
if (!callback && typeof Promise === 'function') {
|
||||
promise = new Promise(function (resolve, reject) {
|
||||
callback = callbackPromise(resolve, reject);
|
||||
});
|
||||
}
|
||||
|
||||
var content = data && data[key] && data[key].content || data[key];
|
||||
var contentStream;
|
||||
var encoding = (typeof data[key] === 'object' && data[key].encoding || 'utf8')
|
||||
.toString()
|
||||
.toLowerCase()
|
||||
@@ -131,7 +187,7 @@ Nodemailer.prototype.resolveContent = function(data, key, callback) {
|
||||
|
||||
if (typeof content === 'object') {
|
||||
if (typeof content.pipe === 'function') {
|
||||
return this._resolveStream(content, function(err, value) {
|
||||
return this._resolveStream(content, function (err, value) {
|
||||
if (err) {
|
||||
return callback(err);
|
||||
}
|
||||
@@ -141,7 +197,21 @@ Nodemailer.prototype.resolveContent = function(data, key, callback) {
|
||||
callback(null, value);
|
||||
}.bind(this));
|
||||
} else if (/^https?:\/\//i.test(content.path || content.href)) {
|
||||
return this._resolveStream(hyperquest(content.path || content.href), callback);
|
||||
contentStream = new PassThrough();
|
||||
needle.get(content.path || content.href, {
|
||||
decode_response: false,
|
||||
parse_response: false,
|
||||
compressed: true,
|
||||
follow_max: 5
|
||||
}).on('end', function (err) {
|
||||
if (err) {
|
||||
contentStream.emit('error', err);
|
||||
}
|
||||
contentStream.emit('end');
|
||||
}).pipe(contentStream, {
|
||||
end: false
|
||||
});
|
||||
return this._resolveStream(contentStream, callback);
|
||||
} else if (/^data:/i.test(content.path || content.href)) {
|
||||
var parts = (content.path || content.href).match(/^data:((?:[^;]*;)*(?:[^,]*)),(.*)$/i);
|
||||
if (!parts) {
|
||||
@@ -158,7 +228,9 @@ Nodemailer.prototype.resolveContent = function(data, key, callback) {
|
||||
}
|
||||
|
||||
// default action, return as is
|
||||
callback(null, content);
|
||||
setImmediate(callback.bind(null, null, content));
|
||||
|
||||
return promise;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -167,12 +239,12 @@ Nodemailer.prototype.resolveContent = function(data, key, callback) {
|
||||
* @param {Object} stream Readable stream
|
||||
* @param {Function} callback Callback function with (err, value)
|
||||
*/
|
||||
Nodemailer.prototype._resolveStream = function(stream, callback) {
|
||||
Nodemailer.prototype._resolveStream = function (stream, callback) {
|
||||
var responded = false;
|
||||
var chunks = [];
|
||||
var chunklen = 0;
|
||||
|
||||
stream.on('error', function(err) {
|
||||
stream.on('error', function (err) {
|
||||
if (responded) {
|
||||
return;
|
||||
}
|
||||
@@ -181,14 +253,14 @@ Nodemailer.prototype._resolveStream = function(stream, callback) {
|
||||
callback(err);
|
||||
});
|
||||
|
||||
stream.on('data', function(chunk) {
|
||||
stream.on('data', function (chunk) {
|
||||
if (chunk && chunk.length) {
|
||||
chunks.push(chunk);
|
||||
chunklen += chunk.length;
|
||||
}
|
||||
});
|
||||
|
||||
stream.on('end', function() {
|
||||
stream.on('end', function () {
|
||||
if (responded) {
|
||||
return;
|
||||
}
|
||||
@@ -205,7 +277,7 @@ Nodemailer.prototype._resolveStream = function(stream, callback) {
|
||||
});
|
||||
};
|
||||
|
||||
Nodemailer.prototype._getVersionString = function() {
|
||||
Nodemailer.prototype._getVersionString = function () {
|
||||
return util.format(
|
||||
'%s (%s; +%s; %s/%s)',
|
||||
packageData.name,
|
||||
@@ -216,7 +288,7 @@ Nodemailer.prototype._getVersionString = function() {
|
||||
);
|
||||
};
|
||||
|
||||
Nodemailer.prototype._processPlugins = function(step, mail, callback) {
|
||||
Nodemailer.prototype._processPlugins = function (step, mail, callback) {
|
||||
step = (step || '').toString();
|
||||
|
||||
if (!this._plugins.hasOwnProperty(step) || !this._plugins[step].length) {
|
||||
@@ -225,12 +297,12 @@ Nodemailer.prototype._processPlugins = function(step, mail, callback) {
|
||||
|
||||
var plugins = Array.prototype.slice.call(this._plugins[step]);
|
||||
|
||||
var processPlugins = function() {
|
||||
var processPlugins = function () {
|
||||
if (!plugins.length) {
|
||||
return callback(null);
|
||||
}
|
||||
var plugin = plugins.shift();
|
||||
plugin(mail, function(err) {
|
||||
plugin(mail, function (err) {
|
||||
if (err) {
|
||||
return callback(err);
|
||||
}
|
||||
@@ -239,4 +311,23 @@ Nodemailer.prototype._processPlugins = function(step, mail, callback) {
|
||||
}.bind(this);
|
||||
|
||||
processPlugins();
|
||||
};
|
||||
};
|
||||
|
||||
/**
|
||||
* Wrapper for creating a callback than either resolves or rejects a promise
|
||||
* based on input
|
||||
*
|
||||
* @param {Function} resolve Function to run if callback is called
|
||||
* @param {Function} reject Function to run if callback ends with an error
|
||||
*/
|
||||
function callbackPromise(resolve, reject) {
|
||||
return function () {
|
||||
var args = Array.prototype.slice.call(arguments);
|
||||
var err = args.shift();
|
||||
if (err) {
|
||||
reject(err);
|
||||
} else {
|
||||
resolve.apply(null, args);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user