【问题标题】:Bad Protocol Error in Node.js imap libary when imap.searchimap.search 时 Node.js imap 库中的协议错误
【发布时间】:2018-04-25 09:08:33
【问题描述】:

我的 node.js(版本 8.9.1)库 imap 有问题。如果我向函数发送请求

getMails: function (req, res) {
var body = req.body
  , parser = new MailParser();
if(body.encryptedSecret !== undefined) {
  User.findOne({"email": req.user.email}, function (err, user) {
    var mailAccount = user.mailAccounts[0]
      , imap = new Imap({
      user: mailAccount.imap_user,
      password: mailAccount.imap_pass,
      host: mailAccount.imap_host,
      port: mailAccount.imap_port,
      tls: true
    });
    getMailsFromServer(parser, imap, res)
  });
} else {
  response.error(res, '400', '2-7')
}
}

我得到回应

{
"message": "error",
"internalErrrorCode": "2-9",
"data": {
    "type": "bad",
    "source": "protocol"
}
}

我的 getMailsFromServer 函数是:

imap.once('ready', function () {
imap.openBox('INBOX', true, function (err, box) {
  if (err) throw err;
  imap.search([ 'UNSEEN', ['SINCE', 'May 20, 2017'] ], function(err, results) {
    var f = imap.seq.fetch(results, { bodies: '' });
    f.on('message', function (msg, seqno) {
      msg.on('body', function (stream, info) {
        stream.on('data', function (chunk) {
          parser.write(chunk.toString("utf8"));
        })
      })
      msg.once('end', function () {
        parser.end();
      });
    })
    f.once('error', function (err) {
      error = true
      response.error(res, 500, '2-9', err)

    });
    f.once('end', function () {
      if (!error) {
        parser.on('data', function (data) {
          response.success(res, data.html)
        });
        console.log('Done fetching all messages!');
        imap.end();
      }
    });
  })
})
})

如果我删除 imap.search 并将 var f = imap.seq.fetch(results 设置为例如 var f = imap.seq.fetch( box.messages.total + ':*' 请求有效。 你可以在GitHub找到我的完整工作代码

谢谢, 为您提供帮助

【问题讨论】:

    标签: javascript node.js express imap node-imap


    【解决方案1】:

    对于搜索,日期必须采用特定格式,详见 RFC 3501:

    d-MON-YYYY

    d: 是一个月中某天的一位或两位数字
    MON: 是以下三个字母缩写之一:Jan、Feb、Mar、Apr、May、Jun、Jul、Aug , Sep, Oct, Nov, Dec
    YYYY: 是四位数的年份。

    示例:2017 年 1 月 3 日、1998 年 3 月 1 日、2000 年 6 月 22 日。

    我不太确定这一点,因为我不知道 node.js 和这个库,但您可能还必须将您的 [ 'UNSEEN', ['SINCE', 'May 20, 2017'] ] 折叠到一个数组中;没有必要嵌套它们。 [ 'UNSEEN', 'SINCE', 'May 20, 2017']

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-17
      • 1970-01-01
      • 1970-01-01
      • 2016-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多