85 lines
2.7 KiB
Markdown
85 lines
2.7 KiB
Markdown
# ImapFlow
|
|
|
|
ImapFlow is a modern and easy-to-use IMAP client library for Node.js.
|
|
|
|
> [!NOTE]
|
|
> Managing an IMAP connection is cool, but if you are only looking for an easy way to integrate email accounts, then ImapFlow was built for [EmailEngine Email API](https://emailengine.app/). It's a self-hosted software that converts all IMAP accounts to easy-to-use REST interfaces.
|
|
|
|
The focus for ImapFlow is to provide easy to use API over IMAP. Using ImapFlow does not expect knowledge about specific IMAP details. A 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-EXT-1` extension, then `labels` value is not included in the response.
|
|
|
|
## Source
|
|
|
|
Source code is available from [Github](https://github.com/postalsys/imapflow).
|
|
|
|
## Usage
|
|
|
|
First install the module from npm:
|
|
|
|
```
|
|
npm install imapflow
|
|
```
|
|
|
|
next import the ImapFlow class into your script:
|
|
|
|
```js
|
|
const { ImapFlow } = require('imapflow');
|
|
```
|
|
|
|
### Promises
|
|
|
|
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.
|
|
|
|
```js
|
|
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
|
|
// client.mailbox includes information about currently selected mailbox
|
|
// "exists" value is also the largest sequence number available in the mailbox
|
|
let message = await client.fetchOne(client.mailbox.exists, { 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](https://imapflow.com/module-imapflow-ImapFlow.html).
|
|
|
|
## License
|
|
|
|
© 2020-2024 Postal Systems OÜ
|
|
|
|
Licensed under **MIT-license**
|