Send-OutlookMail #
ÜBERSICHT #
Sendet eine E-Mail über Microsoft Outlook COM-Automatisierung (OLE).
SYNTAX #
Send-OutlookMail [[-From] <string>] [-To] <string[]> [[-Cc] <string[]>] [[-Bcc] <string[]>]
[-Subject] <string> [[-HtmlBody] <string>] [[-Body] <string>] [[-Attachments] <string[]>]
[<CommonParameters>]
BESCHREIBUNG #
Send-OutlookMail versendet E-Mails über die COM-Schnittstelle von Microsoft Outlook (Outlook.Application). Die Funktion erstellt ein MailItem, setzt alle Felder (Empfänger, Betreff, Body, Anhänge) und ruft Send() auf.
Der Versand erfolgt vollständig headless (ohne eigene UI). Outlook muss auf dem System installiert und mit mindestens einem E-Mail-Konto konfiguriert sein. Die Nachricht wird in Outlooks Outbox eingereiht und über den konfigurierten Exchange/IMAP/SMTP-Transportweg versendet.
Im Gegensatz zu Simple MAPI (Send-MapiMail) löst die COM-Automatisierung keinen Sicherheitsdialog mit Countdown-Timer aus. Outlook vertraut COM-Aufrufen von lokalen Prozessen, sofern kein Antivirenprogramm den Object Model Guard erzwingt.
HTML-UNTERSTÜTZUNG ================== Outlook OLE unterstützt vollständiges HTML. Wird -HtmlBody übergeben, wird der Inhalt als MailItem.HTMLBody gesetzt — einschließlich aller HTML-Tags, CSS-Styles und eingebetteter Formatierungen. Der Empfänger sieht die E-Mail formatiert, genau wie im HTML-Editor von Outlook.
Wird stattdessen -Body (Plain Text) übergeben, wird MailItem.Body gesetzt. -Body hat Vorrang, wenn beides angegeben ist.
ABSENDER (FROM) =============== Ohne -From wird das Standard-Outlook-Konto verwendet (primäres Profil).
Mit -From 'info@firma.de' wird SentOnBehalfOfName gesetzt. Das funktioniert für:
- Shared Mailboxes (info@, support@) auf die der Benutzer Zugriff hat
- Stellvertretungspostfächer (Delegate Access)
- Exchange-“Senden als”-Berechtigung
Der Absender muss im Exchange/Microsoft-365-Umfeld berechtigt sein. Bei einem reinen POP/IMAP-Konto ohne Stellvertretung wird -From ignoriert.
ANHÄNGE ======= Dateipfade werden über MailItem.Attachments.Add() angehängt. Nicht existierende Dateien werden mit einer Warnung übersprungen (kein Abbruch). Outlook unterstützt alle gängigen Dateitypen und Größen bis zum Exchange/Server-Limit.
EMPFÄNGER-AUFLÖSUNG ==================== Alle Empfänger werden vor dem Versand über Recipients.ResolveAll() aufgelöst. Outlook prüft dabei gegen das Adressbuch (GAL, Kontakte). SMTP-Adressen werden direkt übernommen, Outlook-Kontaktnamen werden in E-Mail-Adressen aufgelöst.
DIALOG ====== Diese Funktion enthält keinen eigenen Bearbeitungsdialog. Wenn ein interaktiver Dialog gewünscht ist (To/Cc/Bcc/Subject/Body bearbeiten), wird dieser von Send-EulandaMail über Show-MailDialog vorgeschaltet — einheitlich für alle Provider.
COM-BEREINIGUNG =============== Alle COM-Objekte (MailItem, Outlook.Application) werden im finally-Block über Marshal.ReleaseComObject() freigegeben, um COM-Leaks zu vermeiden.
PARAMETER #
-From #
Type: string
Absender-Adresse. Setzt SentOnBehalfOfName auf dem MailItem für Stellvertretungs- oder Shared-Postfächer. Ohne Angabe wird das Standard-Outlook-Konto verwendet.
-To #
Type: string[]
Empfängeradresse(n). Erlaubt komma-/semikolongetrennten String oder String-Array. Mindestens ein Empfänger ist erforderlich.
-Cc #
Type: string[]
Optionale CC-Empfänger. Komma-/semikolongetrennt oder String-Array.
-Bcc #
Type: string[]
Optionale BCC-Empfänger. Komma-/semikolongetrennt oder String-Array.
-Subject #
Type: string
Betreffzeile der E-Mail.
-HtmlBody #
Type: string
HTML-formatierter Inhalt. Wird als MailItem.HTMLBody gesetzt — vollständiges HTML mit Tags, Styles und Formatierungen wird unterstützt.
-Body #
Type: string
Plain-Text-Inhalt. Hat Vorrang vor HtmlBody, wenn beides angegeben ist. Wird als MailItem.Body gesetzt (ohne Formatierung).
-Attachments #
Type: string[]
Optionale Dateipfade für Anhänge (String-Array). Nicht existierende Dateien werden mit Warnung übersprungen.
AUSGABEN #
boolean
$true bei erfolgreichem Versand, $false bei Fehler. Bei Fehlern wird zusätzlich eine Warnung mit der Fehlermeldung ausgegeben.
BEISPIELE #
# HTML-Mail mit Anhang über das Standard-Outlook-Konto senden
Send-OutlookMail -To 'kunde@firma.de' -Subject 'Ihre Rechnung' `
-HtmlBody '<p>Sehr geehrter Kunde,</p><p>anbei Ihre <b>Rechnung</b>.</p>' `
-Attachments 'C:\Rechnungen\RE-123.pdf'
# Plain-Text-Mail über ein Shared Mailbox senden
Send-OutlookMail -From 'info@firma.de' -To 'kunde@firma.de' `
-Subject 'Auftragsbestätigung' -Body 'Ihr Auftrag wurde bestätigt.'
# Mail mit CC, BCC und mehreren Anhängen
Send-OutlookMail -To 'kunde@firma.de' -Cc 'vertrieb@firma.de' `
-Bcc 'archiv@firma.de' -Subject 'Angebot' `
-HtmlBody '<h2>Angebot Nr. 4711</h2><p>Details im Anhang.</p>' `
-Attachments 'C:\Temp\Angebot.pdf', 'C:\Temp\AGB.pdf'
HINWEISE #
Voraussetzung: Microsoft Outlook muss installiert und mit mindestens einem E-Mail-Konto konfiguriert sein. Funktioniert mit Outlook 2016, 2019, 2021 und Microsoft 365 (Desktop-App).
Kompatibel mit PowerShell 5.1+