This commit is contained in:
Dave Conway-Jones 2018-08-22 13:58:58 +01:00
commit 665a8666ab
No known key found for this signature in database
GPG Key ID: 9E7F9C73F5168CD4
5 changed files with 31 additions and 3 deletions

View File

@ -49,6 +49,10 @@
<input type="password" id="node-input-password"> <input type="password" id="node-input-password">
</div> </div>
<br/> <br/>
<div class="form-row">
<label for="node-input-useTLS"><i class="fa fa-lock"></i> <span data-i18n="email.label.useTLS"></label>
<input type="checkbox" id="node-input-tls" style="display:inline-block; width:20px; vertical-align:baseline;">
</div>
<div class="form-row"> <div class="form-row">
<label for="node-input-dname"><i class="fa fa-tag"></i> <span data-i18n="node-red:common.label.name"></span></label> <label for="node-input-dname"><i class="fa fa-tag"></i> <span data-i18n="node-red:common.label.name"></span></label>
<input type="text" id="node-input-dname" data-i18n="[placeholder]node-red:common.label.name"> <input type="text" id="node-input-dname" data-i18n="[placeholder]node-red:common.label.name">
@ -69,6 +73,7 @@
<p>Alternatively you may provide <code>msg.attachments</code> which should contain an array of one or <p>Alternatively you may provide <code>msg.attachments</code> which should contain an array of one or
more attachments in <a href="https://www.npmjs.com/package/nodemailer#attachments" target="_new">nodemailer</a> format.</p> more attachments in <a href="https://www.npmjs.com/package/nodemailer#attachments" target="_new">nodemailer</a> format.</p>
<p>If required by your recipient you may also pass in a <code>msg.envelope</code> object, typically containing extra from and to properties.</p> <p>If required by your recipient you may also pass in a <code>msg.envelope</code> object, typically containing extra from and to properties.</p>
<p>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.</p>
<p>Note: uses SMTP with SSL to port 465.</p> <p>Note: uses SMTP with SSL to port 465.</p>
</script> </script>
@ -81,6 +86,7 @@
server: {value:"smtp.gmail.com",required:true}, server: {value:"smtp.gmail.com",required:true},
port: {value:"465",required:true}, port: {value:"465",required:true},
secure: {value: true}, secure: {value: true},
tls: {value: true},
name: {value:""}, name: {value:""},
dname: {value:""} dname: {value:""}
}, },

View File

@ -30,6 +30,7 @@ module.exports = function(RED) {
this.outserver = n.server; this.outserver = n.server;
this.outport = n.port; this.outport = n.port;
this.secure = n.secure; this.secure = n.secure;
this.tls = true;
var flag = false; var flag = false;
if (this.credentials && this.credentials.hasOwnProperty("userid")) { if (this.credentials && this.credentials.hasOwnProperty("userid")) {
this.userid = this.credentials.userid; this.userid = this.credentials.userid;
@ -50,12 +51,16 @@ module.exports = function(RED) {
if (flag) { if (flag) {
RED.nodes.addCredentials(n.id,{userid:this.userid, password:this.password, global:true}); RED.nodes.addCredentials(n.id,{userid:this.userid, password:this.password, global:true});
} }
if (n.tls === false){
this.tls = false;
}
var node = this; var node = this;
var smtpOptions = { var smtpOptions = {
host: node.outserver, host: node.outserver,
port: node.outport, port: node.outport,
secure: node.secure secure: node.secure,
tls: {rejectUnauthorized: node.tls}
} }
if (this.userid && this.password) { if (this.userid && this.password) {

View File

@ -13,6 +13,7 @@
"folder": "Folder", "folder": "Folder",
"protocol": "Protocol", "protocol": "Protocol",
"useSSL": "Use SSL?", "useSSL": "Use SSL?",
"useTLS": "Use TLS?",
"disposition": "Disposition", "disposition": "Disposition",
"none": "None", "none": "None",
"read": "Mark Read", "read": "Mark Read",

View File

@ -374,6 +374,14 @@ module.exports = function(RED) {
var res = result.body; var res = result.body;
if (res.errors) { if (res.errors) {
node.error(res.errors[0].message); 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; return;
} }
if (res.length > 0) { 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"); node.debug("Twitter DM Poll, rateLimitRemaining="+result.rateLimitRemaining+" rateLimitTimeout="+Math.floor(result.rateLimitTimeout/1000)+"s");
var res = result.body; var res = result.body;
if (res.errors) { 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 since = "0";
var messages = res.events.filter(tweet => tweet.type === 'message_create' && tweet.id > since); 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; var res = result.body;
if (res.errors) { if (res.errors) {
node.error(res.errors[0].message); node.error(res.errors[0].message);
clearInterval(pollId);
node.timeout_ids.push(setTimeout(function() {
node.pollDirectMessages();
},interval))
return; return;
} }
var messages = res.events.filter(tweet => tweet.type === 'message_create' && tweet.id > since); var messages = res.events.filter(tweet => tweet.type === 'message_create' && tweet.id > since);

View File

@ -1,6 +1,6 @@
{ {
"name": "node-red-node-twitter", "name": "node-red-node-twitter",
"version": "1.1.0", "version": "1.1.2",
"description": "A Node-RED node to talk to Twitter", "description": "A Node-RED node to talk to Twitter",
"dependencies": { "dependencies": {
"twitter-ng": "0.6.2", "twitter-ng": "0.6.2",