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',
+ },
+ },
+};