在递归中结束imap-simple连接

问题描述

我目前有一个脚本,该脚本使用递归每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)});
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...