55 lines
3.6 KiB
MySQL
55 lines
3.6 KiB
MySQL
|
|
-- SMTP-Stack: konfigurierbare Verbindung (statt Umgebungsvariablen) und Mailvorlagen mit dokumentierten Platzhaltern.
|
||
|
|
CREATE TABLE smtp_settings (
|
||
|
|
id TINYINT PRIMARY KEY DEFAULT 1,
|
||
|
|
host VARCHAR(253) NULL,
|
||
|
|
port SMALLINT UNSIGNED NOT NULL DEFAULT 587,
|
||
|
|
secure_mode ENUM('none','starttls','tls') NOT NULL DEFAULT 'starttls',
|
||
|
|
username VARCHAR(200) NULL,
|
||
|
|
secrets_enc TEXT NULL,
|
||
|
|
from_name VARCHAR(150) NULL,
|
||
|
|
from_email VARCHAR(254) NULL,
|
||
|
|
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
||
|
|
updated_by CHAR(36) NULL REFERENCES users(id),
|
||
|
|
CONSTRAINT chk_smtp_singleton CHECK (id = 1)
|
||
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
|
|
INSERT INTO smtp_settings (id) VALUES (1);
|
||
|
|
|
||
|
|
-- Vorlagen je Ereignis ("Definition"): Betreff/Text mit {{platzhalter}}, dokumentierte verfügbare Daten je Vorlage.
|
||
|
|
CREATE TABLE mail_templates (
|
||
|
|
`key` VARCHAR(60) PRIMARY KEY,
|
||
|
|
name VARCHAR(150) NOT NULL,
|
||
|
|
trigger_text VARCHAR(300) NOT NULL,
|
||
|
|
variables_json JSON NOT NULL,
|
||
|
|
subject VARCHAR(300) NOT NULL,
|
||
|
|
body TEXT NOT NULL,
|
||
|
|
enabled TINYINT(1) NOT NULL DEFAULT 1,
|
||
|
|
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
||
|
|
updated_by CHAR(36) NULL REFERENCES users(id)
|
||
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
|
|
|
||
|
|
INSERT INTO mail_templates (`key`, name, trigger_text, variables_json, subject, body) VALUES
|
||
|
|
('invite', 'Zugang eingerichtet', 'Wenn für einen Kunden ein neuer Zugang angelegt wird.',
|
||
|
|
JSON_ARRAY('name','inviteLink','validDays'),
|
||
|
|
'Ihr Zugang zum Kundencenter',
|
||
|
|
'Hallo {{name}},\n\nfür Sie wurde ein Zugang eingerichtet. Bitte legen Sie hier Ihr Passwort fest ({{validDays}} Tage gültig):\n{{inviteLink}}\n'),
|
||
|
|
('password_reset', 'Passwort zurücksetzen', 'Wenn ein Passwort-Reset angefordert wird (Kunde oder Personal).',
|
||
|
|
JSON_ARRAY('name','resetLink'),
|
||
|
|
'Passwort zurücksetzen',
|
||
|
|
'Hallo {{name}},\n\nüber diesen Link können Sie Ihr Passwort zurücksetzen (1 Stunde gültig):\n{{resetLink}}\n\nWenn Sie das nicht angefordert haben, ignorieren Sie diese E-Mail.\n'),
|
||
|
|
('panel_credentials', 'Neue Panel-Zugangsdaten', 'Wenn Personal nach dem Neuvergeben eines Panel-Passworts auf „Per E-Mail senden“ klickt.',
|
||
|
|
JSON_ARRAY('name','resourceName','username','password'),
|
||
|
|
'Ihre neuen Zugangsdaten für {{resourceName}}',
|
||
|
|
'Hallo {{name}},\n\nfür {{resourceName}} wurden neue Zugangsdaten vergeben:\n\nBenutzername: {{username}}\nPasswort: {{password}}\n\nBitte bewahren Sie die Zugangsdaten sicher auf und ändern Sie das Passwort nach der ersten Anmeldung, falls möglich.\n'),
|
||
|
|
('ticket_created', 'Ticket erstellt (Bestätigung an Kunde)', 'Wenn ein Kunde selbst ein neues Ticket erstellt.',
|
||
|
|
JSON_ARRAY('name','number','subject'),
|
||
|
|
'Ticket {{number}} wurde erstellt',
|
||
|
|
'Hallo {{name}},\n\nIhr Ticket „{{subject}}“ ({{number}}) wurde bei uns erstellt. Wir melden uns, sobald es eine Antwort gibt.\n'),
|
||
|
|
('ticket_message', 'Antwort auf Ticket (an Kunde)', 'Wenn Personal auf ein Kunden-Ticket antwortet (keine interne Notiz).',
|
||
|
|
JSON_ARRAY('name','number','subject'),
|
||
|
|
'Neue Antwort zu Ticket {{number}}',
|
||
|
|
'Hallo {{name}},\n\nes gibt eine neue Antwort zu Ihrem Ticket „{{subject}}“ ({{number}}). Bitte im Kundencenter ansehen und bei Bedarf antworten.\n'),
|
||
|
|
('invoice_issued', 'Rechnung erstellt', 'Wenn eine Rechnung ausgestellt wird.',
|
||
|
|
JSON_ARRAY('name','number','amount','dueDate'),
|
||
|
|
'Ihre Rechnung {{number}}',
|
||
|
|
'Hallo {{name}},\n\nIhre Rechnung {{number}} über {{amount}} wurde erstellt, fällig am {{dueDate}}. Sie können sie im Kundencenter einsehen und als PDF herunterladen.\n');
|