From 4bc1c0da13513ed84be07db54a60c26e9ccc6c51 Mon Sep 17 00:00:00 2001 From: Jaroslav Vrana Date: Thu, 10 Jun 2021 21:48:33 +0200 Subject: [PATCH 1/4] docs: README update & formatting Picked from #158c48fc75d0f86e643095320ae7b899485b54001 by justin713 --- README.md | 83 +++++++++++++++++++++++++++---------------------------- 1 file changed, 41 insertions(+), 42 deletions(-) diff --git a/README.md b/README.md index 42a7923..4722413 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,10 @@ -## gulp-mail +# gulp-mail -   - -A [gulp](https://github.com/gulpjs/gulp) wrapper for [Nodemailer](https://nodemailer.com) used to quickly send emails from tasks and/or the command-line during development or testing. +> A [gulp](https://github.com/gulpjs/gulp) wrapper for [Nodemailer](https://nodemailer.com) used to quickly send emails from tasks and/or the command-line during development or testing. `gulp-mail` is based on [gulp-mailer](https://github.com/meerkats/gulp-mailer), which is not available on [npm](https://www.npmjs.com/). -### Installation +## Installation Installing via [npm](https://www.npmjs.org/package/gulp-mail): @@ -14,40 +12,41 @@ Installing via [npm](https://www.npmjs.org/package/gulp-mail): npm install --save-dev gulp-mail ``` -### Usage +## Usage + +### `mail(options)` -#### `mail(options)` -- options: `Object` +* options: `Object` -### Options +## Options -`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: +`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` -Contains required SMTP configuration values. (See the example below.) +* ### `options.smtp` + Type: `Object`\ + Contains required SMTP configuration values. (See the example below.) -##### options.to -Type: `String|Array` -A string or array containing one or more than one recipient address, respectively. +* ### `options.to` + Type: `String|Array`\ + A string or array containing one or more than one recipient address, respectively. -##### options.from -Type: `String` -The display name for the sender. +* ### `options.from` + Type: `String`\ + The display name for the sender. -##### options.subject -Type: `String` -The email subject line. If not provided, a default subject line is generated from the source filename as `[TEST] path.basename`. +* ### `options.subject` + 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` -The HTML body of the email. If not provided, the source file becomes the message body. +* ### `options.html` + Type: `String`\ + The HTML body of the email. If not provided, the source file becomes the message body. -##### options.text -Type: `String` -The plaintext body of the email. If not provided, Nodemailer generates this based on the source file. +* ### `options.text` + Type: `String`\ + The plaintext body of the email. If not provided, Nodemailer generates this based on the source file. -### Example +## Example Currently, `gulp-mail` takes in piped streams and sends emails via SMTP only. @@ -55,25 +54,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 })); }); ``` From 1ffe16e78c37cbf61bf429b952baa27d980acc73 Mon Sep 17 00:00:00 2001 From: Jaroslav Vrana Date: Thu, 10 Jun 2021 22:03:46 +0200 Subject: [PATCH 2/4] refactor(test): only one test HTML file Picked from #158c48fc75d0f86e643095320ae7b899485b54001 by justin713 --- gulpfile.js | 15 +++++++-------- test/1.html | 1 - test/2.html | 1 - test/i-love-you.html | 1 - test/message.html | 11 +++++++++++ 5 files changed, 18 insertions(+), 11 deletions(-) delete mode 100644 test/1.html delete mode 100644 test/2.html delete mode 100644 test/i-love-you.html create mode 100644 test/message.html diff --git a/gulpfile.js b/gulpfile.js index 2900b47..8ddfcd7 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -4,16 +4,15 @@ var gulp = require('gulp') gulp.task('test', function(){ // send mail - return gulp.src([ - './test/i-love-you.html', - './test/1.html', - './test/2.html' - ]) - .pipe(mail({ + return gulp + .src(['./test/message.html']) + .pipe( + mail({ to: mailInfo.to, from: mailInfo.from, - smtp: mailInfo.smtp - })) + smtp: mailInfo.smtp, + }) + ) // blocked after sending // becase transporter remained working }) 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/message.html b/test/message.html new file mode 100644 index 0000000..41450a2 --- /dev/null +++ b/test/message.html @@ -0,0 +1,11 @@ + + + + + + Message + + +

This email was sent with gulp-mail!

+ + \ No newline at end of file From c7bbe892e7a095563e2bd19dda6315626be6d7b6 Mon Sep 17 00:00:00 2001 From: Jaroslav Vrana Date: Thu, 10 Jun 2021 22:56:49 +0200 Subject: [PATCH 3/4] refactor: 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 Picked from 158c48fc75d0f86e643095320ae7b899485b54001 by justin713 --- gulpfile.js | 32 ++++++------- index.js | 99 ++++++++++++++++++--------------------- package.json | 10 ++-- test/mail-info.example.js | 16 ------- test/message.html | 11 +++++ test/smtp-config.js | 16 +++++++ 6 files changed, 91 insertions(+), 93 deletions(-) delete mode 100644 test/mail-info.example.js create mode 100644 test/message.html create mode 100644 test/smtp-config.js diff --git a/gulpfile.js b/gulpfile.js index 2900b47..7dc19c7 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -1,19 +1,15 @@ -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' - ]) - .pipe(mail({ - to: mailInfo.to, - from: mailInfo.from, - smtp: mailInfo.smtp - })) - // blocked after sending - // becase transporter remained working -}) +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: smtpConfig.to, + from: smtpConfig.from, + smtp: smtpConfig.smtp, + }) + ); +}); diff --git a/index.js b/index.js index 31bc287..d20d9fb 100755 --- a/index.js +++ b/index.js @@ -1,63 +1,54 @@ -// learnt from https://github.com/meerkats/gulp-mailer -// used old nodemailer@0.7.1 instead +'use strict'; -var _ = require('underscore'); +var colors = require('ansi-colors'); +var flatOpts = require('flat-options'); +var log = require('fancy-log'); var nodemailer = require('nodemailer'); var path = require('path'); var through2 = require('through2'); -var util = require('util'); -var log = require('fancy-log'); -var colors = require('ansi-colors'); module.exports = function (options) { - - options = _.defaults(options || {}, { - to: null, - from: null, - subject: null, - html: null, - text: null, - smtp: null - }); - - return through2.obj(function (file, enc, next) { - - var transporter = nodemailer.createTransport("SMTP", options.smtp); - - if (file.isNull()) { - this.push(file); - return next(); + options = flatOpts(options, { + to: null, + from: null, + subject: null, + html: null, + text: null, + smtp: null, + }); + + return through2.obj(function (file, enc, callback) { + var transporter = nodemailer.createTransport('SMTP', options.smtp); + + if (file.isNull()) { + this.push(file); + return callback(); + } + + 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; + + return transporter.sendMail( + { + from: options.from, + to: to, + subject: subject, + generateTextFromHTML: true, + html: html, + text: text, + }, + function (error, info) { + if (error) { + log.error(error); + } else { + log.info('Sent email', colors.cyan(subject), 'to', colors.red(to)); } - var to = options.to.join(','); - var subject = options.subject || _subjectFromFilename(file.path); - var html = options.html || file.contents.toString(); - var text = options.text || null; - - return transporter.sendMail({ - from: options.from, - to: to, - subject: subject, - generateTextFromHTML: true, // added - html: html, - text: text - }, function (error, info) { - - if (error) { - log.error(error); - transporter.close(); - return next(); - } - - log.info('Sent email', colors.cyan(subject), 'to', colors.red(to)); - transporter.close(); - next(); - - }); - }); + transporter.close(); + 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 a462002..d7c78f3 100644 --- a/package.json +++ b/package.json @@ -2,6 +2,7 @@ "name": "gulp-mail", "description": "Send emails with gulp", "version": "0.4.1", + "license": "MIT", "homepage": "https://github.com/fritx/gulp-mail", "repository": "git@github.com:fritx/gulp-mail.git", "main": "./index.js", @@ -15,14 +16,13 @@ "send" ], "dependencies": { - "ansi-colors": "^1.1.0", + "ansi-colors": "^4.1.1", "fancy-log": "^1.3.2", + "flat-options": "^0.1.3", "nodemailer": "^0.7.1", - "through2": "^0.6.1", - "underscore": "^1.7.0" + "through2": "^4.0.2" }, "devDependencies": { "gulp": "^3.8.8" - }, - "licenses": "MIT" + } } 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..ffdd709 --- /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..e70033a --- /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', + }, + }, +}; From 79056a17ef9923b67aa2e326a60bc5b54a050c00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jaroslav=20Vr=C3=A1na?= Date: Thu, 10 Jun 2021 23:23:08 +0200 Subject: [PATCH 4/4] refactor(test): smtp config in standalone file (#3) Picked from #158c48fc75d0f86e643095320ae7b899485b54001 by justin713 --- gulpfile.js | 25 ++++++++++--------------- test/mail-info.example.js | 16 ---------------- test/smtp-config.js | 16 ++++++++++++++++ 3 files changed, 26 insertions(+), 31 deletions(-) delete mode 100644 test/mail-info.example.js create mode 100644 test/smtp-config.js diff --git a/gulpfile.js b/gulpfile.js index 8ddfcd7..9b4570a 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -1,18 +1,13 @@ -var mail = require('./') -var mailInfo = require('./test/mail-info') // private -var gulp = require('gulp') +var mail = require('./'); +var smtpConfig = require('./test/smtp-config'); +var gulp = require('gulp'); -gulp.task('test', function(){ - // send mail - return gulp - .src(['./test/message.html']) - .pipe( +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/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/smtp-config.js b/test/smtp-config.js new file mode 100644 index 0000000..e70033a --- /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', + }, + }, +};