首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何检索imap-simple中的“已发送”邮箱

如何检索imap-simple中的“已发送”邮箱
EN

Stack Overflow用户
提问于 2020-01-27 11:37:14
回答 2查看 1.5K关注 0票数 4

我在节点js中使用imap-简单。我要找回gmail的邮箱。我的代码如下:

代码语言:javascript
运行
复制
 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方法

代码语言:javascript
运行
复制
  this.getSent(['ALL'], response => {
    
  });

我得到以下错误的错误:未知邮箱:发送(失败)‘

我尝试了connection.openBox('[Gmail]/Sent Mail'),但是我得到了类似的错误

错误:未知邮箱:Gmail/已发送邮件(失败)‘

我使用gmail

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-01-28 06:43:32

我使用getBoxes方法获得了所有文件夹名。然后我看到文件夹的名字是阿塞拜疆语的。

代码语言:javascript
运行
复制
connection.getBoxes().then(response => {
                var r = response;
            });

问题出在谷歌的设置上。我用了阿塞拜疆语的谷歌。如果使用google不同的语言,文件夹名就会自动翻译成该语言。我把谷歌语言改成了英语,问题解决了。这对我来说很有效。感谢每个人。

我使用[Gmail]/Sent Mail.

我的代码的正确版本如下:

代码语言:javascript
运行
复制
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
            });
        });
    }
票数 5
EN

Stack Overflow用户

发布于 2022-11-14 20:34:45

我也有同样的问题,我必须自己想办法:

connection.openBox('SENT')替换为connection.openBox('INBOX.Sent')connection.openBox('INBOX/Sent')

取决于指定的分隔符(。或/或任何其他),您可以通过添加

代码语言:javascript
运行
复制
connection.getBoxes().then(response => {
  var r = response;
  console.log(r); // if nothing then try console.log(JSON.stringify(r))
});

我希望这能解决你的问题。祝您今天愉快!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59930385

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档