Send-EulandaMail #
ÜBERSICHT #
Versendet ein Mail-Objekt über den konfigurierten oder angegebenen Provider.
SYNTAX #
Send-EulandaMail [-Mail] <PSCustomObject> [[-Provider] <string>] [[-Conn] <__ComObject>] [[-Udl]
<string>] [[-ConnStr] <string>] [[-AddressId] <int>] [[-GraphTenantId] <string>]
[[-GraphClientId] <string>] [[-GraphClientSecret] <string>] [[-SmtpServer] <string>]
[[-SmtpPort] <int>] [-SmtpUseSsl] [[-SmtpUser] <string>] [[-SmtpPassword] <secureString>]
BESCHREIBUNG #
Die Funktion Send-EulandaMail nimmt ein von New-EulandaMail erzeugtes Mail-Objekt und versendet es über den angegebenen Provider. Sie ist der zentrale Dispatcher für alle E-Mail-Versandwege in EulandaXtools.
Jeder Provider wird intern an eine eigenständige Funktion delegiert: Send-GraphMail, Send-SmtpMail, Send-MapiMail bzw. Send-OutlookMail. Diese können auch direkt aufgerufen werden.
PROVIDER-ÜBERSICHT #
Graph (Send-GraphMail) Microsoft Graph API über REST. Erfordert Azure App-Registrierung mit TenantId, ClientId und ClientSecret. Unterstützt HTML (vollständig), Anhänge, Inline-Bilder, From (Service-Flow: jedes Postfach im Tenant; User-Flow: Shared Mailboxes). Vollständig headless, kein lokaler Mail-Client erforderlich. Ideal für Server- und Cloud-Umgebungen.
SMTP (Send-SmtpMail) Direkter SMTP-Versand über konfigurierbaren Server. Unterstützt HTML (via -BodyAsHtml), TLS/SSL, verschiedene Authentifizierungsmethoden (Credential, User/Password, anonym) und Anhänge. Vollständig headless, kein lokaler Mail-Client erforderlich. Funktioniert mit jedem SMTP-Server (Office 365, interne Relays, Hoster).
EasyMAPI (Send-MapiMail) Simple MAPI über MAPI32.DLL. Nutzt den auf dem System registrierten Standard-Mail-Client — primär gedacht für Thunderbird, Tobit David, eM Client und andere MAPI-kompatible Clients. Kein eigener From-Parameter (Absender ist immer das Standardkonto des Clients).
WICHTIG: Simple MAPI unterstützt KEIN HTML. Übergebener HTML-Inhalt wird automatisch in Plain Text konvertiert (<br> → Zeilenumbruch, Tags entfernt). Wenn HTML-Formatierung beim Empfänger erhalten bleiben muss, einen anderen Provider verwenden.
ACHTUNG: Wenn Microsoft Outlook als Standard-Mail-Client registriert ist (nicht Thunderbird/Tobit), zeigt Windows beim MAPI-Aufruf einen Sicherheitsdialog mit Countdown-Timer an (“Ein Programm versucht, in Ihrem Namen eine E-Mail zu senden…”). Dieser “Object Model Guard” blockiert den headless-Betrieb. In diesem Fall stattdessen Provider OutlookOLE verwenden.
OutlookOLE (Send-OutlookMail) Outlook COM-Automatisierung (OLE). Erfordert installiertes Microsoft Outlook (2016, 2019, 2021 oder Microsoft 365 Desktop-App). Unterstützt HTML (vollständig, inkl. CSS/Styles), Anhänge, und From über SentOnBehalfOfName (Shared Mailboxes, Stellvertretung). Vollständig headless — im Gegensatz zu EasyMAPI löst die COM-Automatisierung KEINEN Sicherheitsdialog aus.
PROVIDER-AUSWAHL #
| Provider | HTML | From | Headless | Voraussetzung |
|---|---|---|---|---|
| Graph | ja | ja | ja | Azure-App |
| SMTP | ja | ja | ja | SMTP-Server |
| EasyMAPI | nein (wird zu Plain Text) | nein | ja (nur wenn NICHT Outlook der MAPI-Handler ist; sonst Sicherheitsdialog) | MAPI-Client (Thunderbird, Tobit etc.) |
| OutlookOLE | ja | ja | ja | Outlook installiert |
DIALOG #
Wenn das Mail-Objekt ShowDialog = $true hat, wird VOR dem Versand der universelle WPF-Mail-Dialog (Show-MailDialog) angezeigt. Der Benutzer kann dort To, Cc, Bcc, Subject, Body und Anhänge bearbeiten. Erst nach Klick auf “Senden” wird der eigentliche Provider-Versand durchgeführt. Der Dialog ist einheitlich für alle Provider — der Provider selbst sendet immer headless.
AUTO-ERKENNUNG #
Bei Provider = 'Auto' (Standard) wird der Provider aus der EULANDA SQL-Registry gelesen (\SYSTEM\Devices\EMail\Provider). Unterstützte Werte: Graph, SMTP, MAPI, Outlook, none. Ohne DB-Verbindung oder bei fehlendem Registry-Eintrag wird Graph als Fallback verwendet.
GRAPH-FLOW-AUSWAHL #
Für den Graph-Provider wird der Authentifizierungs-Flow über den Registry-Wert \SYSTEM\Devices\EMail\GraphAPI\AuthFlow gesteuert (User oder Service; Default User).
- User-Flow (Default): Interaktive OAuth2-PKCE-Anmeldung. Credentials (optional ClientId/TenantId) werden aus
\GraphAPI\UserFlowgelesen, Shared-Mailbox-Absender aus\GraphAPI\UserFlow\From. - Service-Flow: App-only Client-Credentials. Credentials (TenantId/ClientId/ClientSecret/From) werden aus
\GraphAPI\ServiceFlowgelesen. Keine Browser-Interaktion.
Wenn -GraphTenantId, -GraphClientId und -GraphClientSecret als Parameter übergeben werden, wird immer Service-Flow mit diesen Werten verwendet, unabhängig vom Registry-Eintrag.
WHATIF / TESTMODUS #
Mit -WhatIf wird kein Versand durchgeführt. Stattdessen wird ein Objekt zurückgegeben, das alle Felder enthält, die gesendet worden wären (To, From, Cc, Bcc, Subject, HtmlBody, Attachments, Provider).
PARAMETER #
-Mail #
Type: PSCustomObject
Ein von New-EulandaMail erzeugtes Mail-Objekt (PSCustomObject). Folgende Properties werden ausgewertet:
To,Cc,Bcc— Empfängerlisten (string[])From— Absender-Override (string, optional; Fallback aus Registry)Subject— Betreff (string)HtmlBody— HTML-Inhalt (string)Attachments— Dateipfade (string[])ShowDialog— wenn$true, öffnetShow-MailDialogVOR dem Versand zur interaktiven Bearbeitung. Benutzer kann noch Änderungen vornehmen oder abbrechen. Der Dialog ist einheitlich für alle Provider.
-Provider #
Type: string
Default: 'Auto'
Der zu verwendende Mail-Provider: Auto, Graph, SMTP, EasyMAPI oder OutlookOLE. Standard: Auto (aus SQL-Registry, \SYSTEM\Devices\EMail\Provider).
-Conn #
Type: __ComObject
ADODB.Connection für SQL-Registry-Zugriff (Provider-Erkennung, Credentials).
-Udl #
Type: string
UDL-Datei für Datenbankverbindung.
-ConnStr #
Type: string
ADO-Connection-String.
-AddressId #
Type: int
Adress-ID für die Kontaktliste im Mail-Dialog.
-GraphTenantId #
Type: string
Azure Tenant-ID (übersteuert SQL-Registry). Wenn GraphTenantId, GraphClientId und GraphClientSecret alle drei gesetzt sind, wird zwingend der Service-Flow (Client-Credentials) verwendet — unabhängig vom AuthFlow-Wert in der Registry.
-GraphClientId #
Type: string
Azure Client-ID (übersteuert SQL-Registry). Siehe GraphTenantId für Flow-Verhalten.
-GraphClientSecret #
Type: string
Azure Client-Secret (übersteuert SQL-Registry). Siehe GraphTenantId für Flow-Verhalten.
-SmtpServer #
Type: string
SMTP-Server (übersteuert SQL-Registry).
-SmtpPort #
Type: int
Default: 587
SMTP-Port. Standard: 587.
-SmtpUseSsl #
Type: switch
SSL/TLS für SMTP verwenden.
-SmtpUser #
Type: string
SMTP-Benutzername.
-SmtpPassword #
Type: secureString
SMTP-Passwort (SecureString).
AUSGABEN #
PSCustomObject
Objekt mit: Success ([bool]), Provider ([string]), ErrorMessage ([string]). Bei -WhatIf zusätzlich: WhatIf, To, From, Cc, Bcc, Subject, HtmlBody, Attachments.
BEISPIELE #
# Headless: Mail erstellen und per Auto-Provider versenden
$mail = New-EulandaMail -To "kunde@firma.de" -Subject "Rechnung" `
-HtmlBody "<p>Anbei...</p>" -Attachments "C:\RE.pdf"
Send-EulandaMail -Mail $mail -Udl "C:\Prod.udl"
# Mit Dialog: Benutzer kann bearbeiten, dann wird versendet
$mail = New-EulandaMail -To "kunde@firma.de" -Subject "Rechnung" `
-HtmlBody "<p>Anbei...</p>" -Attachments "C:\RE.pdf" -ShowDialog
Send-EulandaMail -Mail $mail -Udl "C:\Prod.udl"
# Explizit SMTP mit Dialog
$mail = New-EulandaMail -To "kunde@firma.de" -Subject "Test" `
-HtmlBody "Hallo" -ShowDialog
Send-EulandaMail -Mail $mail -Provider SMTP -SmtpServer "mail.firma.de"
# EasyMAPI für Thunderbird/Tobit-Umgebungen (Plain Text)
$mail = New-EulandaMail -To "kunde@firma.de" -Subject "Rechnung" `
-HtmlBody "<p>Anbei...</p>" -Attachments "C:\RE.pdf"
Send-EulandaMail -Mail $mail -Provider EasyMAPI
# OutlookOLE: HTML-Mail headless über Outlook (kein Sicherheitsdialog)
$mail = New-EulandaMail -To "kunde@firma.de" -Subject "Rechnung" `
-HtmlBody "<p>Anbei Ihre <b>Rechnung</b>.</p>" -Attachments "C:\RE.pdf"
Send-EulandaMail -Mail $mail -Provider OutlookOLE
# WhatIf / Testmodus: zeigt was gesendet würde, ohne echten Versand
$mail = New-EulandaMail -To "kunde@firma.de" -Subject "Test" -HtmlBody "Hallo"
$result = Send-EulandaMail -Mail $mail -Udl "C:\Prod.udl" -WhatIf
# $result enthält To, From, Subject, Provider etc. zur Inspektion