PowerShell bietet eine einfache und flexible Alternative zu VBA oder Outlooks internem Vorlagendialog, um E-Mail-Vorlagen (*.OFT-Dateien) zu öffnen und dabei den Absender flexibel zu bestimmen. Der folgende Artikel erläutert Schritt für Schritt, wie dies mit PowerShell umgesetzt werden kann.
Warum PowerShell statt VBA?
Outlook-Nutzer kennen das Problem: Die Verwaltung und Auswahl von E-Mail-Vorlagen mittels der Standarddialoge kann unübersichtlich und zeitraubend sein. Während VBA bereits Abhilfe schafft, bietet PowerShell zusätzliche Flexibilität, etwa durch direkten Zugriff auf das Dateisystem und einfache Anpassungsmöglichkeiten.
Vorbereitung der PowerShell-Umgebung
Damit das PowerShell-Skript auf dem Rechner ausgeführt werden kann, muss zunächst die Ausführungsrichtlinie entsprechend gesetzt werden:
Set-ExecutionPolicy RemoteSigned
Dieser Befehl muss in PowerShell mit Administratorrechten ausgeführt werden.
PowerShell-Skript: E-Mail-Vorlagen öffnen und Absender ändern
Das folgende PowerShell-Skript ermöglicht das Öffnen einer Outlook-Vorlage über einen Datei-Explorer-Dialog und setzt automatisch den gewünschten Absender:
# Konsolenfenster ausblenden
Add-Type -Name Window -Namespace Console -MemberDefinition '
[DllImport("Kernel32.dll")]
public static extern IntPtr GetConsoleWindow();
[DllImport("user32.dll")]
public static extern bool ShowWindow(IntPtr hWnd, Int32 nCmdShow);
'
function Hide-Console {
$consolePtr = [Console.Window]::GetConsoleWindow()
[Console.Window]::ShowWindow($consolePtr, 0)
}
Hide-Console
# Pfade und Absender anpassen
$templatepath = 'C:\Pfad\zu\Vorlagen\'
$sendFrom ='absender@domain.de'
Add-Type -AssemblyName System.Windows.Forms
$olApp = new-object -comobject outlook.application
$FileBrowser = New-Object System.Windows.Forms.OpenFileDialog -Property @{
InitialDirectory = $templatepath
}
$null = $FileBrowser.ShowDialog()
$SelectedFile = $FileBrowser.FileName
function Invoke-SetProperty {
param([__ComObject] $Object, [String] $Property, $Value)
[Void] $Object.GetType().InvokeMember($Property,"SetProperty",$NULL,$Object,$Value)
}
$account = $olapp.Session.Accounts.Item($sendFrom)
$oMail = $olApp.CreateItemFromTemplate($SelectedFile)
# Absender ändern
Invoke-SetProperty -Object $oMail -Property "SendUsingAccount" -Value $account
$oMail.Display()
Verwendung von Proxy-Adressen
Möchten Sie eine sekundäre Adresse (Proxy-Adresse) verwenden, kommentieren Sie die Zeile mit $account
aus und verwenden stattdessen SentOnBehalfOfName
:
#$account = $olapp.Session.Accounts.Item($sendFrom)
$oMail = $olApp.CreateItemFromTemplate($SelectedFile)
Invoke-SetProperty -Object $oMail -Property "SentOnBehalfOfName" -Value $sendFrom
Öffnen von Vorlagen ohne Änderung der Absenderadresse
Soll die Absenderadresse unverändert bleiben, genügt folgendes vereinfachtes Skript:
$templatepath = 'C:\Pfad\zu\Vorlagen\meinevorlage.oft'
Invoke-Item $templatepath
PowerShell über eine Batch-Datei starten
Um die PowerShell-Ausführung komfortabler zu gestalten, kann eine Batch-Datei erstellt werden:
cmd /c start /min "" powershell.exe -WindowStyle hidden -f "C:\Pfad\zu\powershell\skript.ps1"
Speichern Sie diese Datei mit der Endung .bat
und starten Sie sie bequem per Doppelklick.
Kompatibilitätshinweis
Die vorgestellten PowerShell-Skripte funktionieren nicht mit der webbasierten Version von Outlook oder dem „neuen Outlook“ hinsichtlich des Änderns der Absenderadresse, da hierfür eine direkte Interaktion mit der Outlook-Desktop-Anwendung erforderlich ist. Das reine Öffnen von Vorlagen funktioniert jedoch problemlo