Teams ohne Exchange Postfach

Microsoft Teams ist in vielen Lizenzpaketen von Microsoft enthalten und in fast allen Paketen ist auch eine Exchange Lizenz enthalten. Dennoch kann es ja unerwünscht sein, ein Exchange Postfach einzurichten, weil der lokale Exchange Server noch nicht angebunden oder zu alt ist oder ein gänzlich anderes Mailprogramm (GroupWise, Notes, Kopana etc.) zum Einsatz kommt. Wie können Sie diese Herausforderung umsetzen?

"Nur Teams" lizenzieren

Es fängt natürlich schon einmal damit an, dass der Benutzer kein Exchange Postfach in der Cloud bekommt oder das OnPremises-Postfach nicht kompatibel ist. Zum Test habe ich daher einfach einen Benutzer in Office 365 angelegt, der im Rahmen eines Office 365 E3-Pakets nur die Teams Lizenz bekommen hat:

Alle anderen Checkboxen sind deaktiviert, d.h. der Benutzer hat nicht nur keine Exchange Lizenz sondern auch keine SharePoint-Lizenz u.a.

Anzeige in Teams

Dennoch kann der Anwender nach kurzer Zeit auch Teams starten und nutzen. Es gibt natürlich Unterschiede:

Beispiel

Teams mit Exchange

Teams ohne Exchange

In der Navigation ist direkt zu sehen, dass der Benutzer ohne Exchange Postfach keinen Kalender hat. Das Teams Backend kann nicht per EWS auf ein Postfach zugreifen.

Damit kann ein Benutzer ohne Postfach natürlich auch nicht in den eigenen Kalender schauen, in dem vielleicht Teams-Meeting verzeichnet sind. Es ist ja durchaus möglich, dass sie von einer anderen Person eingeladen werden.

Die Meeting-URL ist natürlich im Kalender ihres Gogle-Mail, Notes, Kopano u.a. Server aber für Teams so nicht erreichbar. Sie können aber in der "anderen" App den Teams-Meeting-Link klicken und einem Meeting teilnehmen

Auch bei der Planung von Terminen in einem Kanal hat sich der Dialog reduziert:

Der Benutzer ohne Exchange Postfach kann natürlich auch kein Outlook starten. Damit entfällt auch das Plugin

Nicht verfügbar

Teams Scheduling ohne Exchange

Der größte Nachteil mit Teams ohne Exchange Postfach ist natürlich die fehlende "Planungs-Funktion". Sie können ja durchaus auch ohne Exchange mit ihrer eigenen Collaboration-Lösung einen Termin mit anderen Teilnehmern planen. Die Frage ist nur, wie Sie hier zu einer Meeting-URLs kommen. Einen Web-Scheduler wie bei Skype for Business gibt es in Teams leider nicht. Es gibt nur den Wunsch bei Teams UserVoice und die nachgerüstete Funktion mit Team Free

Nun wissen wir aber auch, dass Outlook sehr wohl Meetings "Planen" kann und dafür mit dem Teams Backend kommunizieren muss. Da könnte es doch möglich sein, dass Teams eine API anbietet, mit der man per Software mal schnell selbst ein Meeting zu einer bestimmten Zeit anfordern kann. Wenn ich per Fiddler die teams-Kommunikation mitschneide, während ich einen Termin plane, dann sind schon passende URLs sichtbar aber keine direkt nutzbare Adresse.

Teams frage erst meine Zeitzone und meine Freizeiten ab und scheint dann ein Meeting anzulegen und am Ende den Kalender zur Anzeige abzurufen. Den generierten Meeting-Link habe ich so aber nicht gefunden.

Auch über die GraphAPI kann ein Meeting geplant werden:

Laut Beschreibung sollte folgender einfache Aufruf ein Meeting planen.

POST https://graph.microsoft.com/v1.0/me/onlineMeetings
Content-Type: application/json 

{ 
   "startDateTime":"2020-10-12T14:30:34.2444915-07:00", 
   "endDateTime":"2020-10-12T15:00:34.2464912-07:00", 
   "subject":"MSXFAQ Sample Meeting" 
}

Am einfachsten nutzen Sie dazu den Graph Explorer

Beim ersten Aufruf kommt noch ein Fehler, dass mir die Berechtigungen fehlen.

Die kann ich mir aber geben:

Ich habe den Request erneut abgesetzt und nach ca. 4 Sekunden habe ich erfolgreich eine MeetingURl erhalten

Die JSON-Antwort ist natürlich um einiges länger. (Zur Lesbarkeit umgebrochen)

{
    "@odata.context": "https://graph.microsoft.com/v1.0/$
                        metadata#users('9899xxxx-xxxx-xxxx-xxxx-xxxxxxxx5753')/onlineMeetings/$entity",
    "id": "9899xxxx-xxxx-xxxx-xxxx-xxxxxxxx5753_19:meeting_YmV
                        ixxxxxxxxxxxxxxxxxxxxxxkOGRk@thread.v2",
    "creationDateTime": "2020-08-26T15:40:57.6330853Z",
    "startDateTime": "2020-10-12T21:30:34.2444915Z",
    "endDateTime": "2020-10-12T22:00:34.2464912Z",
    "joinUrl": "https://teams.microsoft.com/l/meetup-join/
                        19%3ameeting_YmVixxxxxxxxxxxxxxxxxxxxxxkOGRk%40thread.v2/0?
               context=%7b%22Tid%22%3a%22xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx%22%2c%22
               Oid%22%3a%229899xxxx-xxxx-xxxx-xxxx-xxxxxxxx5753%22%7d",
    "joinWebUrl": "https://teams.microsoft.com/l/meetup-join
                        /19%3ameeting_YmVixxxxxxxxxxxxxxxxxxxxxxkOGRk%40thread.v2/0?
               context=%7b%22Tid%22%3a%22xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx%22%2c%22
               Oid%22%3a%229899xxxx-xxxx-xxxx-xxxx-xxxxxxxx5753%22%7d",
    "subject": "MSXFAQ Sample Meeting",
    "isBroadcast": false,
    "autoAdmittedUsers": "Everyone",
    "outerMeetingAutoAdmittedUsers": null,
    "capabilities": [],
    "videoTeleconferenceId": null,
    "externalId": null,
    "audioConferencing": null,
    "meetingInfo": null,
    "participants": {
        "organizer": {
            "upn": "fcdemo4@msxfaq.de",
            "identity": {
                "acsUser": null,
                "spoolUser": null,
                "phone": null,
                "guest": null,
                "encrypted": null,
                "onPremises": null,
                "acsApplicationInstance": null,
                "spoolApplicationInstance": null,
                "applicationInstance": null,
                "application": null,
                "device": null,
                "user": {
                    "id": "9899xxxx-xxxx-xxxx-xxxx-xxxxxxxx5753",
                    "displayName": null,
                    "tenantId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
                    "identityProvider": "AAD"
                }
            }
        },
        "attendees": []
    },
    "chatInfo": {
        "threadId": "19:meeting_YmVixxxxxxxxxxxxxxxxxxxxxxkOGRk@thread.v2",
        "messageId": "0",
        "replyChainMessageId": null
    },
    "joinInformation": {
        "content": "data:text/html,%0d%0a++%3cdiv+style%3d%22width%3a100%25%3bheight%3a+20px%3b%22%3e%0d%0a%09%09%3c
                        span+style%3d%22white-space%3anowrap%3bcolor%3agray%3bopacity%3a.36%3b%22%3e_______________
                        _____________%3c%2fspan%3e%0d%0a%09+%3c%2fdiv%3e%0d%0a++++%3cdiv+class%3d%22
                        me-email-text%22+style%3d%22color%3a%23252424%3bfont-family%3a%27Segoe+UI%27%2c%27
                        Helvetica+Neue%27%2cHelvetica%2cArial%2csans-serif%3b%22%3e%0d%0a+++%3cdiv+
                        style%3d%22margin-top%3a+24px%3b+margin-bottom%3a+10px%3b%22%3e%0d%0a++++++++
                        %3ca+class%3d%22me-email-headline%22%0d%0a++++++++++++++style%3d%22font-size%3a+18px%3b
                        font-family%3a%27Segoe+UI+Semibold%27%2c%27Segoe+UI%27%2c%27Helvetica+Neue%27%2c
                        Helvetica%2cArial%2csans-serif%3btext-decoration%3a+underline%3bcolor%3a+
                        %236264a7%3b%22%0d%0a++++++++++++++href%3d%22https%3a%2f%2f
                        teams.microsoft.com%2fl%2fmeetup-join%2f19%253ameeting_YmVixxxxxxxxxxxxxxxxxxxxx
                        xkOGRk%2540thread.v2%2f0%3fcontext%3d%257b%2522Tid%2522%253a%2522xxxxxxxx-xxxx-
                        xxxx-xxxx-xxxxxxxxxxxx%2522%252c%2522Oid%2522%253a%25229899xxxx-xxxx-xxxx-xxxx-
                        xxxxxxxx5753%2522%257d%22%0d%0a++++++++++++++target%3d%22_blank%22+rel%3d%22
                        noreferrer+noopener%22%3eAn+Microsoft+Teams-Besprechung+teilnehmen%3c%2fa%3e%0d%0a
                        ++++++%3c%2fdiv%3e%0d%0a%09+%0d%0a%09+%0d%0a%09++%3ca+class%3d%22me-email-link%22
                        +style%3d%22font-size%3a+12px%3btext-decoration%3a+none%3bcolor%3a+%236264a7%3b%22
                        +target%3d%22_blank%22+href%3d%22https%3a%2f%2faka.ms%2fJoinTeamsMeeting%22+
                        rel%3d%22noreferrer+noopener%22%3eWeitere+Informationen+zu+Teams%3c%2fa%3e%0d%0a++++
                        +%7c+%3ca+class%3d%22me-email-link%22+style%3d%22font-size%3a+12px%3btext-decoration
                        %3a+none%3bcolor%3a+%236264a7%3b%22+target%3d%22_blank%22+href%3d%22https%3a%2f%2f
                        teams.microsoft.com%2fmeetingOptions%2f%3forganizerId%3d9899xxxx-xxxx-xxxx-xxxx-
                        xxxxxxxx5753%26tenantId%3dxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx%26threadId%3d19_
                        meeting_YmVixxxxxxxxxxxxxxxxxxxxxxkOGRk%40thread.v2%26messageId%3d0%26language
                        %3dde-DE%22+rel%3d%22noreferrer+noopener%22%3eBesprechungsoptionen%3c%2fa%3e%0d
                        %0a++++%0d%0a+++++%0d%0a+++++%0d%0a++++++%3cdiv+style%3d%22font-size%3a+14px%3b+
                        margin-bottom%3a+4px%3b%22%3e%0d%0a++++++++%0d%0a++++++%3c%2fdiv%3e%0d%0a++++++
                        %3cdiv+style%3d%22font-size%3a+12px%3b%22%3e%0d%0a++++++%0d%0a++++++%3c%2fdiv
                        %3e%0d%0a++++%0d%0a+++++%3c%2fdiv%3e%0d%0a%09+%3cdiv+style%3d%22width%3a100%25
                        %3bheight%3a+20px%3b%22%3e%0d%0a%09%09%3cspan+style%3d%22white-space%3anowrap
                        %3bcolor%3agray%3bopacity%3a.36%3b%22%3e_____________________________________
                        ___________________________________________%3c%2fspan%3e%0d%0a++%3c%2fdiv%3e",
        "contentType": "html"
    }
}

Es sollte aber damit durchaus möglich sein, per Webseite oder lokales Programm auch ohne Exchange Postfach ein Meeting in Teams zu planen. Ob die Meeting-URLs auch wirklich dann gültig sind, wäre noch zu prüfen. Auslesen kann ich sie aber nicht mehr und auch eine Abfrage nach allen Terminen im Kalender scheitert am fehlenden Exchange Postfach:

Dennoch bleibt natürlich die Frage, ob Teams den Termin nur in seiner "internen Datenbank" irgendwo hinterlegt hat, oder vielleicht im Exchange Schattenpostfach, welches angeblich jeder Teams-Benutzer ohne Exchange Lizenz dennoch bekommt. Irgendwo muss Teams ja auch seine 1:1-Chatnachrichten ablegen. Siehe dazu auch Teams Datenablage.

Auch wenn ich so z.B. mit einer Drittsoftware mit Meeting-Links organisieren könnte, würde ich es nicht als "Lösung" bezeichnen. Ich habe keinen Weg gefunden, solche Meeting wieder zu finden und anzupassen. Eine Software müsste also schon selbst die angeforderten Meetings irgendwo verwalten. Auch die Einladung der Teilnehmer im Meeting müsste manuell über eine 3rd Party Software erfolgen.

Who-Bot ohne Postfach

Der WHO-Bot scheint sich auch einigen Funktionen von Exchange zu bedienen. Vermutlich greift der Bot auf die Exchange Adressbücher zurück, um Namen und Organisationsdiagramme zu erhalten. Ohne Exchange Postfach geht das natürlich auch nicht. Die Fehlermeldung kommt von einem Client, der Teams mit OnPremises-Postfach nutzt, bei dem aber der Hybrid-Mode noch nicht konfiguriert ist.

Exchange Spiegelpostfach

Eine ganz andere Option besteht natürlich darin, dem Benutzer tatsächlich ein Exchange Online Postfach zu geben, welches er aber nie nutzen soll. Sie können ein Exchange Online Postfach recht gut abschotten, damit der Anwender selbst davon fast nichts sieht und dennoch partiell nutzbar ist. Wie wäre folgendes:

  • Der Benutzer bekommt ein Exchange Online Postfach
  • Zugriff per Outlook u.a. wird blockiert
    Das geht per SET-CASMailbox oder Conditional Access. Damit sollte der Benutzer auch keine Mails mit diesem Postfach versenden können. Natürlich müssen Sie den Benutzer schon auf diese Besonderheit hinweisen
  • Weiterleitung für eingehende Mails
    Wann immer eine Mail an das Postfach irrtümlich adressiert wird, können Sie diese über die Option TargetAddress/AlternateSMTPAddress einfach zum richtigen Postfach weiterleiten lassen. Das richtig Postfach kann dann wieder ihr OnPremises GroupWise, Notes, Kopano, OpenExchange System sein.
    Wenn Sie nicht umleiten sondern weiterleiten UND eine Kopie im Postfach belassen, dann enthält der Kalender sogar sogar Termineinladungen von anderen Personen. Die Einladungen landen natürlich auch im richtigen Postfach, was verwirrend sein kann.
    Und sie müssten noch einrichten, die normalen Mails im Exchange Postfach z.B. per Retention Policy zu entfernen.
  • Kalender Syncronisation
    Statt Einladungen weiter zu leiten, könnte ein Skript natürlich die Kalender der beiden Postfächer "InSync" halten. Das wird zwar wohl nicht "Realtime" passieren aber könnte durchaus eine Option darstellen.

Aber ob das wirklich eine Lösung darstellen könnte, durfte ich noch nicht aktiv ausprobieren.

Sonderfall Google

Auf den Seite zu "Teams und Education" habe ich noch eine Spielart in Verbindung mit dem Google Kalender gefunden. Wenn eine Schule z.B. die Kollaboration-Funktionen von Teams nutzen möchte aber die Lehrer und Schüler ihr Postfach bei Google betreiben, dann ist eine Koexistenz dennoch möglich. Der Administrator muss den Empfänger in Exchange Online einfach als "MailContact" mit der GoogleMail-Adresse als Ziel aktivieren. Damit kommen die Mails dann auch bei Postfach an.

Angeblich könnte man sogar den Google Kalender über die Funktion " Google Calendar Interop" (https://support.google.com/a/answer/7441020?hl=en) in Teams einbinden. Allerdings ist es damit nicht möglich, in Teams ein Meeting zu planen.

Zwischenstand

Machen wir es kurz: Teams und Terminplanungen funktionieren am besten mit einem Exchange Online Postfach oder in Verbindung mit Exchange 2016+ und korrekt eingerichteten Hybrid-Mode. Alles andere ist vielleicht denkbar aber nicht zu empfehlen. Vielleicht möchte ja jemand einen "WebScheduler" außerhalb von Outlook und Teams nachbauen aber dann sollten Sie auf jeden Fall die Anwender entsprechend schulen, wie damit umzugehen ist´.

Ich hätte eher erwartet, dass vielleicht die Hersteller von anderen MailClients mit Kalenderfunktion so eine "Teams Plug-Funktion" einbauen könnten. Aber die Marktbegleiter tun sich sicher schwer, über den Weg das Tor für Microsoft aufzustoßen. Vor allem haben die Marktbegleiter ja mittlerweile auch ihre Lösungen um Chat- und Konferenzkomponenten erweitert.

Lizenztechnisch gibt es sowieso nicht viel zu sparen, denn es gibt keinen losgelösten Teams-Plan sondern bündelt Teams mit Office 365/Microsoft 365 Business oder Enterprise-Plänen, in denen das Exchange Postfach automatisch enthalten ist.

Wenn Sie vor der Herausforderung stehen, Teams ohne Exchange nutzen zu wollen, dann können wir gerne dazu ein Gespräch führen.

Weitere Links