Meine Lösung lautet:
Ich habe ein Benutzerkonto erstellt, das vollen Postfachzugriff auf jedes Postfach hat (Sie können dies auf Serverebene gewähren).
Ich habe dann ein kleines Programm geschrieben, das mit diesen Berechtigungen ausgeführt wird, aber so eingerichtet ist, dass der Benutzer, der auf das Programm zugreift, das Kennwort nicht benötigt. Dies erfolgt durch Ausführen des Programms auf einem Webserver im Identitätswechsel.
Dies ist in VB.NET / WebForms.
In web.config:
<identity impersonate="true" userName="domain\username" password="password" />
Dann gibt es eine wirklich einfache ASP.NET-Seite. In der Aspx habe ich Folgendes:
<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="Default.aspx.vb" Inherits="SetOOF._Default" AspCompat="true"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<p>
Username
<asp:TextBox ID="txtUsername" runat="server"></asp:TextBox>
<asp:Button ID="btnGetUser" runat="server" Text="Select" />
</p>
<p>
<asp:Label ID="lblUserName" runat="server"></asp:Label>
</p>
<p> <asp:CheckBox ID="chkOofEnabled" runat="server" /> Out of Office on/off
</p>
</div>
<p>
<asp:TextBox ID="txtOofText" runat="server" Height="217px" Width="479px"
TextMode="MultiLine"></asp:TextBox>
</p>
<p>
<asp:Button ID="btnUpdateUser" runat="server" Text="Update User" />
</p>
</form>
</body>
</html>
und in der .vb-Datei habe ich
Imports MAPI
Partial Public Class _Default
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
End Sub
Protected Sub btnGetUser_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnGetUser.Click
Dim ses As MAPI.Session
ses = New MAPI.Session
ses = CreateObject("MAPI.Session")
ses.Logon(ShowDialog:=False, NoMail:=True, ProfileInfo:="mailserver" & vbLf & txtUsername.Text)
Dim user As MAPI.AddressEntry = ses.CurrentUser
lblUserName.Text = user.Name
chkOofEnabled.Checked = ses.OutOfOffice
txtOofText.Text = ses.OutOfOfficeText
ses.Logoff()
End Sub
Protected Sub btnUpdateUser_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnUpdateUser.Click
Dim ses As New MAPI.Session
ses = CreateObject("MAPI.Session")
ses.Logon(ShowDialog:=False, NoMail:=True, ProfileInfo:="mailserver" & vbLf & txtUsername.Text)
ses.OutOfOffice = chkOofEnabled.Checked
ses.OutOfOfficeText = txtOofText.Text
ses.Logoff()
End Sub
End Class
Beachten Sie, dass Outlook auf dem Webserver installiert sein muss, auf dem Sie dies ausführen, da MAPI für die Verbindung zum Mailserver verwendet wird (Sie benötigen auf Projektebene auch einen Verweis auf Microsoft CDO Library, MAPI). Solange Sie alle eine Exchange-Organisation sind, spielt es keine Rolle, welcher Mailserver - Exchange leitet die App auf den richtigen Server um.
Sie können den Abschnitt Ihrer web.config verwenden, um den Zugriff auf die App auf Ihren Helpdesk und Ihre Systemadministratoren zu beschränken, sodass normale Benutzer nicht selbst auf die Anwendung zugreifen können.