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 @@
+
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",