我希望收到电子邮件并标记未见过的电子邮件,如node-imap所示。我已经完成的接收,但我不知道如何标记看不见的电子邮件。 API提供的函数似乎在example中用var f = imap.fetch(results, { bodies: '' });
替换代码var f = imap.fetch(results, { markSeen : true });
,但它似乎不起作用。我该怎么办?
答案 0 :(得分:5)
imap.openBox('INBOX', false, cb);
第二个false
}表示打开邮箱不是只读模式。
答案 1 :(得分:3)
我尝试将邮件状态设置为false imap.openBox('INBOX', false, cb)
,但最初无效。
然后我更改了body
中的数据并将其设置为HEADER.FIELDS (FROM TO SUBJECT DATE)
它的工作原理。我不知道这是如何相关的,但它现在正在工作,而邮箱的只读状态显然是假的。
非工作代码:
imap.fetch(results, { bodies: '', markSeen: true });
工作代码:
imap.fetch(results, { bodies: 'HEADER.FIELDS (FROM TO SUBJECT DATE)', markSeen: true });
答案 2 :(得分:2)
imap.openBox("INBOX", false, function(err, mailBox) {
if (err) {
console.error(err);
return;
}
imap.search(["UNSEEN"], function(err, results) {
imap.setFlags(results, ['\\Seen'], function(err) {
if (!err) {
console.log("marked as read");
} else {
console.log(JSON.stringify(err, null, 2));
}
});
var f = imap.fetch(results, { bodies: "" });
f.on("message", processMessage);
f.once("error", function(err) {
return Promise.reject(err);
});
f.once("end", function() {
console.log("Done fetching all unseen messages.");
imap.end();
});
});
});
而processMessage
function processMessage(msg seqno){
/*use mailparser*/}
所以基本上结果包含uuid
需要明确调用imap.setFlags([uuids],[' \ Seen'],cb)函数使其标记为已读
答案 3 :(得分:0)
以下是相同的工作示例。
var Imap = require('imap'),
inspect = require('util').inspect;
var imap = new Imap({
user: 'USERNAME',
password: 'PASSWORD',
host: 'IMAP_HOST',
port: 993, // Default port is 993
tls: true,
tlsOptions: {rejectUnauthorized: false}
});
function openInbox(cb) {
// openReadOnly = false
imap.openBox('Inbox', false, cb);
}
imap.once('ready', function () {
openInbox(function (err, box) {
if (err) throw err;
// Search emails having "Some Subject" in their Subject headers
imap.search([['HEADER', 'SUBJECT', 'Some Subject']], function (err, results) {
if (err) throw err;
try {
var f = imap.fetch(results, {bodies: 'TEXT'});
f.on('message', function (msg, seqno) {
msg.on('body', function (stream, info) {
var buffer = '';
stream.on('data', function (chunk) {
buffer += chunk.toString('utf8');
});
stream.once('end', function () {
// Mark the above mails as read
msg.once('attributes', function (attrs) {
let uid = attrs.uid;
imap.addFlags(uid, ['\\Seen'], function (err) {
if (err) {
console.log(err);
} else {
console.log("Marked as read!")
}
});
});
});
});
});
f.once('end', function () {
imap.end();
});
} catch (errorWhileFetching) {
console.log(errorWhileFetching.message);
imap.end();
}
});
});
});
imap.connect();