sachsenhessi
Goto Top

EWS und die Credentials bzw. service.UseDefaultCredentials

Hallo @all,

ich stehe mal wieder im Walde...

Folgendes Problem:
Ich möchte eine Mail mit EWS senden und dafür den aktuell angemeldeten User nutzen.
(Wir haben "single sign on" d.h. nach Anmeldung an der Domäne ist keine besondere Exchangeanmeldung notwendig.)
Ich würde nun gerne die Credentials des angemeldeten Users an EWS weiterreichen. Nur wie ?
Funktioniert leider nicht:
Dim service As New ExchangeService()

service.Url = New Uri(My.Settings.Office365WebserivceURL)
service.PreAuthenticate = True
service.UseDefaultCredentials = True

Dim Message As New EmailMessage(service)
Message.Subject = "Das ist ein Test 3"  
Message.Body = "Das ist ein Test 3"  
Message.ToRecipients.Add(My.Settings.Recipients)

Message.SendAndSaveCopy()


Auch das geht nicht:
Dim service As New ExchangeService()

service.Url = New Uri(My.Settings.Office365WebserivceURL)
service.PreAuthenticate = True

service.Credentials = System.Net.CredentialCache.DefaultCredentials.GetCredential(New Uri("domain\user"), "")  

Dim Message As New EmailMessage(service)
Message.Subject = "Das ist ein Test 3"  
Message.Body = "Das ist ein Test 3"  
Message.ToRecipients.Add(My.Settings.Recipients)
Message.SendAndSaveCopy()
Das "AutoDiscoverURL("MailAdresse") kann ich leider nicht nutzen, da das scheinbar bei uns nicht unterstützt wird.

Hat jemand eine Idee ?

Zweck der Übung ist, beim Senden Outlook nicht zu nutzen (über die Interop-Klassen) aber trotzdem die gesendete Mail über den User zu senden (z.Bsp. wegen der Ablage in "sent items"). Nur sollen die User nicht nochmal die Logindaten (resp. Passwort) eingeben bzw.hinterlegen müssen.

Vielen Dank im Voraus

Frank

Content-ID: 356126

Url: https://administrator.de/contentid/356126

Printed on: November 10, 2024 at 07:11 o'clock

134464
134464 Nov 25, 2017 updated at 15:56:47 (UTC)
Goto Top
Du hast keine Service-URL angegeben, wenn du kein AutoDiscover nutzt muss der Service ja irgendwoher erfahren mit welchem Ex er sich verbinden soll ...
service.Url = new Uri("https://server.domain.local/EWS/Exchange.asmx");   
Funktioniert leider nicht:
Naja das kannst du sicher besser face-sad, "Funktioniert nicht" sagt uns rein gar nichts!!

Findet sich alles hier im Forum, also Suchfunktion des Forums nutzen...
SachsenHessi
SachsenHessi Nov 25, 2017 at 17:21:29 (UTC)
Goto Top
Hallo,

leider ist die Service-URL da face-smile siehe Zeile 3 (und sorry, da steht eine leider eine Setting-Variable vielleicht hast Du es ja daher nicht gesehen.)

Und glaub mir, ich habe gesucht und alles mir bekannte / oder gefundene ausprobiert.

SH
134464
134464 Nov 25, 2017 updated at 18:34:42 (UTC)
Goto Top
Fehlermeldung kannst du aber schon posten????
Try catch einbauen... Und XML Response des Requests posten bitte! Danke.

Nutze dazu bitte erst
https://ewseditor.codeplex.com
Damit ist das Debugging erheblich leichter.
Erst wenn es dort lüppt, zurück zum Code.
134464
134464 Nov 25, 2017 updated at 18:40:29 (UTC)
Goto Top
Edit: Sehe gerade, mit Exchange Online geht die Nutzung der Eigenschaft nicht, siehe:
https://msdn.microsoft.com/en-us/library/office/microsoft.exchange.webse ...
You cannot use the default credentials of the logged on user if the user’s mailbox is hosted in Exchange Online or Exchange Online as part of Office 365. Instead, use the Credentials property to set the user’s credentials. The user’s credentials must be in user principal name (UPN) form for Exchange Online.
Du musst also den UPN in den Credentials nutzen.
SachsenHessi
SachsenHessi Nov 26, 2017 at 13:31:58 (UTC)
Goto Top
Hallo Specht,

darum geht es ja gerade.
Ich würde gern die Credentials des aktuell angemeldeten Nutzers (Net.Credentials) den Credentials des EWS übergeben.
Nur leider kriege ich diesen nicht. Sondern User resp. Passwort - Properties der Net.Credentials sind "leer"..
Die Frage ist also, wie bekomme ich die Credentials eines angemeldeten Nutzers in ein neues Credentials-Objekt um dieses dann weiter nutzen zu können.

Gruß
SH
134464
134464 Nov 26, 2017 updated at 15:47:15 (UTC)
Goto Top
Zitat von @SachsenHessi:

Hallo Specht,

darum geht es ja gerade.
Ich würde gern die Credentials des aktuell angemeldeten Nutzers (Net.Credentials) den Credentials des EWS übergeben.
Nur leider kriege ich diesen nicht. Sondern User resp. Passwort - Properties der Net.Credentials sind "leer"..
Das ist normal. Das wäre ja geradezu eine Einladung das eine fremde Anwendung mein Passwort auslesen könnte face-wink, die sind intern geschützt, du kannst sie verwenden aber ein Auslesen ist damit nicht möglich.
Und wenn dann hättest du die GetNetworkCredential Methode nehmen müssen. Bringt dir hier aber ebenfalls nichts denn:
Die Frage ist also, wie bekomme ich die Credentials eines angemeldeten Nutzers in ein neues Credentials-Objekt um dieses dann weiter nutzen zu können.
Der User muss sich mit UPN anmelden.
SachsenHessi
SachsenHessi Nov 26, 2017 at 16:09:30 (UTC)
Goto Top
Schade, ich hatte es befürchtet.
Ich wollte dem Nutzer ersparen sich nochmal anmelden zu müssen, bzw. sein PW für Office im Programm zu hinterlegen. Geht aber auch (so mache ich es derzeit.).
Trotzdem Danke.
SH
134464
134464 Nov 26, 2017 at 17:41:36 (UTC)
Goto Top
SachsenHessi
SachsenHessi Nov 26, 2017 at 20:30:30 (UTC)
Goto Top
Oh, Danke.
Da muss ich mal sehen, wie das funktioniert.
Damit hatte ich bisher noch nix zu tun.
Aber jetzt habe ich zumindest mal eine "neue" Richtung ;)

Gruß
SH