IMAP Client library for IMAP API.
The focus for ImapFlow is to provide easy to use API over IMAP. Using ImapFlow does not expect knowledge about specific IMAP details, general understanding is good enough.
IMAP extensions are handled in the background, so for example you can always request labels
value from a {@link FetchQueryObject|fetch()} call but if the IMAP server does not support X-GM-EXT1
extension, then labels
value is not included in the response.
Source code is available from Github.
First install the module from npm:
$ npm install imapflow
next import the ImapFlow class into your script:
const { ImapFlow } = require('imapflow');
All ImapFlow methods use Promises, so you need to wait using await
or wait for the then()
method to fire until you get the response.
const { ImapFlow } = require('imapflow');
const client = new ImapFlow({
host: 'ethereal.email',
port: 993,
secure: true,
auth: {
user: '[email protected]',
pass: 'mW6e4wWWnEd3H4hT5B'
}
});
const main = async () => {
// Wait until client connects and authorizes
await client.connect();
// Select and lock a mailbox. Throws if mailbox does not exist
let lock = await client.getMailboxLock('INBOX');
try {
// fetch latest message source
let message = await client.fetchOne('*', { source: true });
console.log(message.source.toString());
// list subjects for all messages
// uid value is always included in FETCH response, envelope strings are in unicode.
for await (let message of client.fetch('1:*', { envelope: true })) {
console.log(`${message.uid}: ${message.envelope.subject}`);
}
} finally {
// Make sure lock is released, otherwise next `getMailboxLock()` never returns
lock.release();
}
// log out and close connection
await client.logout();
};
main().catch(err => console.error(err));
© 2020 Andris Reinman
Licensed under GNU Affero General Public License v3.0 or later