问题描述
我目前有一个脚本,该脚本使用递归每30秒检查一次传入电子邮件(在邮箱中)。
我用于此测试的软件包为https://docs.spring.io/spring-integration/docs/5.3.2.RELEASE/reference/html/sftp.html#sftp-outbound-gateway。
以下脚本当前根据需要执行此操作;
var imaps = require('imap-simple');
const { connect } = require('net');
var config = {
imap: {
user: 'qatestspecialist@outlook.com',password: 'specialistQa',host: 'imap-mail.outlook.com',port: 993,tls: true,authTimeout: 30000
}
};
module.exports = {
'delete any existing emails...': function () {
imaps.connect(config).then(function (connection) {
connection.openBox('INBox').then(function () {
var searchCriteria = ['ALL'];
var fetchOptions = { bodies: ['TEXT'],struct: true };
return connection.search(searchCriteria,fetchOptions);
//Loop over each message
}).then(function (messages) {
let taskList = messages.map(function (message) {
return new Promise((res,rej) => {
var parts = imaps.getParts(message.attributes.struct);
parts.map(function (part) {
return connection.getPartData(message,part)
.then(function (partData) {
//display e-mail body
if (part.disposition == null && part.encoding != "base64"){
console.log(partData);
}
//Mark message for deletion
connection.addFlags(message.attributes.uid,"\Deleted",(err) => {
if (err){
console.log('Problem marking message for deletion');
rej(err);
}
res(); //Final resolve
});
});
});
});
});
return Promise.all(taskList).then(() => {
connection.imap.closeBox(true,(err) => { //Pass in false to avoid delete-flagged messages being removed
if (err){
console.log(err);
}
});
connection.end();
});
});
});
},'send email to seller and wait for mailBox notification': function (browser) {
// script to send an email to the mailBox...
},'get new email info': function(browser) {
const createPromise = ms => new Promise((resolve,reject) => {
setTimeout(() => resolve(ms),ms)
});
function findUnseenEmails(connection) {
return connection.openBox('INBox').then(function () {
var searchCriteria = ['UNSEEN'];
var fetchOptions = {
bodies: ['HEADER','TEXT'],markSeen: false
};
return connection.search(searchCriteria,fetchOptions).then(function (results) {
var subjects = results.map(function (res) {
return res.parts.filter(function (part) {
return part.which === 'HEADER';
})
[0].body.subject[0];
});
return subjects.length > 0 ? subjects : createPromise(30000).then(function() { return findUnseenEmails(connection);
});
});
});
}
imaps.connect(config).then(function (connection) {
return findUnseenEmails(connection)
})
.then((subjects) => console.log(JSON.stringify(subjects)));
},'Closing the browser': function (browser) {
browser.browserEnd();
}
};
但是,imap连接不会关闭,而是保持打开状态,这使我的测试套件无法完成,因为相关的测试从未真正完成。
我已经尝试在
之后的多个位置添加imap-simple命令connection.end()
imaps.connect(config).then(function (connection) {
return findUnseenEmails(connection)
})
脚本的一部分,但不起作用。
所以我只是想知道是否有人知道我应该在哪里添加此connection.end()
命令,以便在收到电子邮件后关闭该连接?
任何帮助将不胜感激。
解决方法
现在已在另一篇文章中使用以下内容解决了该问题;
if (subjects.length > 0) {
connection.end();
return subjects;
} else {
return createPromise(5000).then(function() { return findUnseenEmails(connection)});
}