Skip to content
IMAP client module for Node.js, extracted from NodemailerApp
JavaScript
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
assets added favicon for documentation page Feb 2, 2020
examples v1.0.7 Jan 31, 2020
lib v1.0.18 Feb 18, 2020
test initial import Jan 14, 2020
.eslintrc initial import Jan 14, 2020
.gitignore initial import Jan 14, 2020
.npmignore Fixed eternal loop when breaking IDLE after connection is closed Jan 28, 2020
.prettierrc.js initial import Jan 14, 2020
CHANGELOG.md v1.0.16 Feb 15, 2020
Gruntfile.js initial import Jan 14, 2020
README.md updated README Feb 2, 2020
jsdoc.json search Jan 30, 2020
package.json v1.0.18 Feb 18, 2020
types.js vv1.0.6 Jan 30, 2020

README.md

ImapFlow

IMAP Client for Node.js extracted from the NodemailerApp project.

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

Source code is available from Github.

Usage

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: 'garland.mcclure71@ethereal.email',
        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));

Documentation

API reference.

ImapFlow has TS typings set for compatible editors.

License

© 2020 Andris Reinman

Licensed for evaluation use only

You can’t perform that action at this time.