diff --git a/social/email/61-email.html b/social/email/61-email.html index 0d684a43..52e4c38d 100644 --- a/social/email/61-email.html +++ b/social/email/61-email.html @@ -49,6 +49,10 @@
+
+ + +
@@ -69,6 +73,7 @@

Alternatively you may provide msg.attachments which should contain an array of one or more attachments in nodemailer format.

If required by your recipient you may also pass in a msg.envelope object, typically containing extra from and to properties.

+

If you have own signed certificates, Nodemailer can complain about that and refuse sending the message. In this case you can try switching off TLS.

Note: uses SMTP with SSL to port 465.

@@ -81,6 +86,7 @@ server: {value:"smtp.gmail.com",required:true}, port: {value:"465",required:true}, secure: {value: true}, + tls: {value: true}, name: {value:""}, dname: {value:""} }, diff --git a/social/email/61-email.js b/social/email/61-email.js index 92a7cdea..e3e6a0fa 100644 --- a/social/email/61-email.js +++ b/social/email/61-email.js @@ -30,6 +30,7 @@ module.exports = function(RED) { this.outserver = n.server; this.outport = n.port; this.secure = n.secure; + this.tls = true; var flag = false; if (this.credentials && this.credentials.hasOwnProperty("userid")) { this.userid = this.credentials.userid; @@ -50,12 +51,16 @@ module.exports = function(RED) { if (flag) { RED.nodes.addCredentials(n.id,{userid:this.userid, password:this.password, global:true}); } + if (n.tls === false){ + this.tls = false; + } var node = this; var smtpOptions = { host: node.outserver, port: node.outport, - secure: node.secure + secure: node.secure, + tls: {rejectUnauthorized: node.tls} } if (this.userid && this.password) { diff --git a/social/email/locales/en-US/61-email.json b/social/email/locales/en-US/61-email.json index fbe47766..d3f05375 100644 --- a/social/email/locales/en-US/61-email.json +++ b/social/email/locales/en-US/61-email.json @@ -13,6 +13,7 @@ "folder": "Folder", "protocol": "Protocol", "useSSL": "Use SSL?", + "useTLS": "Use TLS?", "disposition": "Disposition", "none": "None", "read": "Mark Read", diff --git a/social/twitter/27-twitter.js b/social/twitter/27-twitter.js index 16418a53..58cb4a1f 100644 --- a/social/twitter/27-twitter.js +++ b/social/twitter/27-twitter.js @@ -374,6 +374,14 @@ module.exports = function(RED) { var res = result.body; if (res.errors) { node.error(res.errors[0].message); + if (res.errors[0].code === 44) { + // 'since_id parameter is invalid' - reset it for next time + delete opts.since_id; + } + clearInterval(pollId); + node.timeout_ids.push(setTimeout(function() { + node.poll(interval,url,opts); + },interval)) return; } if (res.length > 0) { @@ -438,7 +446,11 @@ module.exports = function(RED) { node.debug("Twitter DM Poll, rateLimitRemaining="+result.rateLimitRemaining+" rateLimitTimeout="+Math.floor(result.rateLimitTimeout/1000)+"s"); var res = result.body; if (res.errors) { - throw new Error(res.errors[0].message); + node.error(res.errors[0].message); + node.timeout_ids.push(setTimeout(function() { + node.pollDirectMessages(); + },interval)) + return; } var since = "0"; var messages = res.events.filter(tweet => tweet.type === 'message_create' && tweet.id > since); @@ -459,6 +471,10 @@ module.exports = function(RED) { var res = result.body; if (res.errors) { node.error(res.errors[0].message); + clearInterval(pollId); + node.timeout_ids.push(setTimeout(function() { + node.pollDirectMessages(); + },interval)) return; } var messages = res.events.filter(tweet => tweet.type === 'message_create' && tweet.id > since); diff --git a/social/twitter/package.json b/social/twitter/package.json index 99feedfe..2c643ac0 100644 --- a/social/twitter/package.json +++ b/social/twitter/package.json @@ -1,6 +1,6 @@ { "name": "node-red-node-twitter", - "version": "1.1.0", + "version": "1.1.2", "description": "A Node-RED node to talk to Twitter", "dependencies": { "twitter-ng": "0.6.2",