Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Newer
Older
100644 535 lines (428 sloc) 15.28 kb
a340aa9 @niftylettuce Release 0.0.1
authored
1
94cf7ca @niftylettuce added gitter.im, updated readme, added badges
authored
2 # Node Email Templates
7b1168c @niftylettuce Release 0.1.2
authored
3
94cf7ca @niftylettuce added gitter.im, updated readme, added badges
authored
4 [![NPM version][npm-image]][npm-url]
5 [![Build Status][travis-image]][travis-url]
6 [![NPM downloads][npm-downloads]][npm-url]
7 [![Test Coverage][coveralls-image]][coveralls-url]
2b7eaec @jeduan Adds codeclimate. Closes #93
jeduan authored
8 [![Static Analysis][codeclimate-image]][codeclimate-url]
94cf7ca @niftylettuce added gitter.im, updated readme, added badges
authored
9 [![MIT License][license-image]][license-url]
10 [![Gitter][gitter-image]][gitter-url]
11
12 Node.js NPM package for rendering beautiful emails with your template engine and CSS pre-processor of choice coupled with email-friendly inline CSS using [juice][juice].
13
14 > Enjoy this package? Check out [eskimo][eskimo] and [express-cdn][express-cdn], and follow [@niftylettuce](http://twitter.com/niftylettuce)!
a340aa9 @niftylettuce Release 0.0.1
authored
15
4207a79 @nicjansma Documentation and example update for ejs include directive
nicjansma authored
16
3d4c395 @niftylettuce 0.1.0 release with update docs, gh-pages, license, organization, resolve...
authored
17 ## Index
0114f48 @niftylettuce released 0.0.6 w/fix for batch method thx to @vekexasia, added him to co...
authored
18
3d4c395 @niftylettuce 0.1.0 release with update docs, gh-pages, license, organization, resolve...
authored
19 * [Email Templates](#email-templates)
20 * [Installation](#installation)
21 * [Quick Start](#quick-start)
22 * [EJS Custom Tags](#ejs-custom-tags)
23 * [Examples](#examples)
24 * [Basic](#basic)
25 * [Nodemailer](#nodemailer)
26 * [Postmark](#postmark)
27 * [Changelog](#changelog)
28 * [Contributors](#contributors)
29 * [License](#license)
5b2847d @niftylettuce release 0.0.5 with zlib compression capabilities
authored
30
bb43563 @niftylettuce Added installation line to Readme
authored
31
686ff86 @niftylettuce Added link to email template resources
authored
32 ## Email Templates
a340aa9 @niftylettuce Release 0.0.1
authored
33
deca105 @niftylettuce Added test-cov and test-travis
authored
34 For customizable, pre-built email templates, see [Email Blueprints][email-blueprints] and [Transactional Email Templates][transactional-email-templates].
a340aa9 @niftylettuce Release 0.0.1
authored
35
e9a2f99 @jasonsims Updated readme to include css pre-processor info
jasonsims authored
36 #### Supported Template Engines
94cf7ca @niftylettuce added gitter.im, updated readme, added badges
authored
37
38 * [ejs][ejs]
39 * [jade][jade]
40 * [swig][swig]
41 * [handlebars][handlebars]
42 * [emblem][emblem]
43 * [dust-linkedin][dust-linkedin]
e9a2f99 @jasonsims Updated readme to include css pre-processor info
jasonsims authored
44
45 #### Supported CSS Pre-processors
94cf7ca @niftylettuce added gitter.im, updated readme, added badges
authored
46
47 * [less][less]
48 * [sass][sass]
49 * [stylus][stylus]
50 * [styl][styl]
51
bb43563 @niftylettuce Added installation line to Readme
authored
52
3703557 @jasonsims Update Readme to deprecate windows branch
jasonsims authored
53 ## Prerequisites
94cf7ca @niftylettuce added gitter.im, updated readme, added badges
authored
54
3703557 @jasonsims Update Readme to deprecate windows branch
jasonsims authored
55 This module depends on [jsdom](https://github.com/tmpvar/jsdom) which requires the ability to compile C++ on your localhost. Before installing, please verify that you have the prerequisites installed for your OS.
bb43563 @niftylettuce Added installation line to Readme
authored
56
94cf7ca @niftylettuce added gitter.im, updated readme, added badges
authored
57 * [OSX requirements](https://github.com/tmpvar/jsdom#mac)
58 * [Linux requirements](https://github.com/tmpvar/jsdom#linux)
59
60 #### Important Note for Windows Users
61
62 Developing on OS X or Ubuntu/Linux is recommended, but if you only have access to a Windows machine you can do one of the following:
63
64 * Use [vagrant](http://www.vagrantup.com/) to create a linux dev environment (recommended)
65 * Follow the [Windows installation guide](https://github.com/brianmcd/contextify/wiki/Windows-Installation-Guide) for contextify
66
0eb914a @niftylettuce Windows support
authored
67
3703557 @jasonsims Update Readme to deprecate windows branch
jasonsims authored
68 ## Installation
94cf7ca @niftylettuce added gitter.im, updated readme, added badges
authored
69
bb43563 @niftylettuce Added installation line to Readme
authored
70 ```bash
94cf7ca @niftylettuce added gitter.im, updated readme, added badges
authored
71 npm install -S email-templates
bb43563 @niftylettuce Added installation line to Readme
authored
72 ```
73
94cf7ca @niftylettuce added gitter.im, updated readme, added badges
authored
74 > Starting with version `1.1.1` you must install the engines you wish to use by adding them to your `package.json` dependencies.
75
76 ```bash
77 npm install -S [ejs|jade|swig|handlebars|emblem|dust-linkedin]
0b688f9 @RBLU (docs)step to add template-engine dependency
RBLU authored
78 ```
c1ccb6c @jeduan Adds test for advanced options and improves documentation
jeduan authored
79
94cf7ca @niftylettuce added gitter.im, updated readme, added badges
authored
80
3d4c395 @niftylettuce 0.1.0 release with update docs, gh-pages, license, organization, resolve...
authored
81 ## Quick Start
a340aa9 @niftylettuce Release 0.0.1
authored
82
94cf7ca @niftylettuce added gitter.im, updated readme, added badges
authored
83 1. Install the module for your respective project:
84
85 ```bash
86 npm install -S email-templates
87 ```
88
89 2. Install the template engine you intend to use:
00a58e9 @mike-spainhower README: Add semver info for peer dependencies
mike-spainhower authored
90 - `ejs@^1.0.0`
91 - `jade@^1.3.1`
92 - `swig@^1.3.2`
93 - `handlebars@^1.3.0`
94 - `emblem@~0.3.16`
95 - `dust-linkedin@^2.4.0`
96
97 - `less@^1.7.0`
98 - `stylus@^^0.45.1`
99 - `styl@^0.2.7`
100 - `node-sass@^0.9.3`
94cf7ca @niftylettuce added gitter.im, updated readme, added badges
authored
101
102 ```bash
103 npm install -S <engine>
104 ```
105
0b688f9 @RBLU (docs)step to add template-engine dependency
RBLU authored
106 3. Create a folder called `templates` inside your root directory (or elsewhere).
94cf7ca @niftylettuce added gitter.im, updated readme, added badges
authored
107
108 ```bash
109 mkdir templates
110 ```
111
112 4. For each of your email templates (e.g. a welcome email to send to users when they register on your site), respectively name and create a folder inside the `templates` folder.
113
114 ```bash
115 mkdir templates/welcome-email
116 ```
117
0b688f9 @RBLU (docs)step to add template-engine dependency
RBLU authored
118 5. Add the following files inside the template's folder:
94cf7ca @niftylettuce added gitter.im, updated readme, added badges
authored
119 * `html.{{ext}}` (**required**)
120 * `text.{{ext}}` (**optional**)
121 * `style.{{ext}}`(**optional**)
122
123 > **See [supported template engines](#supported-template-engines) for possible template engine extensions (e.g. `.ejs`, `.jade`, `.swig`) to use for the value of `{{ext}}` above.**
124
125 > You may prefix any file name with anything you like to help you identify the files more easily in your IDE. The only requirement is that the filename contains `html.`, `text.`, and `style.` respectively.
126
127 6. You may use the `include` directive from [ejs][ejs] (for example, to include a common header or footer). See the `/examples` folder for details.
128
0b688f9 @RBLU (docs)step to add template-engine dependency
RBLU authored
129 7. Utilize one of the examples below for your respective email module and start sending beautiful emails!
a340aa9 @niftylettuce Release 0.0.1
authored
130
131
c1ccb6c @jeduan Adds test for advanced options and improves documentation
jeduan authored
132 ## Template Engine Options
133
134 If your want to configure your template engine, just pass options.
d30964b @niftylettuce Added documentation for overriding EJS defaults
authored
135
136 Want to use different opening and closing tags instead of the EJS's default `<%` and `%>`?.
137
138 ```js
94cf7ca @niftylettuce added gitter.im, updated readme, added badges
authored
139 // ...
bf5ac4a @niftylettuce Fixed typo in documentation
authored
140 emailTemplates(templatesDir, { open: '{{', close: '}}' }, function(err, template) {
94cf7ca @niftylettuce added gitter.im, updated readme, added badges
authored
141 // ...
d30964b @niftylettuce Added documentation for overriding EJS defaults
authored
142 ```
a340aa9 @niftylettuce Release 0.0.1
authored
143
94cf7ca @niftylettuce added gitter.im, updated readme, added badges
authored
144 > You can also pass <a href="https://github.com/visionmedia/ejs#options" target="_blank">other options from EJS's documentation</a>.
b5d466e @niftylettuce Added note about other options for EJS
authored
145
c1ccb6c @jeduan Adds test for advanced options and improves documentation
jeduan authored
146 Want to add a helper or partial to Handlebars?
147
148 ```js
94cf7ca @niftylettuce added gitter.im, updated readme, added badges
authored
149 // ...
c1ccb6c @jeduan Adds test for advanced options and improves documentation
jeduan authored
150 emailTemplates(templatesDir, {
151 helpers: {
152 uppercase: function(context) {
153 return context.toUpperCase()
154 }
155 }, partials: {
94cf7ca @niftylettuce added gitter.im, updated readme, added badges
authored
156 // ...
c1ccb6c @jeduan Adds test for advanced options and improves documentation
jeduan authored
157 }
158 })
94cf7ca @niftylettuce added gitter.im, updated readme, added badges
authored
159 // ...
c1ccb6c @jeduan Adds test for advanced options and improves documentation
jeduan authored
160 ```
161
3d4c395 @niftylettuce 0.1.0 release with update docs, gh-pages, license, organization, resolve...
authored
162
163 ## Examples
164
165 ### Basic
a340aa9 @niftylettuce Release 0.0.1
authored
166
0375445 @niftylettuce Fixed typo
authored
167 Render a template for a single email or render multiple (having only loaded the template once).
a340aa9 @niftylettuce Release 0.0.1
authored
168
169 ```js
170 var path = require('path')
5798487 @niftylettuce Fixed typo thanks to @samholmes tip
authored
171 , templatesDir = path.join(__dirname, 'templates')
a340aa9 @niftylettuce Release 0.0.1
authored
172 , emailTemplates = require('email-templates');
173
87837bd @niftylettuce typo
authored
174 emailTemplates(templatesDir, function(err, template) {
a340aa9 @niftylettuce Release 0.0.1
authored
175
176 // Render a single email with one template
177 var locals = { pasta: 'Spaghetti' };
9fb7b96 @niftylettuce Fixed missing users array, closes #77
authored
178
87837bd @niftylettuce typo
authored
179 template('pasta-dinner', locals, function(err, html, text) {
a340aa9 @niftylettuce Release 0.0.1
authored
180 // ...
181 });
182
183 // Render multiple emails with one template
184 var locals = [
185 { pasta: 'Spaghetti' },
186 { pasta: 'Rigatoni' }
187 ];
9fb7b96 @niftylettuce Fixed missing users array, closes #77
authored
188
a340aa9 @niftylettuce Release 0.0.1
authored
189 var Render = function(locals) {
190 this.locals = locals;
191 this.send = function(err, html, text) {
192 // ...
193 };
194 this.batch = function(batch) {
128f450 @ninowalker Fix README example's batch invocation.
ninowalker authored
195 batch(this.locals, templatesDir, this.send);
a340aa9 @niftylettuce Release 0.0.1
authored
196 };
197 };
9fb7b96 @niftylettuce Fixed missing users array, closes #77
authored
198
199 // An example users object
200 var users = [
201 {
202 email: 'pappa.pizza@spaghetti.com',
203 name: {
204 first: 'Pappa',
205 last: 'Pizza'
206 }
207 },
208 {
209 email: 'mister.geppetto@spaghetti.com',
210 name: {
211 first: 'Mister',
212 last: 'Geppetto'
213 }
214 }
215 ];
216
a340aa9 @niftylettuce Release 0.0.1
authored
217 template('pasta-dinner', true, function(err, batch) {
218 for(var user in users) {
219 var render = new Render(users[user]);
220 render.batch(batch);
221 }
222 });
223
224 });
225 ```
226
94cf7ca @niftylettuce added gitter.im, updated readme, added badges
authored
227 ### [Nodemailer][nodemailer]
a340aa9 @niftylettuce Release 0.0.1
authored
228
229 ```js
230 var path = require('path')
231 , templatesDir = path.resolve(__dirname, '..', 'templates')
232 , emailTemplates = require('email-templates')
233 , nodemailer = require('nodemailer');
234
235 emailTemplates(templatesDir, function(err, template) {
236
237 if (err) {
238 console.log(err);
239 } else {
240
241 // ## Send a single email
242
243 // Prepare nodemailer transport object
244 var transport = nodemailer.createTransport("SMTP", {
245 service: "Gmail",
246 auth: {
247 user: "some-user@gmail.com",
248 pass: "some-password"
249 }
250 });
251
252 // An example users object with formatted email function
253 var locals = {
254 email: 'mamma.mia@spaghetti.com',
255 name: {
256 first: 'Mamma',
257 last: 'Mia'
258 }
259 };
260
261 // Send a single email
262 template('newsletter', locals, function(err, html, text) {
263 if (err) {
264 console.log(err);
265 } else {
be53bd1 @niftylettuce Fixed a minor typo
authored
266 transport.sendMail({
a340aa9 @niftylettuce Release 0.0.1
authored
267 from: 'Spicy Meatball <spicy.meatball@spaghetti.com>',
268 to: locals.email,
269 subject: 'Mangia gli spaghetti con polpette!',
270 html: html,
271 // generateTextFromHTML: true,
272 text: text
273 }, function(err, responseStatus) {
274 if (err) {
275 console.log(err);
276 } else {
277 console.log(responseStatus.message);
278 }
279 });
280 }
281 });
282
283
284 // ## Send a batch of emails and only load the template once
285
286 // Prepare nodemailer transport object
287 var transportBatch = nodemailer.createTransport("SMTP", {
288 service: "Gmail",
289 auth: {
290 user: "some-user@gmail.com",
291 pass: "some-password"
292 }
293 });
294
295 // An example users object
296 var users = [
297 {
298 email: 'pappa.pizza@spaghetti.com',
299 name: {
300 first: 'Pappa',
301 last: 'Pizza'
302 }
303 },
304 {
305 email: 'mister.geppetto@spaghetti.com',
306 name: {
307 first: 'Mister',
308 last: 'Geppetto'
309 }
310 }
311 ];
312
313 // Custom function for sending emails outside the loop
314 //
315 // NOTE:
316 // We need to patch postmark.js module to support the API call
317 // that will let us send a batch of up to 500 messages at once.
318 // (e.g. <https://github.com/diy/trebuchet/blob/master/lib/index.js#L160>)
319 var Render = function(locals) {
320 this.locals = locals;
321 this.send = function(err, html, text) {
322 if (err) {
323 console.log(err);
324 } else {
325 transportBatch.sendMail({
326 from: 'Spicy Meatball <spicy.meatball@spaghetti.com>',
327 to: locals.email,
328 subject: 'Mangia gli spaghetti con polpette!',
329 html: html,
330 // generateTextFromHTML: true,
331 text: text
332 }, function(err, responseStatus) {
333 if (err) {
334 console.log(err);
335 } else {
336 console.log(responseStatus.message);
337 }
338 });
339 }
340 };
341 this.batch = function(batch) {
3d4c395 @niftylettuce 0.1.0 release with update docs, gh-pages, license, organization, resolve...
authored
342 batch(this.locals, templatesDir, this.send);
a340aa9 @niftylettuce Release 0.0.1
authored
343 };
344 };
345
346 // Load the template and send the emails
347 template('newsletter', true, function(err, batch) {
348 for(var user in users) {
349 var render = new Render(users[user]);
350 render.batch(batch);
351 }
352 });
353
354 }
355 });
356 ```
357
94cf7ca @niftylettuce added gitter.im, updated readme, added badges
authored
358 ### [Postmark][postmark]
a340aa9 @niftylettuce Release 0.0.1
authored
359
94cf7ca @niftylettuce added gitter.im, updated readme, added badges
authored
360 This example utilizes [Postmark.js][postmarkjs].
a340aa9 @niftylettuce Release 0.0.1
authored
361
94cf7ca @niftylettuce added gitter.im, updated readme, added badges
authored
362 > Did you know `nodemailer` can also be used to send SMTP email through Postmark? See [this section][nodemailer-smtp] of their Readme for more info.
a340aa9 @niftylettuce Release 0.0.1
authored
363
94cf7ca @niftylettuce added gitter.im, updated readme, added badges
authored
364 For more message format options, see [this section][postmark-msg-format] of Postmark's developer documentation section.
a340aa9 @niftylettuce Release 0.0.1
authored
365
366 ```js
367 var path = require('path')
368 , templatesDir = path.resolve(__dirname, '..', 'templates')
369 , emailTemplates = require('email-templates')
370 , postmark = require('postmark')('your-api-key');
371
372 emailTemplates(templatesDir, function(err, template) {
373
374 if (err) {
375 console.log(err);
376 } else {
377
378 // ## Send a single email
379
380 // An example users object with formatted email function
381 var locals = {
382 email: 'mamma.mia@spaghetti.com',
383 name: {
384 first: 'Mamma',
385 last: 'Mia'
386 }
387 };
388
389 // Send a single email
390 template('newsletter', locals, function(err, html, text) {
391 if (err) {
392 console.log(err);
393 } else {
394 postmark.send({
395 From: 'Spicy Meatball <spicy.meatball@spaghetti.com>',
396 To: locals.email,
397 Subject: 'Mangia gli spaghetti con polpette!',
398 HtmlBody: html,
399 TextBody: text
400 }, function(err, response) {
401 if (err) {
402 console.log(err.status);
403 console.log(err.message);
404 } else {
405 console.log(response);
406 }
407 });
408 }
409 });
410
411
412 // ## Send a batch of emails and only load the template once
413
414 // An example users object
415 var users = [
416 {
417 email: 'pappa.pizza@spaghetti.com',
418 name: {
419 first: 'Pappa',
420 last: 'Pizza'
421 }
422 },
423 {
424 email: 'mister.geppetto@spaghetti.com',
425 name: {
426 first: 'Mister',
427 last: 'Geppetto'
428 }
429 }
430 ];
431
432 // Custom function for sending emails outside the loop
433 //
434 // NOTE:
435 // We need to patch postmark.js module to support the API call
436 // that will let us send a batch of up to 500 messages at once.
437 // (e.g. <https://github.com/diy/trebuchet/blob/master/lib/index.js#L160>)
438 var Render = function(locals) {
439 this.locals = locals;
440 this.send = function(err, html, text) {
441 if (err) {
442 console.log(err);
443 } else {
444 postmark.send({
445 From: 'Spicy Meatball <spicy.meatball@spaghetti.com>',
446 To: locals.email,
447 Subject: 'Mangia gli spaghetti con polpette!',
448 HtmlBody: html,
449 TextBody: text
450 }, function(err, response) {
451 if (err) {
452 console.log(err.status);
453 console.log(err.message);
454 } else {
455 console.log(response);
456 }
457 });
458 }
459 };
460 this.batch = function(batch) {
3d4c395 @niftylettuce 0.1.0 release with update docs, gh-pages, license, organization, resolve...
authored
461 batch(this.locals, templatesDir, this.send);
a340aa9 @niftylettuce Release 0.0.1
authored
462 };
463 };
464
465 // Load the template and send the emails
466 template('newsletter', true, function(err, batch) {
467 for(user in users) {
468 var render = new Render(users[user]);
469 render.batch(batch);
470 }
471 });
472
473 }
474 });
475 ```
476
7b9ceaa @niftylettuce Added lazyweb requests
authored
477
94cf7ca @niftylettuce added gitter.im, updated readme, added badges
authored
478 ## Conventions
479
480 See [nifty-conventions][nifty-conventions] for code guidelines, general project requirements, and git workflow.
481
7b9ceaa @niftylettuce Added lazyweb requests
authored
482
a340aa9 @niftylettuce Release 0.0.1
authored
483 ## Contributors
94cf7ca @niftylettuce added gitter.im, updated readme, added badges
authored
484
a340aa9 @niftylettuce Release 0.0.1
authored
485 * Nick Baugh <niftylettuce@gmail.com>
0114f48 @niftylettuce released 0.0.6 w/fix for batch method thx to @vekexasia, added him to co...
authored
486 * Andrea Baccega <vekexasia@gmail.com>
94cf7ca @niftylettuce added gitter.im, updated readme, added badges
authored
487 * Nic Jansma <http://nicj.net>
7b1168c @niftylettuce Release 0.1.2
authored
488 * Jason Sims <sims.jrobert@gmail.com>
83724f6 @niftylettuce Fixed badge typo
authored
489 * Miguel Mota <hello@miguelmota.com>
1cf48b5 @niftylettuce added @jeduan to list of contributors
authored
490 * Jeduan Cornejo <jeduan@gmail.com>
af8d7ae @jasonsims Release 0.1.8
jasonsims authored
491
94cf7ca @niftylettuce added gitter.im, updated readme, added badges
authored
492 > Full list of contributors can be found on the [GitHub Contributor Graph][gh-graph]
3d4c395 @niftylettuce 0.1.0 release with update docs, gh-pages, license, organization, resolve...
authored
493
494
94cf7ca @niftylettuce added gitter.im, updated readme, added badges
authored
495 ## License
a340aa9 @niftylettuce Release 0.0.1
authored
496
94cf7ca @niftylettuce added gitter.im, updated readme, added badges
authored
497 [MIT][license-url]
a340aa9 @niftylettuce Release 0.0.1
authored
498
499
94cf7ca @niftylettuce added gitter.im, updated readme, added badges
authored
500 [ejs]: https://github.com/visionmedia/ejs
d493355 @jeduan Switch to upstream Juice
jeduan authored
501 [juice]: https://github.com/Automattic/juice
94cf7ca @niftylettuce added gitter.im, updated readme, added badges
authored
502 [nodemailer]: https://github.com/andris9/Nodemailer
503 [postmark]: http://postmarkapp.com/
504 [postmarkjs]: https://github.com/voodootikigod/postmark.js
505 [nodemailer-smtp]: https://github.com/andris9/Nodemailer#well-known-services-for-smtp
506 [postmark-msg-format]: http://developer.postmarkapp.com/developer-build.html#message-format
507 [jade]: https://github.com/visionmedia/jade
508 [swig]: https://github.com/paularmstrong/swig
509 [handlebars]: https://github.com/wycats/handlebars.js
510 [emblem]: https://github.com/machty/emblem.js
511 [dust-linkedin]: https://github.com/linkedin/dustjs
512 [less]: http://lesscss.org/
513 [sass]: http://sass-lang.com/
514 [stylus]: http://learnboost.github.io/stylus/
515 [styl]: https://github.com/visionmedia/styl
516 [express-cdn]: https://github.com/niftylettuce/express-cdn
517 [license-image]: http://img.shields.io/badge/license-MIT-blue.svg?style=flat
518 [license-url]: LICENSE
519 [gh-graph]: https://github.com/niftylettuce/node-email-templates/graphs/contributors
520 [npm-image]: http://img.shields.io/npm/v/email-templates.svg?style=flat
521 [npm-url]: https://npmjs.org/package/email-templates
522 [npm-downloads]: http://img.shields.io/npm/dm/email-templates.svg?style=flat
c54330c @niftylettuce fixed urls
authored
523 [travis-url]: http://travis-ci.org/niftylettuce/node-email-templates
524 [travis-image]: http://img.shields.io/travis/niftylettuce/node-email-templates.svg?style=flat
2b7eaec @jeduan Adds codeclimate. Closes #93
jeduan authored
525 [codeclimate-image]: http://img.shields.io/codeclimate/github/niftylettuce/node-email-templates.svg?style=flat
526 [codeclimate-url]: https://codeclimate.com/github/niftylettuce/node-email-templates?branch=master
c54330c @niftylettuce fixed urls
authored
527 [coveralls-image]: https://img.shields.io/coveralls/niftylettuce/node-email-templates.svg?style=flat
528 [coveralls-url]: https://coveralls.io/r/niftylettuce/node-email-templates?branch=master
529 [gitter-url]: https://gitter.im/niftylettuce/node-email-templates
94cf7ca @niftylettuce added gitter.im, updated readme, added badges
authored
530 [gitter-image]: http://img.shields.io/badge/chat-online-brightgreen.svg?style=flat
531 [eskimo]: http://eskimo.io
532 [nifty-conventions]: https://github.com/niftylettuce/nifty-conventions
533 [email-blueprints]: https://github.com/mailchimp/Email-Blueprints
deca105 @niftylettuce Added test-cov and test-travis
authored
534 [transactional-email-templates]: https://github.com/mailgun/transactional-email-templates
Something went wrong with that request. Please try again.