Permalink
Browse files

[api] added the abiltity to do mustache templating. bumped to 0.4.0

  • Loading branch information...
1 parent 186590f commit 183e038a31eedc5e812f5cde441a5e5288c1982d @Marak committed Nov 9, 2010
Showing with 467 additions and 15 deletions.
  1. +51 −1 Readme.md
  2. +33 −0 examples/demo-template.js
  3. +8 −9 { → examples}/demo.js
  4. +29 −3 lib/node_mailer.js
  5. +2 −2 package.json
  6. +7 −0 templates/sample.txt
  7. +337 −0 vendor/mustache.js
View
@@ -14,11 +14,11 @@
- super simple api
- emails are blasted out asynchronously
- uses connection pooling per SMTP server
+ - super simple built in templates using Mustache.js
# REQUIRES
- SMTP Server
-
# USAGE
var email = require("mailer");
@@ -41,6 +41,56 @@
}
+# USING TEMPLATES
+
+### create a simple template
+
+/templates/sample.text
+
+ Hello {{username}},
+
+ This is a sample template of the node mailer.
+
+ It uses mustache templating to do basic search and replaces.
+
+ The {{color}} {{animal}} {{adjective}} ran over the {{noun}}.
+
+### then send the mail using some simple JSON based Mustache replacement.
+
+ var email = require("../lib/node_mailer");
+
+ for(var i = 0; i < 10; i++){
+
+ email.send({
+ host : "localhost", // smtp server hostname
+ port : "252", // smtp server port
+ domain : "localhost", // domain used by client to identify itself to server
+ to : "marak.squires@gmail.com",
+ from : "obama@whitehouse.gov",
+ subject : "node_mailer test email",
+ template : "../templates/sample.txt", // path to template name
+ data : {
+ "username": "Billy Bob",
+ "color": function(){
+ var arr = ["purple", "red", "green", "yello"];
+ return arr[Math.floor(Math.random()*3)];
+ },
+ "animal": "monkey",
+ "adjective": "quickly",
+ "noun": "hot lava"
+ },
+
+ authentication : "login", // auth login is supported; anything else is no auth
+ username : "dXNlcm5hbWU=", // Base64 encoded username
+ password : "cGFzc3dvcmQ=" // Base64 encoded password
+ },
+ function(err, result){
+ if(err){ console.log(err); }
+ });
+ }
+
+
+
## Authors
Marak Squires, Elijah Insua
View
@@ -0,0 +1,33 @@
+var email = require("../lib/node_mailer");
+
+for(var i = 0; i < 10; i++){
+
+ email.send({
+ host : "localhost", // smtp server hostname
+ port : "252", // smtp server port
+ domain : "localhost", // domain used by client to identify itself to server
+ to : "marak.squires@gmail.com",
+ from : "obama@whitehouse.gov",
+ subject : "node_mailer test email",
+ template : "../templates/sample.txt", // path to template name
+ data : {
+ "username": "Billy Bob",
+ "color": function(){
+ var arr = ["purple", "red", "green", "yello"];
+ return arr[Math.floor(Math.random()*3)];
+ },
+ "animal": "monkey",
+ "adjective": "quickly",
+ "noun": "hot lava"
+ },
+
+ authentication : "login", // auth login is supported; anything else is no auth
+ username : "dXNlcm5hbWU=", // Base64 encoded username
+ password : "cGFzc3dvcmQ=" // Base64 encoded password
+ },
+ function(err, result){
+ if(err){ console.log(err); }
+ });
+
+}
+
@@ -1,22 +1,21 @@
-var email = require("./lib/node_mailer");
+var email = require("../lib/node_mailer");
for(var i = 0; i < 10; i++){
-
+
email.send({
host : "localhost", // smtp server hostname
- port : "1025", // smtp server port
+ port : "252", // smtp server port
domain : "localhost", // domain used by client to identify itself to server
to : "marak.squires@gmail.com",
from : "obama@whitehouse.gov",
subject : "node_mailer test email",
- body : "hello this the " + i + " a test email from the node_mailer",
-
+ body: "Hello! This is a test of the node_mailer.",
authentication : "login", // auth login is supported; anything else is no auth
username : "dXNlcm5hbWU=", // Base64 encoded username
- password : "cGFzc3dvcmQ=", // Base64 encoded password
-
+ password : "cGFzc3dvcmQ=" // Base64 encoded password
+ },
+ function(err, result){
+ if(err){ console.log(err); }
});
-
-
}
View
@@ -24,23 +24,27 @@ OTHER DEALINGS IN THE SOFTWARE.
var tcp = require('net'),
+ fs = require('fs'),
+ mustache = require('../vendor/mustache'),
defaultOptions = {
to : "marak.squires@gmail.com",
from : "obama@whitehouse.gov",
+ data : {},
subject : "node_mailer test email",
body : "hello this is a test email from the node_mailer",
host : "localhost",
domain : "localhost",
port : 25
},
keys = Object.keys(defaultOptions),
- connections = {};
+ connections = {},
+ templateCache = {};
exports.connections = connections;
var Connection = function(options, callback) {
this.options = options;
- this.callback = callback;
+ this.callback = callback || function(){};
};
Connection.prototype = {
options : {},
@@ -202,6 +206,28 @@ exports.send = function(options, callback) {
options[key] = defaultOptions[key];
}
}
+ var eyes = require('eyes');
@benw

benw Nov 15, 2010

require('eyes')? What's that?

@Marak

Marak Nov 15, 2010

Owner

ahhh crap, its a debugging library, i must have slipped there >.<

npm install eyes

will install it, but it is not needed. sorry!

@Marak

Marak Nov 15, 2010

Owner

fixed with: 7de32d6

bumped to version 0.4.1, pushed to npm.

sorry again!

+
+ // determine if we need to load a template before processing email for sending
+
+ // there is currently a bit of a dog pile effect on the template caching, but in theory
+ // it should eventually cache before we run out of File Descriptors. templateCache should be refactored
+ if(options.template){
+ if(typeof templateCache[options.template] != 'undefined'){
+ options.body = mustache.to_html(templateCache[options.template], options.data);
+ return new Email(options, callback);
+ }
+ else{
+ fs.readFile(options.template, function (err, data) {
+ if (err) throw err;
+ templateCache[options.template] = data.toString();
+ options.body = mustache.to_html(templateCache[options.template], options.data);
+ return new Email(options, callback);
+ });
+ }
+ }
+ else{
+ return new Email(options, callback);
+ }
- return new Email(options, callback);
};
View
@@ -1,7 +1,7 @@
{
"name": "mailer",
"description": "send emails from node.js to a smtp server, simple as cake",
- "version": "0.3.0",
+ "version": "0.4.0",
"author": "Marak Squires",
"contributors" : [
"Elijah Insua <tmpvar@gmail.com> (http://tmvpar.com/)"
@@ -10,6 +10,6 @@
"type": "git",
"url": "http://github.com/Marak/node_mailer.git"
},
- "engine": [ "node >=0.1.90" ],
+ "engine": [ "node >=0.2.00" ],
"main": "lib/node_mailer"
}
View
@@ -0,0 +1,7 @@
+Hello {{username}},
+
+This is a sample template of the node mailer.
+
+It uses mustache templating to do basic search and replaces.
+
+The {{color}} {{animal}} {{adjective}} ran over the {{noun}}.
Oops, something went wrong.

0 comments on commit 183e038

Please sign in to comment.