Skip to content

fraddy91/smtprise

Repository files navigation

Go Report Card GitHub Release Docker Image Version Docker Image Size

Smtprise Logo

Smtprise overview

A minimal SMTP bridge that receives emails, selects the requested MIME part, and forwards it to Apprise destinations using configurable tags and keys. Written on Go memory footprint is as little as 3mb. It’s built for auditability, abuse resistance, and operational clarity: explicit SMTP auth, async dispatch with retries, and an admin GUI to manage mappings.
It was inspired by Authelia's lack of notification providers, so the available mail provider was taken as the base to have a notification freedom, so you may redirect notifications to any/multiple destinations you want. This service can be used as notification bridge for any SMTP notifier. It can separate multipart/MIME messages by parts and forwatd it to the Apprise endpoind according to configuration (currently text/plain, text/htmp and raw message can be chosen, accordint to Authelia's standard notification template). So you can easily configure forwarding raw message to your email, text message to any messenger.

Features

  • SMTP auth (PLAIN): Require ADMIN_USER and ADMIN_PASS to send.
  • MIME routing: Choose text/plain or text/html parts per record.
  • Apprise dispatch: Forward to AppriseURL/Key with optional tags.
  • Async queue with retry: Non-blocking enqueue, exponential backoff, bounded queue with drop-on-full.
  • Admin GUI: Manage records, search, sort, and modify, dark/light theme, automatically fits system setting.
  • Structured logs (optional): Clear success/error paths for audit.

Architecture

  • Backend: Stores records mapping Email + MimeType -> Key + Tags.
  • SMTP server: Authenticated relay that extracts MIME parts and passes jobs to the dispatcher.
  • Dispatcher: Background worker(s) that POST payloads to Apprise with retry and backoff.
  • Admin GUI: HTTP server for CRUD on records and operational feedback. flowchart LR
    SMTP[SMTP Client] -->|AUTH + DATA| Bridge[Smtprise]
    Bridge -->|extract MIME| Dispatcher[Async Dispatcher]
    Dispatcher -->|POST w/ retry| Apprise[Apprise Services]
    Admin[Admin GUI] -->|CRUD| BackendDB[(DB)]
    Bridge --> BackendDB

Quick start

Service setup

services:
  smtprise:
    image: fraddy/smtprise
    ports:
      - "8231:8080" # GUI
    environment:
      - ADMIN_USER=admin
      - ADMIN_PASS=strongpassword
      - GUI_ENABLED=true
      - LISTEN_SMTP=25
      - LISTEN_HTTP=8080
      - STORE_FILE=records.db
      - APPRISE_URL=http://apprise:8000/notify
    volumes:
      - ./data:/app/data/
    depends_on:
      - apprise
    network:
      - shim_network # Should share it with Apprise and Authelia

Service configure

Open http://server.local:8231
Enter preferred configuration
Example configuration 1.

Authelia configure

notifier:
  smtp:
    address: smtp://smtprise:25
    username: 'admin'
    password: 'strongpassword'
    sender: "Authelia <authelia@example.com>"
    disable_require_tls: true # Should be set to true as shim doesn't support tls
    disable_starttls: false
    disable_html_emails: false

Apprise

alice,bob,tg=tgram://<API Key>/<Chat ID>/?overflow=split&format=text
alice,mail=mailto://alice:password@example.com
bob,mail=mailto://bob:password@example.com
admin=alice,carl,den

And here you ready to go

Configuration

Docker Environment

  • ADMIN_USER / ADMIN_PASS: SMTP PLAIN credentials required to send.
  • APPRISE_URL: Base URL of Apprise (it's strongly recommended place container in common network with notifier+apprise, not exposing port) e.g., http://apprise:8000/notify.
  • LISTEN_SMTP: Port the SMTP server listens on (e.g., 2525).
  • LISTEN_HTTP: Port for the admin GUI (e.g., 8080).
  • GUI_ENABLED: true to run the admin GUI.
  • StoreFile: Filename under data/ for your SQLite store (from LoadConfig()).

Authelia

notifier:
  smtp:
    address: smtp://shim-proxy:2525 # This should be targeted to container's port
    timeout: '5s'
    username: 'test' # ADMIN_USER value
    password: 'password' # ADMIN_PASS value
    sender: "Authelia <authelia@example.com>" # Is required by Authelia, though is dropped anyway
    identifier: 'localhost' # Generally isn't used
    subject: "[Authelia] {title}" # This will be treated as subject for Apprise
    disable_require_tls: true # Should be set to true as shim doesn't support tls
    disable_starttls: false
    disable_html_emails: false

Admin GUI

Gui contains input form with:

  • email - Authelia's destination email
  • key - Apprise's config key
  • tags - this will be forwarded to Apprise as is
  • mime-type - type to be forwarded, if message is multipart/mime (as Authelia does it) one can choose desired part, e.g. Plain text (text/plain) will be extracted and sent to Apprise

Build

Quick start

Binary

  • Build: go build -o smtprise ./cmd
  • Run: Place the binary beside your data/ directory or let the app create it.


export ADMIN_USER="admin"
export ADMIN_PASS="secret"
export APPRISE_URL="http://apprise:8000/notify"
export LISTEN_SMTP="2525"

Optional: GUI

export GUI_ENABLED="true"
export LISTEN_HTTP="8080"

Usage

Add a record in the admin GUI

  • Email: The recipient address that will be matched (e.g., alerts@example.com).
  • Mime type: raw, text/plain or text/html to select which part to forward.
  • Key: The Apprise notification key segment appended to APPRISE_URL.
  • Tags: Comma/space separated list (e.g., admin,friends mail).

Example record:


Record 1

  • Email: alerts@example.com
  • Mime type: text/html
  • Key: apprise
  • Tags: admin telegram,children discord


Record 2


Record 3

Send an email

Use any SMTP client authenticated with ADMIN_USER/ADMIN_PASS, sending to the mapped Email. The bridge will:

  • Extract: The requested MIME part from the message.
  • Format: Set payload title from Subject, body from the part, tag from record tags, format inferred (text for text/plain, html otherwise).
  • Enqueue: Push a dispatch job to the bounded queue.
  • Retry: Worker posts to Apprise with exponential backoff; drops if queue is full.

Additional information

Screenshots

GUI mobile white theme. GUI mobile black theme. GUI mobile search. Telegram Authelia notification example.

Learn more about Apprise tags

here (https://github.com/caronc/apprise/wiki/config)
here (https://github.com/caronc/apprise/wiki/config_text)
and here (https://github.com/caronc/apprise/wiki/config_text#text-based-apprise-configuration)

Learn more about Authelia's notification configuration

here (https://www.authelia.com/configuration/notifications/smtp/)

About

Simple SMPT shim service to proxy SMTP notifications to Apprise

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors