Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 19 additions & 19 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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 <foo@163.com>',
smtp: smtpInfo
from: 'Example <user@example.com>',
subject: 'A message from gulp-mail',
smtp: smtpConfig
}));
});
```
27 changes: 11 additions & 16 deletions gulpfile.js
Original file line number Diff line number Diff line change
@@ -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
})
});
42 changes: 15 additions & 27 deletions index.js
Original file line number Diff line number Diff line change
@@ -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,
Expand All @@ -19,45 +17,35 @@ 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;

return transporter.sendMail({
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);
};
18 changes: 10 additions & 8 deletions package.json
Original file line number Diff line number Diff line change
@@ -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"
}
}
1 change: 0 additions & 1 deletion test/1.html

This file was deleted.

1 change: 0 additions & 1 deletion test/2.html

This file was deleted.

1 change: 0 additions & 1 deletion test/i-love-you.html

This file was deleted.

16 changes: 0 additions & 16 deletions test/mail-info.example.js

This file was deleted.

11 changes: 11 additions & 0 deletions test/message.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<!doctype html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Message</title>
</head>
<body>
<h1>This email was sent with gulp-mail!</h1>
</body>
</html>
16 changes: 16 additions & 0 deletions test/smtp-config.js
Original file line number Diff line number Diff line change
@@ -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'
}
}
};