- Express server with REST API for sending emails - SQLite database for persistent email history - Web interface with form (recipient, CC, subject, text/HTML) - Email footer with embedded image (CID attachment) - Nodemailer configured for Brevo SMTP relay Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2.7 KiB
2.7 KiB
Mail-Service Design
Datum: 2026-01-16 Status: Genehmigt
Übersicht
Weboberfläche zum Testen des Mail-Versands über Brevo (SMTP). Node.js-basiert mit persistenter Historie.
Technologie-Stack
- Backend: Node.js, Express
- Mail: Nodemailer
- Datenbank: SQLite (better-sqlite3)
- Frontend: HTML, CSS, Vanilla JS
Projektstruktur
mail-service/
├── .env # Konfiguration (SMTP, Port)
├── .env.example # Vorlage ohne sensible Daten
├── package.json
├── src/
│ ├── server.js # Express-Server, Routen
│ ├── mailer.js # Nodemailer-Konfiguration
│ └── database.js # SQLite-Setup und Queries
├── public/
│ ├── index.html # Hauptseite mit Formular
│ ├── style.css # Styling
│ └── script.js # Frontend-Logik
└── data/
└── emails.db # SQLite-Datenbank
Datenbank-Schema
Tabelle emails:
| Spalte | Typ | Beschreibung |
|---|---|---|
| id | INTEGER | Primary Key, Auto-Increment |
| to_email | TEXT | Empfänger-Adresse |
| cc_email | TEXT | CC-Adresse (optional) |
| subject | TEXT | Betreff |
| body | TEXT | Nachrichteninhalt |
| is_html | INTEGER | 0 = Text, 1 = HTML |
| status | TEXT | "success" oder "failed" |
| error_message | TEXT | Fehlermeldung falls fehlgeschlagen |
| created_at | TEXT | ISO-Timestamp |
API-Endpunkte
| Methode | Route | Beschreibung |
|---|---|---|
| GET | / |
Weboberfläche (index.html) |
| POST | /api/send |
Mail versenden |
| GET | /api/history |
Historie abrufen (letzte 50) |
| DELETE | /api/history/:id |
Einzelnen Eintrag löschen |
| DELETE | /api/history |
Gesamte Historie löschen |
Weboberfläche
Zweispaltiges Layout:
- Links: Mail-Formular (Empfänger, CC, Betreff, Text/HTML-Toggle, Nachricht)
- Rechts: Versand-Historie mit Status-Icons und Lösch-Buttons
Fehlerbehandlung
| Fehlertyp | Behandlung |
|---|---|
| Ungültige E-Mail-Adresse | Validierung Frontend + Backend |
| SMTP-Verbindungsfehler | In DB als "failed" speichern |
| Authentifizierungsfehler | Hinweis auf .env-Konfiguration |
| Timeout | Nach 30 Sekunden Abbruch |
| Leere Pflichtfelder | Frontend verhindert Absenden |
Konfiguration (.env)
# Server
PORT=3000
# Email Configuration
MAIL_PROVIDER=smtp
MAIL_FROM_EMAIL=noreply@businesshelpdesk.biz
MAIL_FROM_NAME=Secure Portal
# SMTP (Brevo)
SMTP_HOST=smtp-relay.brevo.com
SMTP_PORT=587
SMTP_USER=<user>
SMTP_PASSWORD=<password>
SMTP_SECURE=false
Ausführung
npm install
npm start
Server läuft auf http://localhost:3000