opentrashmail/README.md

6.1 KiB

Open Trashmail

Open Trashmail

Apache License Hits

Selfhosted trashmail solution - Receive Emails via Web UI, JSON API and RSS feed

Screenshot of Open Trashmail

Features

  • Python-powered mail server that works out of the box for any domain you throw at it
  • RSS feed for every email address
  • JSON API for integrating it in your own projects. Can be used to automate 2fa emails
  • Handles attachments
  • Web interface to manage emails
  • Generates random email addresses
  • 100% file based, no database needed
  • Can be used as Email Honeypot

JSON API

Endpoint Explanation Example output
/json/[email-address] Returns an array of received emails with links to the attachments and the parsed text based body of the email. If ADMIN email is entered, will return all emails of all accounts
/json/[email-address]/[id] To see all the data of a received email, take the ID from the previous call and poll this to get the raw and HTML body of the email. Can be huge since the body can contain all attachments in base64
/json/listaccounts If SHOW_ACCOUNT_LIST is set to true in the config.ini, this endpoint will return an array of all email addresses which have received at least one email

Configuration

Just edit the config.ini You can use the following settings

  • URL -> The url under which the GUI will be hosted. No tailing slash! example: https://trashmail.mydomain.eu
  • DOMAINS -> Comma separated list of domains this mail server will be receiving emails on. It's just so the web interface can generate random addresses
  • MAILPORT-> The port the Python-powered SMTP server will listen on. Default: 25
  • ADMIN -> An email address (doesn't have to exist, just has to be valid) that will list all emails of all addresses the server has received. Kind of a catch-all
  • DATEFORMAT -> How should timestamps be shown on the web interface (moment.js syntax)

Roadmap

  • Mail server
    • Storing received mails in JSON
    • Storing file attachments
  • Docker files and configs
  • Web interface
    • Choose email
    • Get random email address
    • Download attachments safely
    • Display Text/HTML
    • API so all features from the site can also be automated and integrated
    • Automatically check for new emails while on site
    • Admin overview for all available email addresses
    • Option to show raw email
    • Delete messages
    • Make better theme
    • Secure HTML, so no malicious things can be loaded
    • Display embedded images inline using Content-ID
  • Configurable settings
    • Choose domains for random generation
    • Choose if out-of-scope emails are discarded
    • Automated cleanup of old mails
    • Honeypot mode where all emails are also saved for a catchall account
    • Optionally secure whole site with a password
    • Optionally allow site to be seen only from specific IP Range

Quick start

Simple start with no persistence

docker run -it -p 25:25 -p 80:80 ghcr.io/hascheksolutions/opentrashmail

Saving data directory on host machine

docker run -p 80:80 -p 25:25 -v /path/on/host/where/to/save/data:/var/www/opentrashmail/data ghcr.io/hascheksolutions/opentrashmail

Complete example with running as daemon, persistence, a domain for auto-generation of emails, acceptng only emails for configured domains, cleanup for mails older than 90 days and auto restart

docker run -d --restart=unless-stopped --name opentrashmail -e "DOMAINS=mydomain.eu" -e "DATEFORMAT='D.M.YYYY HH:mm'" -e "DISCARD_UNKNOWN=false" -e "DELETE_OLDER_THAN_DAYS=90" -p 80:80 -p 25:25 -v /path/on/host/where/to/save/data:/var/www/opentrashmail/data ghcr.io/hascheksolutions/opentrashmail

How it works

The heart of Open Trashmail is a Python-powered SMTP server that listens on incoming emails and stores them as JSON files. The server doesn't have to know the right email domain, it will just catch everything it receives. You only have to expose port 25 to the web and set an MX record of your domain pointing to the IP address of your machine.