La mia soluzione è questa:
Ho creato un account utente con accesso completo alle cassette postali per ogni cassetta postale (puoi concederlo a livello di server).
Ho quindi scritto un piccolo programma che funziona con queste autorizzazioni, ma impostato in modo tale che l'utente che accede al programma non abbia bisogno della password. Questo viene fatto eseguendo il programma su un server Web usando la rappresentazione.
Questo è in VB.NET / WebForms.
In web.config:
<identity impersonate="true" userName="domain\username" password="password" />
Quindi c'è una pagina ASP.NET davvero semplice. Nell'aspx, ho questo:
<%@ 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>
e nel file .vb, ho
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
Si noti che è necessario che Outlook sia installato sul server Web su cui si esegue, poiché utilizza MAPI per connettersi al server di posta (è inoltre necessario un riferimento a livello di progetto alla libreria CDO di Microsoft, ovvero MAPI). Fintanto che sei un'unica organizzazione di Exchange, non importa quale server di posta - Exchange reindirizzerà l'app al server giusto.
Puoi utilizzare la sezione web.config per limitare l'accesso all'app al tuo helpdesk e amministratori di sistema in modo che gli utenti ordinari non possano accedere all'applicazione da soli.