Outlook Kalender in PST exportieren via Powershell

kurz notiert:

Ein Export des Outlook Kalenders kann via Powershell Skript wie folgt realisiert werden

$Outlook = New-Object -ComObject Outlook.Application
$NS = $Outlook.GetNamespace('MAPI')
$Store = $NS.Stores | ? {$_.displayname -eq "abc@xyz.de"}
$Calendar = $Store.GetDefaultFolder([Microsoft.Office.Interop.Outlook.OlDefaultFolders]::olFolderCalendar)
#PST Store
$Outlook.Session.AddStore("c:tmptemp.pst")
$PST = $ns.Stores | ? {$_.filepath -eq "c:tmptemp.pst"}
$PSTRoot= $PST.GetRootFolder()
$PSTFolder= $NS.Folders.Item($PSTRoot.Name)
#Export
$Calendar.CopyTo($PST)
#Trennen des Archivs
$NS.GetType().InvokeMember('RemoveStore',[System.Reflection.BindingFlags]::InvokeMethod,$null,$NS,($PSTFolder))

Das Archiv könnte man anschließend auch in ein bestehendes Exchange (Online) Postfach importieren.

#mit exchange (online) verbinden
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential (Get-Credential) -Authentication Basic -AllowRedirection
New-MailboxImportRequest -Mailbox <Name> -FilePath <UNC-Pfad und Name der PST-Datei> -TargetRootFolder <Ordner im Postfach>
#Zwischenstand abfragen
Get-MailboxImportRequest <Name des Importvorgangs> | fl
#Import löschen
Remove-MailboxImportRequest
Advertisements

Andere E-Mail Absenderadresse in Office 365/Exchange Online

Es kann sein, dass man mit einer zusätzlichen E-Mail Adresse als Absender in Office 365/Exchange Online Mails versenden möchte. Dafür gibt es verschiedene Möglichkeiten. Eine davon ist das Nutzen von Verteilerlisten.

Dazu muss man als erstes einen Verteiler anlegen. Dies geschieht entweder über das Office 365 Admin Center unter Gruppen oder im Exchange Admin Center unter Empfänger – Gruppen.

Office 365 Admin Center:

Exchange Admin Center (hier mache ich die Konfiguration im Folgenden):

 

Unter Gruppen kann man eine neue Verteilerliste anlegen. Wichtig ist hierbei, dass Absender innerhalb und außerhalb meiner Organisation angehakt wird, damit man unter der Adresse zukünftig auch Mails empfangen kann, die von externen Absendern kommen.

Die restlichen Einstellungen sprechen für sich. Mitglieder und Genehmigungen einstellen, wie man sie braucht.

Um die gewünschten Absender einzurichten, wechselt man in den Punkt Gruppendelegierung. Man muss sich das Recht Senden als für die Gruppe erteilen. Das geht nur in der Exchange-Verwaltungskonsole.

In Outlook kann man jetzt ohne weitere Konfiguration die neue E-Mail-Adresse zum Versand auswählen.

Dazu erstellt man eine neue E-Mail und klingt im von Dialog auf weitere E-Mail Adresse und trägt die Verteilerliste ein.

Zukünftig merkt sich Outlook den Eintrag in der Dropdown-Box des Von:-Feldes.

Danach einfach die Mail versenden und fertig.

Powershellverbindung mit Exchange Online / Office365

Die neben der GUI weitaus mächtigere Möglichkeit seinen Exchange zu administrieren bietet die Powershell. Die aus lokalen Exchange Installationen bekannte Powershell Remote Session funktioniert ebenfalls für Office365 Exchange Umgebungen.

Zunächst hinterlegt man seine Anmeldeinformationen,

$UserCredential = Get-Credential

um anschließend eine Session mit Exchange Online herzustellen:

$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential $UserCredential -Authentication Basic -AllowRedirection

Mit

Import-PSSession $Session

wird die Session gestartet und mit

Remove-PSSession $Session

wieder beendet.

Die ab jetzt verfügbaren Cmdlets werden temporär zwischengespeichert:

Über den Befehl

Get-Command | ? {$_.source -eq "NAME"}

lassen sich alle neuen Funktionen anzeigen (wobei “NAME” in dem Fall für  “tmp_4e4tlvte.bjc” steht.

Exchange Relay als Smarthost für Postfix

Um mich ein wenig mehr mit dem Thema Exchange auseinander zu setzen, habe ich bei Microsoft einen Exchange angemietet. Nach der Einrichtung ergibt sich allerdings folgendes Problem:

Der Exchange besitzt nur mich als einzigen Benutzer. Die bisher angelegten Konten auf meinem Postfix-Server können allerdings nicht einfach umgezogen werden bzw. sollen es auch nicht, da jedes weitere Konto eben Geld kostet. Daher soll der Exchange lediglich meine E-Mails verwalten und alle anderen Adressen sollen weiterhin über Postfix laufen.

Dazu muss aber zum Einen der Exchange wissen, dass er bestimmte Mails weiterleiten soll und zum Anderen muss Postfix seine Mails über den Exchange raus schicken.

1. Verwalten akzeptierter Domänen in Exchange Online

Zunächst definiert man im Exchange, die Domäne, die von ihm akzeptiert werden soll. Dabei gibt es zwei unterschiedliche Typen von akzeptierten Domänen: autorisierende und interne relayakzeptierte Domänen, die wie folgt definiert werden.

Autorisierend: Wenn man diese Option auswählt, werden E-Mails an E-Mail-Adressen zugestellt, die in Office 365 für Empfänger für diese Domäne aufgeführt sind. E-Mails für unbekannte Empfänger werden abgelehnt.

Internes Relay: Wenn man diese Option auswählt, bedeutet dies, dass sich Empfänger für diese Domäne in Office 365 oder auf dem eigenen E-Mail-Server befinden können. E-Mails werden an bekannte Empfänger in Office 365 zugestellt oder an den eigenen E-Mail-Server geleitet, wenn die Empfänger Office 365 unbekannt sind.

Der Exchange muss also als Relay fungieren und alle unbekannten Empfänger, die er nicht kennt, weiterleiten. Postfix ist dann die letzte Instanz und gibt einen NDR zurück, falls auch er das Postfach nicht kennt.

Anschließend müssen zwei Konnektoren erstellt werden, die die Mails weiterleiten und von Postfix als Relay empfangen können.

2. Wie funktionieren Office 365-Konnektoren mit meinem eigenen (lokalen) Server?

Um den Nachrichtenfluss in beide Richtungen zu ermöglichen, müssen Konnektoren eingerichtet werden.

Die nachstehende Abbildung zeigt, wie die Konnektoren mit dem eigenen E-Mail-Server funktionieren.

In diesem Beispiel sind John und Bob Mitarbeiter in Ihrem Unternehmen. John hat ein Postfach auf einem E-Mail-Server, den Sie verwalten, und Bob verfügt über ein Postfach in Office 365. John und Bob tauschen E-Mails mit Sun aus, einem Kunden mit einem Internet-E-Mail-Konto:

  • Zum Senden von E-Mails zwischen John und Bob sind Connectors erforderlich.

  • Zum Senden von E-Mails zwischen John und Sun sind Connectors erforderlich. (Sämtliche Internet-E-Mails werden über Office 365 übermittelt.)

  • Zum Senden von E-Mails zwischen Bob und Sun ist kein Connector erforderlich.

Quelle: Microsoft

3. Einrichten eines Konnektors von Office 365 zum E-Mail-Server

Unter “Nachrichtenfluss – Connectors” können die Konnektoren angelegt werden.

Anschließend kann der MX Record auf die Office365 DNS Einstellungen geändert werden.

4. Einrichten eines Konnektors vom E-Mail-Server zu Office 365

Es wird ein weiterer Konnektor angelegt:

Anschließend muss man Postfix so vorbereiten, dass er die ausgehenden Mails auch über Office365 als Relay verschickt.

Dazu genügt prinzipiell der Eintrag “relayhost” in der main.cf:

relayhost = [tjbraun.mail.protection.outlook.com]

Dienst neustarten und fertig.

Ab jetzt sollten alle ausgehenden Mails über das Relay verschickt werden und eingehende Mails landen beim Exchange und werden bei Bedarf weitergeleitet.

Problem beim Versand vom Mailserver

Das Problem ist nun allerdings, dass zwar externe Domains problemlos von Postfix angesprochen und erreicht werden können, allerdings wird eine Mail an das Exchange Konto immer lokal in Postfix zugestellt und nicht an den Exchange weitergeleitet. Ebenfalls können Mails an unbekannte Adressen der eigenen Domain nicht verschickt werden.

Das liegt daran, dass Postfix seine eigene Domain natürlich versucht lokal zuzustellen. Daher muss man ihm klar machen, dass manche Adressen nicht lokal vorhanden sind bzw. diese Mails so oder so über das Relay gehen, damit sie den Exchange überhaupt erreichen.

Dazu gibt es die Transport Lookup-Tabelle. In diese Lookup-Tabelle wird für jede Zieladresse (vollständige Emailadresse oder Domain) der sogenannte Next Hop eingetragen.

Die Tabelle kann z. B. so aussehen:

xyz@tj-braun.de smtp:[tjbraun.mail.protection.outlook.com]
abc@tj-braun.de smtp:[tjbraun.mail.protection.outlook.com]

Die Tabelle hat das Format: Adresse Transporttyp:Next Hop. Adresse kann sowohl eine vollständige Emailadresse als auch nur der Domainteil sein. Der Transporttyp ist beim Weitertransport an einen anderen Mailserver immer smtp. Der Next Hop ist der neue Zielhost. Für den Zielhost kann eine IP-Adresse, ein Hostname oder eine Domain eingetragen werden. Wird ein Host- oder Domainname eingetragen, dann wird auf diesen Namen eine MX-Abfrage durchgeführt. Soll keine MX-Abfrage durchgeführt werden, muß der Name in eckige Klammern gestellt werden. Generell bedeutet ein Eintrag in der Transport Lookup-Tabelle immer eine Art Ausnahme von dem normalen Zustellweg den Postfix sonst versuchen würde.

Würde hier die Domäne an sich angegeben werden, würden sich Postfix und Exchange die Mails bis in alle Ewigkeiten hin und her schieben. Daher werden fixe Adressen definiert, die der Exchange auch kennt und aufgrund der Domänen Regelung von vorhin auch nicht weiterleiten wird.

Nun muss noch die neue Lookup-Tabelle in Datenbanken umgewandelt werden:

postmap transport

Danach muß die main.cf noch geändert werden:

transport_maps = hash:/etc/postfix/transport

Und der Dienst neugestartet werden.

Ab jetzt werden Mails von Postfix an das Relay weitergeleitet, wenn die Adresse in der Transport Tabelle steht. Alle anderen werden lokal zugestellt.