Setting Out of Office message for someone else
On occasion, a member of our team calls in sick and is either unwilling, or unable, to set their Out of Office message in Exchange.
What we've done in the past is just reset that user's password, give it to their manager, and have the manager set the Out of Office message. At other times, managers have kept spreadsheets containing users' passwords (without IT's knowledge!) so that they don't have to involve us at all.
We're thinking there has to be a better way...and that we can't possibly be the first organization to have this problem.
What are some ways you guys have solved this problem?
There is no way to do it from the Exchange system Manager, but you can give yourself FULL access to their mailbox, and the profile, and do it that way. Then you don't have to change the password. As Kara pointed out, instead of the profile, if you have outlook web access enabled (OWA), you can use that.
Please first go into ADUC (Active Directory Users and Computers), expand the domain, locate the Users, in the right panel, find the user that you need to set the Out Of Office.
Right click it, in the Exchange Advanced tab, click Mailbox Rights, confirm your account has the rights for read permissions and full mailbox access. Then click OK.
After that, please open Control Panel, locate Mail icon, double click it, click Show Profiles button, click Add button, then follow the wizard to create the user profile. When you are prompted to input the user account and password, please input your account and password instead of the user profile itself.
--http://social.technet.microsoft.com/Forums/en-US/...
My solution is this:
I created a user account that has full mailbox access to every mailbox (you can grant this at the level of the server).
I then wrote a little program that runs with these permissions, but set up in such a way that the user accessing the program does not need the password. This is done by running the program on a web server using impersonation.
This is in VB.NET / WebForms.
In web.config:
<identity impersonate="true" userName="domain\username" password="password" />
Then there is a really simple ASP.NET page. In the aspx, I have this:
<%@ 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>
and in the .vb file, I have
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
Note that you will need to have Outlook installed on the web server you run this on, as it uses MAPI to connect to the mailserver (you also need a reference at the project level to Microsoft CDO Library, which is MAPI). As long as you are all one Exchange Organisation, it doesn't matter which mailserver - Exchange will redirect the app to the right server.
You can use the section of your web.config to restrict access to the app to your helpdesk and sysadmins so ordinary users can't access the application themselves.
You can use Exchange PowerShell Set-MailboxAutoReplyConfiguration for this:
To Enable
Set-MailboxAutoReplyConfiguration -Identity tony -AutoReplyState Enabled -InternalMessage "Internal auto-reply message."
-ExternalMessage "External auto-reply message."
Scheduled
Set-MailboxAutoReplyConfiguration -Identity tony -AutoReplyState Scheduled -StartTime "7/10/2015 08:00:00" -EndTime "7/15/2015 17:00:00" -InternalMessage "Internal auto-reply message"
To Disable
Set-MailboxAutoReplyConfiguration -Identity tony -AutoReplyState Disabled
You didn't say what version of Exchange you had, but it looks like it will be possible to set the message via a powershell script in Exchange 2010 and Exchange 2007 if you install EWS Managed API. Right now it appears this is only available as a release candidate though.
If you log into your Exchange management Console as the Domain Admin or Exchange Admin - and then expand your exchange Server, then Select 'Toolbox'. Then double click in Message tracking to open the web console and log in as Domain Admin/Exchange Admin. At the top select 'Manage My organisation' then select 'Another User'. Search for, and select, the user. When the user's properties sheet opens on the right there is a 'Tell People You're on Vacation'. You can set the Out of Office there. without giving anyone anyone else's details or knowing anyone else's passwords.