这里有一个HTML
模块,它连接到我的gmail帐户并在日期后下载retrieve_email.js
电子邮件。该代码几乎是从UNSEEN
模块] 1的示例复制而来的。
[imap
在const Imap = require('imap');
const inspect = require('util').inspect;
const simpleParser = require('mailparser').simpleParser;
const imap = new Imap({
user: 'mygmail@gmail.com',
password: 'mypassword',
host: 'imap.gmail.com',
port: 993,
tls: true
});
function openInbox(callback) {
imap.openBox('INBOX', true, callback);
};
async function parse_email(body) {
let parsed = simpleParser(body);
...............
};
module.exports = function() {
imap.once('ready', function() {
openInbox(function(err, box) {
if (error) throw err;
imap.search(['UNSEEN', ['SINCE', 'May 20, 2018']], function(err, results){
if (err) throw err;
var f = imap.fetch(results, {bodies: ''});
f.on('message', function(msg, seqno) {
console.log('Message #%d', seqno);
var prefix = '(#' + seqno + ') ';
msg.on('body', function(stream, info) {
if (info.which === 'TEXT')
console.log(prefix + 'Body [%s] found, %d total bytes', inspect(info.which), info.size);
var buffer = '', count = 0;
stream.on('data', function(chunk) {
count += chunk.length;
buffer += chunk.toString('utf8');
parse_email(buffer);
if (info.which === 'TEXT')
console.log(prefix + 'Body [%s] (%d/%d)', inspect(info.which), count, info.size);
});
stream.once('end', function() {
if (info.which !== 'TEXT')
console.log(prefix + 'Parsed header: %s', inspect(Imap.parseHeader(buffer)));
else
console.log(prefix + 'Body [%s] Finished', inspect(info.which));
});
});
msg.once('attributes', function(attrs) {
console.log(prefix + 'Attributes: %s', inspect(attrs, false, 8));
});
msg.once('end', function() {
console.log(prefix + 'Finished');
});
});
f.once('error', function(err) {
console.log('Fetch error: ' + err);
});
f.once('end', function() {
console.log('Done fetching all messages');
imap.end();
});
});
});
});
imap.once('error', function(err) {
console.log(err);
});
imap.once('end', function() {
console.log('Connection ended');
});
imap.connect();
};
中调用该模块时,我可以在调试中看到从上到下扫描代码,并且扫描的最后一行是index.js
,然后返回到下一行。 imap.connect()
,没有与gmail帐户的连接,也没有检索电子邮件的操作。上面的代码有什么问题?
答案 0 :(得分:1)
看看这个,这是Google的Gmail API参考。在该页面上,有一个使用Node.js进行连接的示例。
https://developers.google.com/gmail/api/quickstart/nodejs
这是来自同一文档的示例,向您展示了如何使用q参数搜索和检索消息列表:
https://developers.google.com/gmail/api/v1/reference/users/messages/list
P.S。在我的评论中,我只是问您是否确定您已经完成了通过代码访问Gmail帐户所需的所有其他配置工作,这意味着创建应用程序,授权OAuth或在某种情况下授权不安全的应用程序访问,只需查看链接,您可能会发现您缺少某些内容。
您真的需要使用IMAP包吗???
答案 1 :(得分:0)
发现的问题与Avast邮件屏蔽有关,因为中间人拦截了IMAP通信并导致HTTPS失败。此外,IDE调试器会停在某处以保持连接活动但尚未准备好。这是detail of the solution。