Readme
This commit is contained in:
212
README.md
Normal file
212
README.md
Normal file
@@ -0,0 +1,212 @@
|
||||
# ProtonMail IMAP HTTP Gateway
|
||||
|
||||
This project exposes a lightweight HTTP API on top of an IMAP mailbox, intended for **read-only inspection and basic message management** (read, delete) using ProtonMail Bridge or any IMAP-compatible server.
|
||||
|
||||
It uses Node.js, Express, and IMAP to translate mailbox operations into JSON responses.
|
||||
|
||||
---
|
||||
|
||||
## Overview
|
||||
|
||||
The application consists of two layers:
|
||||
|
||||
1. **IMAP access layer**
|
||||
|
||||
* Connects to an IMAP server
|
||||
* Fetches recent messages or individual messages
|
||||
* Parses emails into structured objects
|
||||
* Supports folder listing, marking messages as read, and deletion
|
||||
|
||||
2. **HTTP server layer**
|
||||
|
||||
* Exposes REST-style endpoints
|
||||
* Returns formatted JSON responses
|
||||
* Designed for local tools, dashboards, or automation
|
||||
|
||||
---
|
||||
|
||||
## Requirements
|
||||
|
||||
* Node.js 18 or newer (ES modules required)
|
||||
* ProtonMail Bridge **or** any IMAP server
|
||||
* Valid IMAP credentials
|
||||
|
||||
---
|
||||
|
||||
## Installation
|
||||
|
||||
```bash
|
||||
npm install
|
||||
```
|
||||
|
||||
Required dependencies:
|
||||
|
||||
* `express`
|
||||
* `imap`
|
||||
* `mailparser`
|
||||
|
||||
---
|
||||
|
||||
## Configuration
|
||||
|
||||
Create a `data.json` file in the project root:
|
||||
|
||||
```json
|
||||
{
|
||||
"user": "imap-username",
|
||||
"password": "imap-password",
|
||||
"host": "127.0.0.1",
|
||||
"port": 1143,
|
||||
"tls": false
|
||||
}
|
||||
```
|
||||
|
||||
Notes:
|
||||
|
||||
* ProtonMail **requires ProtonMail Bridge** to expose IMAP locally.
|
||||
* TLS depends on your bridge or server configuration.
|
||||
|
||||
---
|
||||
|
||||
## Running the Server
|
||||
|
||||
```bash
|
||||
node index.js
|
||||
```
|
||||
|
||||
Default port:
|
||||
|
||||
```
|
||||
http://localhost:3000
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## API Endpoints
|
||||
|
||||
### List recent emails (last 10)
|
||||
|
||||
```
|
||||
GET /emails
|
||||
```
|
||||
|
||||
Response:
|
||||
|
||||
```json
|
||||
{
|
||||
"type": "emails",
|
||||
"data": [
|
||||
{
|
||||
"seqno": 42,
|
||||
"subject": "Example subject",
|
||||
"from": "Sender <sender@example.com>",
|
||||
"date": "2025-01-01T12:00:00.000Z"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### List emails from a specific folder
|
||||
|
||||
```
|
||||
GET /emails/folder/{folderPath}
|
||||
```
|
||||
|
||||
Example:
|
||||
|
||||
```
|
||||
/emails/folder/INBOX/Archive
|
||||
```
|
||||
|
||||
Folder paths are URL-decoded and support nesting.
|
||||
|
||||
---
|
||||
|
||||
### Fetch a single email (full body)
|
||||
|
||||
```
|
||||
GET /message/{seqno}
|
||||
```
|
||||
|
||||
Response includes:
|
||||
|
||||
* subject
|
||||
* sender
|
||||
* date
|
||||
* plain text body
|
||||
|
||||
---
|
||||
|
||||
### Mark email as read
|
||||
|
||||
```
|
||||
GET /flag/read/{seqno}
|
||||
```
|
||||
|
||||
Adds the `\Seen` flag.
|
||||
|
||||
---
|
||||
|
||||
### Remove an email
|
||||
|
||||
```
|
||||
GET /removeMessage/{seqno}
|
||||
```
|
||||
|
||||
Marks the message as `\Deleted` and expunges it.
|
||||
|
||||
---
|
||||
|
||||
### List all folders
|
||||
|
||||
```
|
||||
GET /folders
|
||||
```
|
||||
|
||||
Returns a flattened list of folder paths.
|
||||
|
||||
---
|
||||
|
||||
## Design Notes
|
||||
|
||||
* IMAP connections are **short-lived**
|
||||
|
||||
* Each request opens and closes its own connection
|
||||
* Messages are referenced by **sequence number**
|
||||
|
||||
* Sequence numbers change when the mailbox changes
|
||||
* Responses are formatted with tab-indented JSON for readability
|
||||
* No authentication layer is provided
|
||||
|
||||
* Intended for trusted local usage
|
||||
|
||||
---
|
||||
|
||||
## Limitations
|
||||
|
||||
* No pagination support
|
||||
* No attachment handling
|
||||
* Sequence numbers are not stable identifiers
|
||||
* No concurrency control
|
||||
* No caching
|
||||
|
||||
---
|
||||
|
||||
## Intended Use Cases
|
||||
|
||||
* Local dashboards
|
||||
* Email inspection tools
|
||||
* Automation scripts
|
||||
* Bridging IMAP into environments that cannot speak IMAP directly
|
||||
|
||||
---
|
||||
|
||||
## Security Notice
|
||||
|
||||
This server exposes mailbox access over HTTP.
|
||||
Run it **only on trusted machines and networks**.
|
||||
|
||||
Do not expose it publicly.
|
||||
|
||||
Reference in New Issue
Block a user