outlook2api / README.md
ohmyapi's picture
fix: use valid HF Space colorFrom value
7c1d695
---
title: Outlook2API
emoji: πŸ“§
colorFrom: red
colorTo: yellow
sdk: docker
app_port: 7860
---
# Outlook2API
Mail.tm-compatible REST API for Outlook/Hotmail/Live accounts with admin panel and batch account registration.
## Features
- **Mail API** β€” Mail.tm-compatible Hydra API endpoints (domains, accounts, token, messages)
- **Admin Panel** β€” Web UI for account management, bulk import/export, webmail with compose/reply, stats dashboard
- **Batch Registration** β€” Automated Outlook account creation via GitHub Actions
- **CI Auto-Import** β€” Registered accounts automatically imported to admin panel
- **Verification Code Extraction** β€” `GET /messages/{id}/code` extracts OTP from emails
## Quick Start
```bash
# Install dependencies
pip install -r requirements-api.txt
# Start the API server
python -m outlook2api.app
# Open http://localhost:8001 for homepage
# Open http://localhost:8001/admin for admin panel (default password: bk@3fd3E)
```
### Docker
```bash
cp .env.example .env
docker compose up -d outlook2api
```
## API Endpoints
### Mail API (Mail.tm-compatible)
| Method | Path | Auth | Description |
|--------|------|------|-------------|
| GET | `/domains` | No | List supported email domains |
| POST | `/accounts` | No | Register account (validates IMAP) |
| POST | `/token` | No | Get JWT bearer token |
| GET | `/me` | Bearer | Current user info |
| GET | `/messages` | Bearer | List inbox messages |
| GET | `/messages/{id}` | Bearer | Get single message |
| GET | `/messages/{id}/code` | Bearer | Extract verification code |
| DELETE | `/accounts/me` | Bearer | Delete account |
### Admin API
| Method | Path | Description |
|--------|------|-------------|
| POST | `/admin/api/login` | Login (returns token) |
| GET | `/admin/api/stats` | Dashboard statistics |
| GET | `/admin/api/accounts` | List accounts (search, filter, paginate) |
| POST | `/admin/api/accounts` | Add single account |
| POST | `/admin/api/accounts/bulk` | Bulk import (`["email:pass",...]`) |
| POST | `/admin/api/accounts/upload` | File upload (email:password per line) |
| PATCH | `/admin/api/accounts/{id}` | Toggle active / update notes |
| DELETE | `/admin/api/accounts/{id}` | Delete account |
| GET | `/admin/api/accounts/{id}/password` | Reveal password |
| GET | `/admin/api/accounts/{id}/messages` | Fetch messages via IMAP |
| POST | `/admin/api/accounts/{id}/send` | Send email via SMTP |
| GET | `/admin/api/export` | Export all active accounts |
## CI Auto-Import
GitHub Actions automatically imports registered accounts to the admin panel.
**Required secrets:**
- `CAPTCHA_CLIENT_KEY` β€” YesCaptcha/CapSolver API key
- `PROXY_URL` β€” HTTP/SOCKS5 proxy
- `OUTLOOK2API_URL` β€” Admin panel URL (e.g., `https://ohmyapi-outlook2api.hf.space`)
- `ADMIN_PASSWORD` β€” Admin panel password
```bash
# Trigger registration + auto-import
gh workflow run register-outlook.yml -f count=5 -f threads=1
```
## Environment Variables
| Name | Default | Description |
|------|---------|-------------|
| `OUTLOOK2API_JWT_SECRET` | `change-me-in-production` | JWT signing secret |
| `ADMIN_PASSWORD` | `bk@3fd3E` | Admin panel password |
| `DATABASE_URL` | `sqlite+aiosqlite:///./data/outlook2api.db` | Database URL |
| `OUTLOOK2API_HOST` | `0.0.0.0` | API bind host |
| `OUTLOOK2API_PORT` | `8001` | API bind port |
| `OUTLOOK_SMTP_HOST` | `smtp-mail.outlook.com` | SMTP server host |
| `OUTLOOK_SMTP_PORT` | `587` | SMTP server port |
## HuggingFace Deployment
Deployed at: **https://ohmyapi-outlook2api.hf.space**
## Project Structure
```
outlook2api/
β”œβ”€β”€ outlook2api/ # FastAPI mail API + admin
β”‚ β”œβ”€β”€ app.py # Application entry point
β”‚ β”œβ”€β”€ routes.py # Mail.tm-compatible API routes
β”‚ β”œβ”€β”€ admin_routes.py # Admin API routes
β”‚ β”œβ”€β”€ database.py # SQLAlchemy models (Account)
β”‚ β”œβ”€β”€ auth.py # JWT auth helpers
β”‚ β”œβ”€β”€ config.py # Environment config
β”‚ β”œβ”€β”€ outlook_imap.py # IMAP client
β”‚ β”œβ”€β”€ outlook_smtp.py # SMTP client (send email)
β”‚ β”œβ”€β”€ store.py # Legacy JSON file store
β”‚ └── static/ # Frontend
β”‚ β”œβ”€β”€ index.html # Homepage
β”‚ └── admin.html # Admin panel
β”œβ”€β”€ register/ # Batch registration
β”‚ β”œβ”€β”€ outlook_register.py # DrissionPage registrar
β”‚ └── captcha.py # FunCaptcha cloud solver
β”œβ”€β”€ .github/workflows/
β”‚ └── register-outlook.yml # CI: register + auto-import
β”œβ”€β”€ Dockerfile.api
β”œβ”€β”€ Dockerfile.register
β”œβ”€β”€ docker-compose.yml
β”œβ”€β”€ requirements-api.txt
└── requirements-register.txt
```