Giải pháp của tôi là thế này:
Tôi đã tạo một tài khoản người dùng có quyền truy cập hộp thư đầy đủ vào mọi hộp thư (bạn có thể cấp tài khoản này ở cấp máy chủ).
Sau đó tôi đã viết một chương trình nhỏ chạy với các quyền này, nhưng thiết lập theo cách mà người dùng truy cập chương trình không cần mật khẩu. Điều này được thực hiện bằng cách chạy chương trình trên máy chủ web bằng cách sử dụng mạo danh.
Đây là trong VB.NET / WebForms.
Trong web.config:
<identity impersonate="true" userName="domain\username" password="password" />
Sau đó, có một trang ASP.NET thực sự đơn giản. Trong aspx, tôi có cái này:
<%@ 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>
và trong tệp .vb, tôi có
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
Lưu ý rằng bạn sẽ cần cài đặt Outlook trên máy chủ web khi bạn chạy ứng dụng này, vì nó sử dụng MAPI để kết nối với máy chủ thư (bạn cũng cần một tài liệu tham khảo ở cấp dự án cho Thư viện CDO của Microsoft, đó là MAPI). Miễn là bạn là tất cả một Tổ chức trao đổi, không quan trọng máy chủ nào - Exchange sẽ chuyển hướng ứng dụng đến đúng máy chủ.
Bạn có thể sử dụng phần web.config để hạn chế quyền truy cập vào ứng dụng đối với bộ phận trợ giúp và sysadins của mình để người dùng thông thường không thể tự truy cập ứng dụng.