Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/postalsys/imapflow
IMAP Client library for EmailEngine Email API (https://emailengine.app)
https://github.com/postalsys/imapflow
Last synced: 5 days ago
JSON representation
IMAP Client library for EmailEngine Email API (https://emailengine.app)
- Host: GitHub
- URL: https://github.com/postalsys/imapflow
- Owner: postalsys
- License: other
- Created: 2020-01-14T09:45:06.000Z (almost 5 years ago)
- Default Branch: master
- Last Pushed: 2024-05-07T12:30:33.000Z (6 months ago)
- Last Synced: 2024-05-07T13:35:11.281Z (6 months ago)
- Language: JavaScript
- Homepage: https://imapflow.com
- Size: 817 KB
- Stars: 307
- Watchers: 4
- Forks: 55
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: .github/contributing.md
- Funding: .github/FUNDING.yml
- License: LICENSE.txt
- Code of conduct: .github/CODE_OF_CONDUCT.md
Awesome Lists containing this project
- awesome-starred - postalsys/imapflow - IMAP Client library for EmailEngine Email API (https://emailengine.app) (others)
README
# 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: '[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
// 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**