From 158c48fc75d0f86e643095320ae7b899485b5400 Mon Sep 17 00:00:00 2001 From: Justin Ross Date: Wed, 28 Feb 2018 23:43:11 -0500 Subject: [PATCH] Fixed `gulp-util` deprecations - Replaced `gulp-util.log` with `fancy-log` - Replaced `gulp-util.colors` with `ansi-colors` - Replaced `underscore` with `flat-options` - Added check if `options.to` is a single email or array of emails - Removed `_subjectFromFilename`; use `basename` if subject not provided - Removed some extraneous files - Updated README --- README.md | 38 +++++++++++++++++------------------ gulpfile.js | 27 ++++++++++--------------- index.js | 42 ++++++++++++++------------------------- package.json | 18 +++++++++-------- test/1.html | 1 - test/2.html | 1 - test/i-love-you.html | 1 - test/mail-info.example.js | 16 --------------- test/message.html | 11 ++++++++++ test/smtp-config.js | 16 +++++++++++++++ 10 files changed, 82 insertions(+), 89 deletions(-) delete mode 100644 test/1.html delete mode 100644 test/2.html delete mode 100644 test/i-love-you.html delete mode 100644 test/mail-info.example.js create mode 100644 test/message.html create mode 100644 test/smtp-config.js diff --git a/README.md b/README.md index d37a69c..353cd86 100644 --- a/README.md +++ b/README.md @@ -22,27 +22,27 @@ npm install --save-dev gulp-mail `gulp-mail` uses Nodemailer v0.7.1, which has been deprecated for some time. It is, however, simple and stable. Available options for `gulp-mail` are: ##### options.smtp -Type: `Object` +Type: `Object` Contains required SMTP configuration values. (See the example below.) ##### options.to -Type: `String|Array` +Type: `String|Array` A string or array containing one or more than one recipient address, respectively. ##### options.from -Type: `String` +Type: `String` The display name for the sender. ##### options.subject -Type: `String` +Type: `String` The email subject line. If not provided, a default subject line is generated from the source filename as `[TEST] path.basename`. ##### options.html -Type: `String` +Type: `String` The HTML body of the email. If not provided, the source file becomes the message body. ##### options.text -Type: `String` +Type: `String` The plaintext body of the email. If not provided, Nodemailer generates this based on the source file. ### Example @@ -53,25 +53,25 @@ Currently, `gulp-mail` takes in piped streams and sends emails via SMTP only. var gulp = require('gulp'); var mail = require('gulp-mail'); -var smtpInfo = { - auth: { - user: 'foo@163.com', - pass: '123456' - }, - host: 'smtp.163.com', - secureConnection: true, - port: 465 +var smtpConfig = { + host: 'smtp.example.com', + port: 465, + secureConnection: true, + auth: { + user: 'user@example.com', + pass: 'correcthorsebatterystaple' + } }; gulp.task('mail', function () { - return gulp.src('./mails/i-love-you.html') + return gulp.src('path/to/message.html') .pipe(mail({ - subject: 'Surprise!?', to: [ - 'bar@gmail.com' + 'bar@example.com' ], - from: 'Foo ', - smtp: smtpInfo + from: 'Example ', + subject: 'A message from gulp-mail', + smtp: smtpConfig })); }); ``` diff --git a/gulpfile.js b/gulpfile.js index 2900b47..82ea40b 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -1,19 +1,14 @@ -var mail = require('./') -var mailInfo = require('./test/mail-info') // private -var gulp = require('gulp') +'use strict'; -gulp.task('test', function(){ - // send mail - return gulp.src([ - './test/i-love-you.html', - './test/1.html', - './test/2.html' - ]) +var mail = require('./'); +var smtpConfig = require('./test/smtp-config'); +var gulp = require('gulp'); + +gulp.task('test', function () { + return gulp.src('./test/message.html') .pipe(mail({ - to: mailInfo.to, - from: mailInfo.from, - smtp: mailInfo.smtp + to: smtpConfig.to, + from: smtpConfig.from, + smtp: smtpConfig.smtp })) - // blocked after sending - // becase transporter remained working -}) +}); diff --git a/index.js b/index.js index 8599ed8..8f37b71 100755 --- a/index.js +++ b/index.js @@ -1,16 +1,14 @@ -// learnt from https://github.com/meerkats/gulp-mailer -// used old nodemailer@0.7.1 instead +'use strict'; -var _ = require('underscore'); +var flatOpts = require('flat-options'); var nodemailer = require('nodemailer'); var path = require('path'); var through2 = require('through2'); -var util = require('util'); -var gutil = require('gulp-util'); +var log = require('fancy-log'); +var colors = require('ansi-colors'); module.exports = function (options) { - - options = _.defaults(options || {}, { + options = flatOpts(options, { to: null, from: null, subject: null, @@ -19,17 +17,16 @@ module.exports = function (options) { smtp: null }); - return through2.obj(function (file, enc, next) { - - var transporter = nodemailer.createTransport("SMTP", options.smtp); + return through2.obj(function (file, enc, callback) { + var transporter = nodemailer.createTransport('SMTP', options.smtp); if (file.isNull()) { this.push(file); - return next(); + return callback(); } - var to = options.to.join(','); - var subject = options.subject || _subjectFromFilename(file.path); + var to = options.to.constructor === Array ? options.to.join(',') : options.to; + var subject = options.subject || path.basename(file.path); var html = options.html || file.contents.toString(); var text = options.text || null; @@ -37,27 +34,18 @@ module.exports = function (options) { from: options.from, to: to, subject: subject, - generateTextFromHTML: true, // added + generateTextFromHTML: true, html: html, text: text }, function (error, info) { - if (error) { - console.error(error); - transporter.close(); - return next(); + log.error(error); + } else { + log.info('Sent email', colors.cyan(subject), 'to', colors.red(to)); } - gutil.log("Send email", gutil.colors.cyan(subject), 'to', - gutil.colors.red(to)); transporter.close(); - next(); - + callback(); }); }); }; - -_subjectFromFilename = function (filename) { - var name = path.basename(filename).replace(path.extname(filename), ''); - return util.format('[TEST] %s', name); -}; \ No newline at end of file diff --git a/package.json b/package.json index a1f869a..ab14802 100644 --- a/package.json +++ b/package.json @@ -1,26 +1,28 @@ { "name": "gulp-mail", - "description": "Send mails with gulp", + "description": "Send emails with gulp", "version": "0.2.0", + "license": "MIT", "homepage": "https://github.com/fritx/gulp-mail", "repository": "git@github.com:fritx/gulp-mail.git", "main": "./index.js", "scripts": { - "test": "gulp test" + "test": "gulp test" }, "keywords": [ "gulpplugin", - "mail", + "nodemailer", + "email", "send" ], "dependencies": { - "gulp-util": "^3.0.1", + "ansi-colors": "^1.1.0", + "fancy-log": "^1.3.2", + "flat-options": "^0.1.3", "nodemailer": "^0.7.1", - "through2": "^0.6.1", - "underscore": "^1.7.0" + "through2": "^0.6.1" }, "devDependencies": { "gulp": "^3.8.8" - }, - "licenses": "MIT" + } } diff --git a/test/1.html b/test/1.html deleted file mode 100644 index bf8e5da..0000000 --- a/test/1.html +++ /dev/null @@ -1 +0,0 @@ -

1.html

\ No newline at end of file diff --git a/test/2.html b/test/2.html deleted file mode 100644 index f6ce104..0000000 --- a/test/2.html +++ /dev/null @@ -1 +0,0 @@ -

2.html

\ No newline at end of file diff --git a/test/i-love-you.html b/test/i-love-you.html deleted file mode 100644 index 86cc2f1..0000000 --- a/test/i-love-you.html +++ /dev/null @@ -1 +0,0 @@ -

I love you!

\ No newline at end of file diff --git a/test/mail-info.example.js b/test/mail-info.example.js deleted file mode 100644 index 12dbd77..0000000 --- a/test/mail-info.example.js +++ /dev/null @@ -1,16 +0,0 @@ -// private -module.exports = { - to: [ - 'example@163.com' - ], - from: 'example ', - smtp: { - auth: { - user: 'example@163.com', - pass: 'example' - }, - host: 'smtp.163.com', - secureConnection: true, - port: 465 - } -} \ No newline at end of file diff --git a/test/message.html b/test/message.html new file mode 100644 index 0000000..cf70e8e --- /dev/null +++ b/test/message.html @@ -0,0 +1,11 @@ + + + + + + Message + + +

This email was sent with gulp-mail!

+ + diff --git a/test/smtp-config.js b/test/smtp-config.js new file mode 100644 index 0000000..9141e55 --- /dev/null +++ b/test/smtp-config.js @@ -0,0 +1,16 @@ +'use strict'; + +// Replace the credentials below with your own in order to test +module.exports = { + to: 'to@example.com', + from: 'user@example.com', + smtp: { + host: 'smtp.example.com', + port: 465, + secureConnection: true, + auth: { + user: 'user@example.com', + pass: 'correcthorsebatterystaple' + } + } +};