A simple SMTP server for receiving emails with REST API access
Project description
AEmail - Simple Email Receive Server
A simple SMTP server for receiving emails with REST API access. Perfect for testing, development, and automation scenarios where you need to receive emails programmatically.
Features
- ๐ Simple SMTP Server: Receives emails on any address with your domain
- ๐ REST API: Easy access to received emails via HTTP endpoints
- ๐พ Flexible Storage: In-memory or SQLite database storage
- ๐ง Easy Configuration: Environment variables and config file support
- ๐ฆ Poetry Package: Professional Python packaging with wheel support
- ๐ฅ๏ธ Command Line Tool: Simple CLI for starting the server
- ๐จ Web Interface: Modern web UI for browsing emails
- ๐ Search Functionality: Find emails by sender or recipient
Use Cases
- Batch Registration: Register multiple accounts and receive verification emails
- Email Testing: Test email functionality in development environments
- Automation: Programmatically access received emails for processing
- Development: Mock email server for local development
Quick Start
Installation
# Install with pip
pip install aemail
# Or install with Poetry
poetry add aemail
Basic Usage
# Start the server with default settings
aemail-server
# Start with custom ports
aemail-server --smtp-port 2525 --rest-port 8080
# Start with persistent database
aemail-server --db-file emails.db
# Start with custom config
aemail-server --config my-config.ini
DNS Configuration
To receive emails for your domain, configure DNS records:
A Record
Point your mail subdomain to your server IP:
A mx YOUR.SERVER.IP.ADDRESS
MX Record
Configure MX record to route emails to your server:
MX * mx.yourdomain.com
The
*wildcard means ALL subdomains will be routed to your server. Examples:test@yourdomain.com,anything@sub.yourdomain.comThis gives you unlimited email addresses!
API Endpoints
The server provides a REST API for accessing received emails:
GET /all
Get all stored messages (last 100)
curl http://localhost:14000/all
GET /from/{email}
Get messages from a specific sender
curl http://localhost:14000/from/sender@example.com
GET /to/{email}
Get messages to a specific recipient
curl http://localhost:14000/to/recipient@example.com
GET /health
Health check endpoint
curl http://localhost:14000/health
Response Format
[
{
"from": "sender@example.com",
"to": ["recipient@example.com"],
"to0": "recipient@example.com",
"subject": "Test Email",
"content": "Email content here...",
"time": "2024-01-01T12:00:00"
}
]
Configuration
Config File (cfg.ini)
[smtpd]
host = :: # Listen on all interfaces (IPv4 and IPv6)
port = 25
[rest]
port = 14000
Environment Variables
Override config file settings with environment variables:
SMTP_HOST- SMTP server host (default: :: - all interfaces)SMTP_PORT- SMTP server port (default: 25)REST_PORT- REST API port (default: 14000)
Command Line Options
aemail-server --help
Options:
--config, -c Path to configuration file
--smtp-host SMTP server host
--smtp-port SMTP server port
--rest-port REST API port
--db-file SQLite database file path
--verbose, -v Enable verbose logging
--version Show version
Development
From Source
# Clone the repository
git clone https://github.com/lycying/aemail.git
cd aemail
# Install Poetry (if not already installed)
curl -sSL https://install.python-poetry.org | python3 -
# Install dependencies
poetry install
# Run the server
poetry run aemail-server
# Run tests
poetry run pytest
# Build wheel package
poetry build
Project Structure
aemail/
โโโ crazy_email_recv_srv/ # Main package
โ โโโ __init__.py
โ โโโ cli.py # Command line interface
โ โโโ config.py # Configuration management
โ โโโ data.py # Data access layer
โ โโโ email_handler.py # SMTP email processing
โ โโโ server.py # Main server
โ โโโ utils.py # Utility functions
โ โโโ web_api.py # REST API
โโโ tests/ # Test suite
โโโ static/ # Web interface files
โโโ pyproject.toml # Poetry configuration
โโโ README.md
Testing
Send a test email to any address at your domain:
# Example: Send email to test@yourdomain.com
# Then query the API:
curl http://localhost:14000/to/test@yourdomain.com
Or use the web interface at: http://localhost:14000
License
MIT License - see LICENSE file for details.
Contributing
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests
- Submit a pull request
Support
- ๐ Issues: GitHub Issues
- ๐ Documentation: GitHub Wiki
- ๐ฌ Discussions: GitHub Discussions
Note: This tool is for testing and development purposes. Use responsibly and in compliance with applicable laws and regulations.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file aemail-0.2.3.tar.gz.
File metadata
- Download URL: aemail-0.2.3.tar.gz
- Upload date:
- Size: 18.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.3 CPython/3.13.5 Windows/11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b6585bf3b901618a3314dc999db8bbd4b62448e03e8f98f549ca6696a6beca52
|
|
| MD5 |
169b59924dc9586708a29440a9964d5b
|
|
| BLAKE2b-256 |
f3f30f37c48c1f9e6fa9ceeb5b7c73d7ecdc5f0cf75ee3b57f7747e4653925a1
|
File details
Details for the file aemail-0.2.3-py3-none-any.whl.
File metadata
- Download URL: aemail-0.2.3-py3-none-any.whl
- Upload date:
- Size: 21.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.3 CPython/3.13.5 Windows/11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fd0fe5ec1c493e937de663abcb44d279769e28f392b330f5d4e879ebd395a89b
|
|
| MD5 |
6234782db5f0b5968a61ea8590dfd132
|
|
| BLAKE2b-256 |
b8f3b25bdd82a56f5ed1f7f593e6acc59124088fecccf3b5ca7e7aa362a174ab
|