TaskMonkey Handbuch

E-Mail-Versand (eigener SMTP)

Tenant-eigener Mail-Transport plus Admin-Benachrichtigungen via sendAdminEmail.

Tools, die E-Mails versenden — Lead-Bestätigungen, Admin-Reports, Newsletter-Triggers — laufen standardmäßig über den Plattform-SMTP. Sobald Mails mit deiner eigenen Absenderadresse rausgehen sollen (nicht über den Plattform-Mailer), konfiguriert ihr ein eigenes SMTP-Profil pro Workspace.

Eigener SMTP-Transport

In email.php deines Workspace:

return [
    // ... email.prompt, email.tools etc.

    'email.senders' => [
        'default' => [
            'from'     => ['noreply@firma.de' => 'Firma GmbH'],
            'reply_to' => 'kontakt@firma.de',
            'transport' => [
                'host'     => 'smtp.example.com',
                'port'     => 587,
                'username' => '...',
                'password' => '...',
                'tls'      => true,
                'timeout'  => 30,   // optional
            ],
        ],
    ],
];

Der default-Eintrag ist Pflicht, damit der Tenant-eigene Mailer überhaupt aktiv wird. Ohne email.senders läuft alles über den globalen Plattform-Mailer (Bloomify-SMTP).

Mehrere benannte Profile sind erlaubt — z.B. support, noreply, marketing mit unterschiedlichen Absenderadressen.

Mailer im Tool benutzen

Jedes Tool bekommt im Context einen Mailer-Builder:

'handler' => function (array $results, array $args, array $ctx): array {
    $mailer = $ctx['mailer']();        // 'default'-Profil
    // oder: $ctx['mailer']('support')  für ein anderes Profil

    $mailer->setTo('kunde@example.com')
        ->setSubject('Anfrage bestätigt')
        ->deliver('Hallo, wir haben deine Nachricht erhalten.');

    return ['success' => true];
},

Der Mailer ist ein normaler CakePHP-Cake\Mailer\Mailer. From, Reply-To, Sender werden automatisch aus dem Profil gefüllt — du brauchst sie nicht erneut zu setzen.

Admin-Benachrichtigungen via sendAdminEmail

Für Cron-Reports, Fehler-Notifications und Audit-Trails gibt es das interne Tool sendAdminEmail (in _shared/tools/). Es liefert eine fest formatierte Mail an die Admin-Adressen des Workspace.

Empfänger-Konfiguration

In deinem Workspace (typisch admin.php oder ein bestehender Config-File):

return [
    'admin_emails' => [
        'info@firma.de',
        'team@firma.de',
    ],
];

sendAdminEmail schickt an diese Adressen, sofern in den Tool-Args nichts anderes steht. Mit recipients-Override kann man pro Aufruf gezielt jemanden anschreiben.

Aufruf aus einem Domain-Tool

'handler' => function (array $results, array $args, array $ctx): array {
    $report = generateDailyReport();

    $ctx['tool']('sendAdminEmail', [
        'subject' => 'Tagesbericht ' . date('d.m.Y'),
        'lines' => [
            'Verpackt heute: *' . $report['packed'] . '*',
            'Offene Bestellungen: *' . $report['open'] . '*',
            '',
            '---',
            'Top-Artikel:',
            [
                'headers' => ['SKU', 'Anzahl'],
                'rows'    => $report['top_items'],
            ],
        ],
    ]);

    return ['success' => true];
},

Format des lines-Arrays

Eintrag Wirkung
String Text-Zeile
'---' Trennlinie
'' (leer) Leerzeile
'... *highlight* ...' *text* wird farbig hervorgehoben
Array ['rows' => [[...], [...]]] Tabelle ohne Header
Array ['headers' => [...], 'rows' => [...]] Tabelle mit Header

Eine Schriftart, eine Größe, eine Farbe — bewusst minimal, damit Inbox-Reports konsistent und schnell scannbar sind.

Eigenschaften

  • internal: true — das LLM kann das Tool nicht selbst aufrufen, nur andere Tools per $ctx['tool']('sendAdminEmail', ...)
  • Versand läuft über den Tenant-Mailer (email.senders.default), fällt auf den Plattform-Default zurück wenn nicht konfiguriert
  • Wird wie jeder andere Tool-Aufruf in task_executions geloggt — Audit-Trail welche Mail wann an wen ging

Fallstricke

  • Abuse-Schutz: bei selbst gehostetem SMTP einen Reverse-DNS-Eintrag und SPF/DKIM für den from-Domain einrichten, sonst landen Mails im Spam
  • Credentials nicht committen — gehört in eine separate Datei oder apis.php-Pendant, das vom Workspace-Repo ausgenommen ist
  • Public-Chats: Mails aus dem Public-Widget heraus sind möglich, aber rate-limit dein Tool, damit niemand das Formular als Spam-Relais missbraucht
  • Mehrere email.senders-Profile sind nützlich, wenn dein Workspace verschiedene Marken bedient — z.B. support-Profil mit From=support@…, noreply-Profil mit anderer Adresse für Bestätigungs-Mails

Verwandt

Zuletzt aktualisiert: 2026-05-06