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 })); }); ``` 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/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..e37a959 --- /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', + }, + }, +};