Files
Proton-Api/README.md
2025-12-30 20:35:14 +01:00

213 lines
3.1 KiB
Markdown

# 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.