none
Exchange-Online: Kontakte an Benutzer verteilen RRS feed

  • Frage

  • Hallo,
    ich versuche gerade, eine Web-Oberfläche zu erstellen, die folgende Aufgaben erledigen soll:

    1. per Job (VB.NET) soll eine bestimmte Kategorie von Kontakten in alle Postfächer syncronisiert werden
    2. der Benutzer kann sich weitere Kontakte selbst in sein Postfach syncronisieren

    Wie kann ich denn alle Postfächer auslesen, um diese mit einem admin-Konto zu manipulieren?

    Mit meiner bescheidener Erfahung mit EWS habe ich es bisher nur hinbekommen Mails über ein Shared-Postfach zu Empfangen, Verschieben und Versenden.

    Jedoch gelingt es mir nicht auf einzelnes Benutzer-Postfach zuzugreifen und einen neuen Kontakt anzulegen, geschweige denn alle Postfächer abzugrasen.

    Anbei mein naiver, missglückter Versuch:

            Dim EWS As ExchangeService = New ExchangeService With {
            .Credentials = New WebCredentials("admin@firma.onmicrosoft", "***"),
                    .Url = New Uri("https://outlook.office365.com/EWS/Exchange.asmx")
            }
    
            Dim MBox As Mailbox = New Mailbox("user@firma.com")
    
            Dim Kontakt As Contact = New Contact(EWS) With {
                .DisplayName = "Max Mustermann",
                .CompanyName = "Musterfirma",
                .Surname = "Mustermann",
                .GivenName = "Max"
            }
            
            Dim Folder As FolderId = New FolderId(WellKnownFolderName.Contacts, MBox)
    
            Kontakt.Save(Folder)

    Mit dem Admin-Account kommt der Fehler "unzulässig", verwende ich zur Anmeldung den User-Account, erhalte ich den Fehler "nicht autorisiert".
    Vielleicht könnte mir jemand auf die Sprünge helfen?

    Vielen Dank.


    Viele Grüße, Volker


    • Bearbeitet Volker S Montag, 19. April 2021 11:55
    Montag, 19. April 2021 11:54

Antworten

Alle Antworten

  • Moin,

    mit VB habe ich da keine Erfahrung, aber mit PowerShell oder C# brauchst Du entweder die ApplicationImpersonation-Rolle (falls Du als Admin zugreifen möchtest) oder halt Name und Passwort...

    Allerdings ist es bei O365 ja oft so, dass normale Postfächer keine Basic-Authentifizierung mehr akzeptieren, das musst Du vielleicht prüfen.


    Evgenij Smirnov

    http://evgenij.smirnov.de


    • Bearbeitet Evgenij Smirnov Montag, 19. April 2021 13:16
    • Als Antwort markiert Volker S Dienstag, 20. April 2021 12:01
    Montag, 19. April 2021 13:06
  • Also die Anmeldung mit dem eigenen Account funktionert. Ich Depp hatte einen Tippfehler im Kennwort.
    Sorry.

    Trotzdem weiß ich nicht, wie ich auf alle Postfächer zugreifen kann. Mit dem Admin-Account komm ich nicht hin.


    Viele Grüße, Volker

    Montag, 19. April 2021 13:17
  • Du musst dem Admin die Rolle ApplicationImpersonation geben und dann mit ImpersonatedUserId arbeiten wie hier beschrieben: https://docs.microsoft.com/en-us/previous-versions/office/developer/exchange-server-2010/dd633680(v=exchg.80)

    Evgenij Smirnov

    http://evgenij.smirnov.de

    • Als Antwort markiert Volker S Dienstag, 20. April 2021 12:02
    Montag, 19. April 2021 13:20
  • Ich danke dir für den Hinweis.
    Es hat zwar eine gefühlte Ewigkeit gedauert, bis die Zuweisung auch funktioniert hatte, aber nach ca. 5 Std. hat es dann geklappt.

    Besten Dank nochmals.

    Falls es jemand interessiert, hier die Funktion:

            Dim EWS As ExchangeService = New ExchangeService With {
                    .Credentials = New WebCredentials("admin@firma.com", "xxxxx"),
                    .Url = New Uri("https://outlook.office365.com/EWS/Exchange.asmx")
            }
    
    
            EWS.ImpersonatedUserId = New ImpersonatedUserId(ConnectingIdType.SmtpAddress, "benutzer@firma.com")
    
            Dim Kontakt As Contact = New Contact(EWS) With {
                .DisplayName = "Max Mustermann",
                .CompanyName = "Musterfirma",
                .Surname = "Mustermann",
                .GivenName = "Max"
            }
    
            Dim adress As PhysicalAddressEntry = New PhysicalAddressEntry With {
                .City = "Ort",
                .CountryOrRegion = "Bundesland",
                .PostalCode = "000000",
                .State = "DE",
                .Street = "Straße 1-2"
            }
    
    
            With Kontakt
                .EmailAddresses.Item(EmailAddressKey.EmailAddress1) = "max.mustermann@gealan.com"
                .Body = "imported by script"
                .CompanyName = "Firma"
                .FileAs = "MaxMustermann"
                .Initials = "maxmuster"
                .JobTitle = "alter Verwalter"
                .Manager = "der Oberverwalter"
                .NickName = "MusterMax"
                .OfficeLocation = "im Büro"
                With .PhoneNumbers
                    .Item(PhoneNumberKey.BusinessFax) = "+49 1234 456"
                    .Item(PhoneNumberKey.BusinessPhone) = "+49 1234 455"
                    .Item(PhoneNumberKey.MobilePhone) = "+49 170 123 45 678"
                    .Item(PhoneNumberKey.OtherTelephone) = "+49 1234 45 678"
                End With
                .BusinessHomePage = "https://homepage.com"
                .PhysicalAddresses.Item(PhysicalAddressKey.Business) = adress
            End With
    
            Dim Folder As FolderId = New FolderId(WellKnownFolderName.Contacts)
    
            Kontakt.Save(Folder)
    


    Viele Grüße, Volker


    • Bearbeitet Volker S Dienstag, 20. April 2021 12:09
    Dienstag, 20. April 2021 12:04