A Modern, Lightweight FidoNet Technology Network (FTN) Mailer written in Go.
⚠️ EARLY ALPHA WARNING⚠️ This software is currently in Early Alpha. It is under active development. While it is functional, it may and it will contain bugs, incomplete features, or breaking changes.
Do not use this in a production environment without proper backups and monitoring.
MoMail is a fresh take on the classic FTN mailer, designed for the modern age. Built with Go, it offers a single-binary deployment, low resource usage, and a built-in web dashboard for easy monitoring. It implements the BinkP protocol to exchange mail packets and files with other nodes in FidoNet and compatible networks.
- Modern Core: Written in pure Go (Golang) for performance and portability.
- BinkP 1.0 Support: Full implementation of the BinkP protocol, including CRAM-MD5 authentication. (Not fully completed yet)
- Smart Routing:
- Standard Binkley-style outbound directory structure (BSO).
- Supports 4D addressing (Zone:Net/Node.Point).
- Automatic outbound scanning using file system notifications.
- Flexible Lookup:
- DNS-based address resolution (binkp.net).
- Legacy Nodelist support (compiles and uses raw nodelists).
- Automation & Scripting:
- Cron Scheduler: Built-in cron-like scheduler to run maintenance scripts or polls.
- File Triggers: Execute external commands automatically when specific files (like
*.pktor*.tic) are received.
- Observability:
- Web Dashboard: A beautiful, real-time web interface to monitor active sessions, traffic, and queues.
- Live Logs: WebSocket-based log streaming directly to your browser.
- HTTP API: Full control over the mailer via a RESTful API.
- Security:
- Secure/Insecure inbound separation.
- Option to refuse unauthenticated traffic.
- Easy Deployment:
- Docker-ready (Dockerfile included).
- Single YAML configuration file.
- Go 1.23 or higher (if building from source)
- A valid FidoNet address and uplink.
-
Clone the repository:
git clone https://github.com/yourusername/momail.git cd momail -
Build the binary:
go build -o momail . -
Configure: Copy the distribution config and edit it with your details.
mkdir -p run/config run/logs run/inbound run/outbound cp config.yaml.dist run/config/config.yaml nano run/config/config.yaml
-
Run:
./momail -c run/config/config.yaml
MoMail can be run as a daemon to handle mail continuously, or as a one-off command for specific tasks.
-
Run as a daemon:
# The -w flag enables automatic config reloading on change. ./momail -c ./run/config/config.yaml -w -
Poll a node immediately (dials the node right away):
./momail -p 2:5020/828
-
Queue a poll (creates a flow file for the scheduler to pick up):
# Normal poll (.flo) ./momail -q 2:5020/828 # Crash poll (.clo, highest priority) ./momail -q 2:5020/828 --crash
MoMail includes a real-time web dashboard for monitoring sessions, queues, and logs.
- Open in Browser:
http://localhost:8080/dashboard - Authentication: If you set an
api_tokeninconfig.yaml, append it to the URL:http://localhost:8080/dashboard?token=YOUR_SECRET_TOKEN
The dashboard allows you to:
- Monitor active BinkP sessions and traffic.
- View and manage the outbound mail queue.
- Watch live logs and control the mailer (scan, mute, etc).
MoMail is designed to run in a container.
# Build the image
docker build -t momail .docker run -d \
-p 24554:24554 \
-p 8080:8080 \
-v $(pwd)/run:/app/run \
--name momail \
momailMoMail is designed to be cross-platform and runs on Linux, macOS, and Windows.
However, when defining command for triggers or tasks in your config.yaml, be aware that these commands are executed by the operating system's default shell.
- On Linux/macOS and other Unix-like systems, commands are executed via
sh -c "...". - On Windows, commands are executed via
cmd /C "...".
You must write your commands to be compatible with the target operating system's shell. For example, a simple file copy would be cp source dest on Linux but copy source dest on Windows.
For convenience, the {file} placeholder in trigger commands will always have its path separators converted to forward slashes (/), which is compatible with both sh and modern cmd.exe/PowerShell.
MoMail supports reloading its configuration without restarting the daemon. The method depends on your operating system.
-
On Linux/macOS, you can send the
SIGHUPsignal to themomailprocess to trigger a configuration reload.pkill -HUP momail
-
On Windows, signals like
SIGHUPare not available. You can trigger a reload in two ways:-
File Watching: If you start the daemon with the
-wor--watch-configflag, it will automatically reload whenconfig.yamlis saved. -
API Call: You can send a request to the built-in HTTP API. This is useful for scripting or manual reloads. You can use
curl(included in modern Windows) or PowerShell.Using
curl(from Command Prompt):curl -X POST http://localhost:8080/api/control -H "Content-Type: application/json" -d "{\"command\": \"reload\"}"
If you have set an
api_tokenin your config, you must provide it as a Bearer token in the header:curl -X POST http://localhost:8080/api/control -H "Authorization: Bearer YOUR_SECRET_TOKEN" -H "Content-Type: application/json" -d "{\"command\": \"reload\"}"
Using PowerShell:
Invoke-RestMethod -Uri http://localhost:8080/api/control -Method Post -Body '{"command": "reload"}' -ContentType 'application/json' # With an API token: # Invoke-RestMethod -Uri http://localhost:8080/api/control -Method Post -Body '{"command": "reload"}' -ContentType 'application/json' -Headers @{"Authorization"="Bearer YOUR_SECRET_TOKEN"}
-

