javascript - 如何在 imap-simple 中检索 "sent"邮箱

标签 javascript node.js imap

我用 imap-simple在 Node js 中。
我想找回已发送的gmail邮箱。我的代码如下:

 getSent(searchCriteria: string[], callBack: any) {
        imaps.connect(this.imapConfig).then(function (connection) {

            return connection.openBox('SENT').then(function () {
                var fetchOptions = {
                    bodies: ['HEADER', 'TEXT', ''],
                    markSeen: false
                };

                return connection.search(searchCriteria, fetchOptions).then(function (results) {

                    let mails = results.map(res => {
                        return {
                            part: res.parts.find(part => part.which === ''),
                            attributes: res.attributes
                        };
                    });

                    mails = [].concat(...mails);

                    mails = mails.map(mail => {
                        return new Promise((resolve, reject) => {

                            var id = mail.attributes.uid;
                            var idHeader = "Imap-Id: " + id + "\r\n";

                            simpleParser(idHeader + mail.part.body, (error, mail) => {
                                if (error)
                                    reject(error);
                                else {
                                    resolve(new Email({
                                        sentDate: mail.date,
                                        from: mail.from.text,
                                        to: mail.to.text,
                                        messageId: mail.messageId,
                                        body: mail.html,
                                        subject: mail.subject
                                    }));
                                }
                            });
                        })
                    });

                    Promise.all(mails).then(response => {
                        callBack({
                            success: true,
                            emails: response,
                            error: undefined
                        });
                    }, error => {
                        callBack({
                            success: false,
                            emails: [],
                            error: error
                        });
                    });

                }, function (error) {
                    callBack({
                        success: false,
                        emails: [],
                        error: error
                    });
                });
            }, function (error) {
                callBack({
                    success: false,
                    emails: [],
                    error: error
                });
            });
        }, function (error) {
            callBack({
                success: false,
                emails: [],
                error: error
            });
        });
    }
如果我如下调用 getSent 方法
  this.getSent(['ALL'], response => {
    
  });
 
我收到以下错误
“错误:未知邮箱:已发送(失败)”
我试试connection.openBox('[Gmail]/Sent Mail') ,但我得到类似的错误
'错误:未知邮箱:[Gmail]/已发送邮件(失败)'
我使用 gmail .

最佳答案

我使用 getBoxes 方法获得了所有文件夹名称。然后我看到文件夹名称以阿塞拜疆语言出现。

connection.getBoxes().then(response => {
                var r = response;
            });

问题出在谷歌设置中。我用阿塞拜疆语的谷歌。如果使用 google 不同的语言,文件夹名称会自动翻译成该语言。我将谷歌语言更改为英语,问题解决了。这对我有用。谢谢大家。

enter image description here

我用 [Gmail]/Sent Mail .

我的代码的正确版本如下:
getSent(searchCriteria: string[], callBack: any) {
        imaps.connect(this.imapConfig).then(function (connection) {

            return connection.openBox('[Gmail]/Sent Mail').then(function () {
                var fetchOptions = {
                    bodies: ['HEADER', 'TEXT', ''],
                    markSeen: false
                };

                return connection.search(searchCriteria, fetchOptions).then(function (results) {

                    let mails = results.map(res => {
                        return {
                            part: res.parts.find(part => part.which === ''),
                            attributes: res.attributes
                        };
                    });

                    mails = [].concat(...mails);

                    mails = mails.map(mail => {
                        return new Promise((resolve, reject) => {

                            var id = mail.attributes.uid;
                            var idHeader = "Imap-Id: " + id + "\r\n";

                            simpleParser(idHeader + mail.part.body, (error, mail) => {
                                if (error)
                                    reject(error);
                                else {
                                    resolve(new Email({
                                        sentDate: mail.date,
                                        from: mail.from.text,
                                        to: mail.to.text,
                                        messageId: mail.messageId,
                                        body: mail.html,
                                        subject: mail.subject
                                    }));
                                }
                            });
                        })
                    });

                    Promise.all(mails).then(response => {
                        callBack({
                            success: true,
                            emails: response,
                            error: undefined
                        });
                    }, error => {
                        callBack({
                            success: false,
                            emails: [],
                            error: error
                        });
                    });

                }, function (error) {
                    callBack({
                        success: false,
                        emails: [],
                        error: error
                    });
                });
            }, function (error) {
                callBack({
                    success: false,
                    emails: [],
                    error: error
                });
            });
        }, function (error) {
            callBack({
                success: false,
                emails: [],
                error: error
            });
        });
    }

关于javascript - 如何在 imap-simple 中检索 "sent"邮箱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59930385/

相关文章:

javascript - 无法使用 protractor.js 从弹出窗口的下拉菜单中单击并选择一个值

node.js - Node --experimental-modules,请求的模块不提供名为的导出

php - 在 PHP 中使用 IMAP 下载附件到目录,随机工作

c# - 从 StreamSocket 读取时 DataReader 结果被截断

android - android 中的 getContent() 将输出作为 MimeMultiPart,但我实际上想要电子邮件正文内容

javascript - 更改 "speed"几秒钟

javascript - 将 javascript 变量传输到 Objective C (IOS)

javascript - 我已经使用 javascript/firebase 构建了应用程序,并希望它返回最后 5 个搜索并使每个搜索都可点击

node.js - 在本地网络服务器中运行node.js的问题

node.js - Joi 验证检查数据库中是否存在记录