mirror of
				https://github.com/node-red/node-red-nodes.git
				synced 2025-03-01 10:37:43 +00:00 
			
		
		
		
	Adding No Auth support to social email out node (#277)
* Let email out node connect to SMTP without authentication Add the possibility to connect to local SMTP without authentication. * Adapt test to connect to SMTP without credentials Adapt test to connect to SMTP without credentials * Add coverage for social email out node Add coverage for social email out node * Add more coverage to email out node Add more coverage to email out node
This commit is contained in:
		
				
					committed by
					
						 Dave Conway-Jones
						Dave Conway-Jones
					
				
			
			
				
	
			
			
			
						parent
						
							367237d946
						
					
				
				
					commit
					8e001fcd45
				
			| @@ -37,8 +37,6 @@ module.exports = function(RED) { | |||||||
|             if (globalkeys) { |             if (globalkeys) { | ||||||
|                 this.userid = globalkeys.user; |                 this.userid = globalkeys.user; | ||||||
|                 flag = true; |                 flag = true; | ||||||
|             } else { |  | ||||||
|                 this.error(RED._("email.errors.nouserid")); |  | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|         if (this.credentials && this.credentials.hasOwnProperty("password")) { |         if (this.credentials && this.credentials.hasOwnProperty("password")) { | ||||||
| @@ -47,8 +45,6 @@ module.exports = function(RED) { | |||||||
|             if (globalkeys) { |             if (globalkeys) { | ||||||
|                 this.password = globalkeys.pass; |                 this.password = globalkeys.pass; | ||||||
|                 flag = true; |                 flag = true; | ||||||
|             } else { |  | ||||||
|                 this.error(RED._("email.errors.nopassword")); |  | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|         if (flag) { |         if (flag) { | ||||||
| @@ -59,12 +55,15 @@ module.exports = function(RED) { | |||||||
|         var smtpTransport = nodemailer.createTransport({ |         var smtpTransport = nodemailer.createTransport({ | ||||||
|             host: node.outserver, |             host: node.outserver, | ||||||
|             port: node.outport, |             port: node.outport, | ||||||
|             secure: node.secure, |             secure: node.secure | ||||||
|             auth: { |         }); | ||||||
|  |  | ||||||
|  |         if(this.userid && this.password) { | ||||||
|  |             smtpTransport.auth = { | ||||||
|                 user: node.userid, |                 user: node.userid, | ||||||
|                 pass: node.password |                 pass: node.password | ||||||
|             } |             }; | ||||||
|         }); |         } | ||||||
|  |  | ||||||
|         this.on("input", function(msg) { |         this.on("input", function(msg) { | ||||||
|             if (msg.hasOwnProperty("payload")) { |             if (msg.hasOwnProperty("payload")) { | ||||||
| @@ -113,7 +112,7 @@ module.exports = function(RED) { | |||||||
|                         } |                         } | ||||||
|                     }); |                     }); | ||||||
|                 } |                 } | ||||||
|                 else { node.warn(RED._("email.errors.nocredentials")); } |                 else { node.warn(RED._("email.errors.nosmtptransport")); } | ||||||
|             } |             } | ||||||
|             else { node.warn(RED._("email.errors.nopayload")); } |             else { node.warn(RED._("email.errors.nopayload")); } | ||||||
|         }); |         }); | ||||||
|   | |||||||
| @@ -38,6 +38,7 @@ | |||||||
|             "nouserid": "No e-mail userid set", |             "nouserid": "No e-mail userid set", | ||||||
|             "nopassword": "No e-mail password set", |             "nopassword": "No e-mail password set", | ||||||
|             "nocredentials": "No Email credentials found. See info panel.", |             "nocredentials": "No Email credentials found. See info panel.", | ||||||
|  |             "nosmtptransport": "No SMTP transport. See info panel.", | ||||||
|             "nopayload": "No payload to send",             |             "nopayload": "No payload to send",             | ||||||
|             "fetchfail": "Failed to fetch folder: __folder__", |             "fetchfail": "Failed to fetch folder: __folder__", | ||||||
|             "messageerror": "Fetch message error: __error__" |             "messageerror": "Fetch message error: __error__" | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| { | { | ||||||
|   "name": "node-red-node-email", |   "name": "node-red-node-email", | ||||||
|   "version": "0.1.17", |   "version": "0.1.18", | ||||||
|   "description": "Node-RED nodes to send and receive simple emails", |   "description": "Node-RED nodes to send and receive simple emails", | ||||||
|   "dependencies": { |   "dependencies": { | ||||||
|     "nodemailer": "^1.11.0", |     "nodemailer": "^1.11.0", | ||||||
|   | |||||||
| @@ -1,91 +1,190 @@ | |||||||
|  |  | ||||||
| var should = require("should"); | var should = require("should"); | ||||||
| var sinon = require("sinon"); | var sinon = require("sinon"); | ||||||
| var helper = require('../../../test/helper.js'); | var helper = require('../../../test/helper.js'); | ||||||
| var emailNode = require('../../../social/email/61-email.js'); | var emailNode = require('../../../social/email/61-email.js'); | ||||||
|  |  | ||||||
| describe('email Node', function() { | describe('email Node', function () { | ||||||
|  |  | ||||||
|     beforeEach(function(done) { |     beforeEach(function (done) { | ||||||
|         helper.startServer(done); |         helper.startServer(done); | ||||||
|     }); |     }); | ||||||
|  |  | ||||||
|     afterEach(function(done) { |     afterEach(function (done) { | ||||||
|         helper.unload(); |         helper.unload(); | ||||||
|         helper.stopServer(done); |         helper.stopServer(done); | ||||||
|     }); |     }); | ||||||
|  |  | ||||||
|     describe('email in', function() { |     describe('email in', function () { | ||||||
|  |  | ||||||
|         it('should load with defaults', function(done) { |         it('should load with defaults', function (done) { | ||||||
|             var flow = [ { id:"n1", type:"e-mail in", name:"emailin", wires:[[]] } ]; |             var flow = [{ | ||||||
|             helper.load(emailNode, flow, function() { |                 id: "n1", | ||||||
|  |                 type: "e-mail in", | ||||||
|  |                 name: "emailin", | ||||||
|  |                 wires: [ | ||||||
|  |                     [] | ||||||
|  |                 ] | ||||||
|  |             }]; | ||||||
|  |             helper.load(emailNode, flow, function () { | ||||||
|                 var n1 = helper.getNode("n1"); |                 var n1 = helper.getNode("n1"); | ||||||
|                 n1.should.have.property('name',  "emailin"); |                 n1.should.have.property('name', "emailin"); | ||||||
|                 n1.should.have.property("repeat", 300000); |                 n1.should.have.property("repeat", 300000); | ||||||
|                 n1.should.have.property("inserver", "imap.gmail.com"); |                 n1.should.have.property("inserver", "imap.gmail.com"); | ||||||
|                 n1.should.have.property("inport", "993"); |                 n1.should.have.property("inport", "993"); | ||||||
|                 done(); |                 done(); | ||||||
|             }); |             }); | ||||||
|         }); |         }); | ||||||
|  |  | ||||||
|         //it('should load', function(done) { |  | ||||||
|             //var flow = [ { id:"n1", type:"e-mail in", wires:[["n2"]] }, |  | ||||||
|                     //{id:"n2", type:"helper"} ]; |  | ||||||
|             //helper.load(emailNode, flow, function() { |  | ||||||
|                 //var n1 = helper.getNode("n1"); |  | ||||||
|                 //var n2 = helper.getNode("n2"); |  | ||||||
|                 //n2.on("input", function(msg) { |  | ||||||
|                     //msg.should.have.property('payload',  "hello"); |  | ||||||
|                     //done(); |  | ||||||
|                 //}); |  | ||||||
|                 //var testString = "1,2,3,4"+String.fromCharCode(10); |  | ||||||
|                 //n1.emit("input", {payload:testString}); |  | ||||||
|             //}); |  | ||||||
|         //}); |  | ||||||
|  |  | ||||||
|     }); |     }); | ||||||
|  |  | ||||||
|     describe('email out', function() { |     describe('email out', function () { | ||||||
|  |  | ||||||
|         it('should load with defaults', function(done) { |         it('should load with defaults', function (done) { | ||||||
|             var flow = [ { id:"n1", type:"e-mail", name:"emailout", wires:[[]] } ]; |             var flow = [{ | ||||||
|             helper.load(emailNode, flow, function() { |                 id: "n1", | ||||||
|  |                 type: "e-mail", | ||||||
|  |                 name: "emailout", | ||||||
|  |                 wires: [ | ||||||
|  |                     [] | ||||||
|  |                 ] | ||||||
|  |             }]; | ||||||
|  |             helper.load(emailNode, flow, function () { | ||||||
|                 var n1 = helper.getNode("n1"); |                 var n1 = helper.getNode("n1"); | ||||||
|                 n1.should.have.property('name',  "emailout"); |                 n1.should.have.property('name', "emailout"); | ||||||
|                 done(); |                 done(); | ||||||
|             }); |             }); | ||||||
|         }); |         }); | ||||||
|  |  | ||||||
|         it('should fail to send an email (no valid creds)', function(done) { |         it('should fail with no payload', function (done) { | ||||||
|             var smtpTransport = require("nodemailer").createTransport(); |             var flow = [{ | ||||||
|             //var spy = sinon.stub(smtpTransport, 'sendMail', function(arg1,arg2,arg3,arg4) { |                 id: "n1", | ||||||
|                 //console.log("HELLO"); |                 type: "e-mail", | ||||||
|                 //console.log(arg1,arg2,arg3,arg4); |                 name: "emailout", | ||||||
|                 //done(); |                 wires: [ | ||||||
|             //}); |                     [] | ||||||
|             var flow = [ { id:"n1", type:"e-mail", name:"emailout", outserver:"smtp.gmail.com", outport:"465", wires:[[]] } ]; |                 ] | ||||||
|             helper.load(emailNode, flow, function() { |             }]; | ||||||
|  |             helper.load(emailNode, flow, function () { | ||||||
|                 var n1 = helper.getNode("n1"); |                 var n1 = helper.getNode("n1"); | ||||||
|                 n1.should.have.property('name',  "emailout"); |                 n1.credentials = { | ||||||
|                 n1.emit("input", {payload:"Hello World"}); |                     userid: "test", | ||||||
|  |                     password: "test", | ||||||
|  |                 }; | ||||||
|  |                 n1.emit("input", {}); | ||||||
|                 //done(); |                 //done(); | ||||||
|             }); |             }); | ||||||
|             setTimeout(function() { |             setTimeout(function () { | ||||||
|                 try { |                 try { | ||||||
|                     var logEvents = helper.log().args.filter(function(evt) { |                     var logEvents = helper.log().args.filter(function (evt) { | ||||||
|  |                         //console.log(evt[0].msg); | ||||||
|                         return evt[0].type == "e-mail"; |                         return evt[0].type == "e-mail"; | ||||||
|                     }); |                     }); | ||||||
|                     //console.log(logEvents); |                     //console.log(helper.log().args); | ||||||
|  |                     //console.log(helper.log()); | ||||||
|                     //logEvents.should.have.length(3); |                     //logEvents.should.have.length(3); | ||||||
|                     logEvents[0][0].should.have.a.property('msg'); |                     logEvents[0][0].should.have.a.property('msg'); | ||||||
|                     logEvents[0][0].msg.toString().should.startWith("email.errors.nouserid"); |                     logEvents[0][0].msg.toString().should.startWith("email.errors.nopayload"); | ||||||
|                     done(); |                     done(); | ||||||
|  |                 } catch (e) { | ||||||
|  |                     done(e); | ||||||
|  |                 } | ||||||
|  |                 //finally { smtpTransport.sendMail.restore(); } | ||||||
|  |             }, 1000); | ||||||
|  |         }); | ||||||
|  |  | ||||||
|  |         it('should fail to send an email (invalid creds)', function (done) { | ||||||
|  |             //var smtpTransport = require("nodemailer").createTransport(); | ||||||
|  |             //var spy = sinon.stub(smtpTransport, 'sendMail', function(arg1,arg2,arg3,arg4) { | ||||||
|  |             //console.log("HELLO"); | ||||||
|  |             //console.log(arg1,arg2,arg3,arg4); | ||||||
|  |             //done(); | ||||||
|  |             //}); | ||||||
|  |             var flow = [{ | ||||||
|  |                 id: "n1", | ||||||
|  |                 type: "e-mail", | ||||||
|  |                 name: "test@gmail.com", | ||||||
|  |                 server: "smtp.gmail.com", | ||||||
|  |                 secure: true, | ||||||
|  |                 port: "465", | ||||||
|  |                 wires: [ | ||||||
|  |                     [] | ||||||
|  |                 ] | ||||||
|  |             }]; | ||||||
|  |             helper.load(emailNode, flow, function () { | ||||||
|  |                 var n1 = helper.getNode("n1"); | ||||||
|  |                 n1.credentials = { | ||||||
|  |                     userid: "test", | ||||||
|  |                     password: "test", | ||||||
|  |                 }; | ||||||
|  |                 n1.should.have.property('name', "test@gmail.com"); | ||||||
|  |                 n1.emit("input", { | ||||||
|  |                     payload: "Hello World", | ||||||
|  |                     to: "test@gmail.com" | ||||||
|  |                 }); | ||||||
|  |                 //done(); | ||||||
|  |             }); | ||||||
|  |             setTimeout(function () { | ||||||
|  |                 try { | ||||||
|  |                     var logEvents = helper.log().args.filter(function (evt) { | ||||||
|  |                         //console.log(evt[0].msg); | ||||||
|  |                         return evt[0].type == "e-mail"; | ||||||
|  |                     }); | ||||||
|  |                     //console.log(helper.log().args); | ||||||
|  |                     //console.log(helper.log()); | ||||||
|  |                     //logEvents.should.have.length(3); | ||||||
|  |                     logEvents[0][0].should.have.a.property('msg'); | ||||||
|  |                     logEvents[0][0].msg.toString().should.startWith("Error:"); | ||||||
|  |                     done(); | ||||||
|  |                 } catch (e) { | ||||||
|  |                     done(e); | ||||||
|  |                 } | ||||||
|  |                 //finally { smtpTransport.sendMail.restore(); } | ||||||
|  |             }, 1000); | ||||||
|  |         }) | ||||||
|  |  | ||||||
|  |         it('should fail to send an email (no creds provided)', function (done) { | ||||||
|  |             //var smtpTransport = require("nodemailer").createTransport(); | ||||||
|  |             //var spy = sinon.stub(smtpTransport, 'sendMail', function(arg1,arg2,arg3,arg4) { | ||||||
|  |             //console.log("HELLO"); | ||||||
|  |             //console.log(arg1,arg2,arg3,arg4); | ||||||
|  |             //done(); | ||||||
|  |             //}); | ||||||
|  |             var flow = [{ | ||||||
|  |                 id: "n1", | ||||||
|  |                 type: "e-mail", | ||||||
|  |                 name: "test@gmail.com", | ||||||
|  |                 server: "smtp.gmail.com", | ||||||
|  |                 secure: true, | ||||||
|  |                 port: "465", | ||||||
|  |                 wires: [ | ||||||
|  |                     [] | ||||||
|  |                 ] | ||||||
|  |             }]; | ||||||
|  |             helper.load(emailNode, flow, function () { | ||||||
|  |                 var n1 = helper.getNode("n1"); | ||||||
|  |                 n1.should.have.property('name', "test@gmail.com"); | ||||||
|  |                 n1.emit("input", { | ||||||
|  |                     payload: "Hello World", | ||||||
|  |                     to: "test@gmail.com" | ||||||
|  |                 }); | ||||||
|  |                 //done(); | ||||||
|  |             }); | ||||||
|  |             setTimeout(function () { | ||||||
|  |                 try { | ||||||
|  |                     var logEvents = helper.log().args.filter(function (evt) { | ||||||
|  |                         //console.log(evt[0].msg); | ||||||
|  |                         return evt[0].type == "e-mail"; | ||||||
|  |                     }); | ||||||
|  |                     //console.log(helper.log().args); | ||||||
|  |                     //logEvents.should.have.length(3); | ||||||
|  |                     logEvents[0][0].should.have.a.property('msg'); | ||||||
|  |                     logEvents[0][0].msg.toString().should.startWith("Error:"); | ||||||
|  |                     done(); | ||||||
|  |                 } catch (e) { | ||||||
|  |                     done(e); | ||||||
|                 } |                 } | ||||||
|                 catch(e) { done(e); } |  | ||||||
|                 //finally { smtpTransport.sendMail.restore(); } |                 //finally { smtpTransport.sendMail.restore(); } | ||||||
|             }, 1000); |             }, 1000); | ||||||
|         }) |         }) | ||||||
|  |  | ||||||
|     }); |     }); | ||||||
| }); | }); | ||||||
		Reference in New Issue
	
	Block a user