🐛 Fix attempt to reconnect and make IMAP node stable (#1667)

This commit is contained in:
Omar Ajoue 2021-04-17 17:01:27 +02:00 committed by GitHub
parent 3fe52c84d5
commit 73da7998cf
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -354,35 +354,48 @@ export class EmailReadImap implements INodeType {
return newEmails;
};
let connection: ImapSimple;
const establishConnection = (): Promise<ImapSimple> => {
const config: ImapSimpleOptions = {
imap: {
user: credentials.user as string,
password: credentials.password as string,
host: credentials.host as string,
port: credentials.port as number,
tls: credentials.secure as boolean,
authTimeout: 20000,
},
onmail: async () => {
if (connection) {
const returnData = await getNewEmails(connection, searchCriteria);
const config: ImapSimpleOptions = {
imap: {
user: credentials.user as string,
password: credentials.password as string,
host: credentials.host as string,
port: credentials.port as number,
tls: credentials.secure as boolean,
authTimeout: 20000,
},
onmail: async () => {
const returnData = await getNewEmails(connection, searchCriteria);
if (returnData.length) {
this.emit([returnData]);
}
}
},
};
if (returnData.length) {
this.emit([returnData]);
}
},
if (options.allowUnauthorizedCerts === true) {
config.imap.tlsOptions = {
rejectUnauthorized: false,
};
}
// Connect to the IMAP server and open the mailbox
// that we get informed whenever a new email arrives
return imapConnect(config).then(async conn => {
conn.on('error', async err => {
if (err.code.toUpperCase() === 'ECONNRESET') {
connection = await establishConnection();
}
throw err;
});
return conn;
});
};
if (options.allowUnauthorizedCerts === true) {
config.imap.tlsOptions = {
rejectUnauthorized: false,
};
}
let connection: ImapSimple = await establishConnection();
// Connect to the IMAP server and open the mailbox
// that we get informed whenever a new email arrives
connection = await imapConnect(config);
await connection.openBox(mailbox);
// When workflow and so node gets set to inactive close the connectoin