Outlook:传递用户名以获取AddressEntry

时间:2015-01-17 14:13:19

标签: .net outlook

在我的网络应用程序中,我需要从交换服务器获取用户的freebusy信息。

我可以使用以下代码获取我的帐户所需的信息,然后使用GetFreeBusy方法

private void GetCurrentUserInfo()
{
    Outlook.AddressEntry addrEntry =
        Application.Session.CurrentUser.AddressEntry;
    if (addrEntry.Type == "EX")
    {
        Outlook.ExchangeUser currentUser =
            Application.Session.CurrentUser.
            AddressEntry.GetExchangeUser();
        if (currentUser != null)
        {
            StringBuilder sb = new StringBuilder();
            sb.AppendLine("Name: "
                + currentUser.Name);
            sb.AppendLine("STMP address: "
                + currentUser.PrimarySmtpAddress);
            sb.AppendLine("Title: "
                + currentUser.JobTitle);
            sb.AppendLine("Department: "
                + currentUser.Department);
            sb.AppendLine("Location: "
                + currentUser.OfficeLocation);
            sb.AppendLine("Business phone: "
                + currentUser.BusinessTelephoneNumber);
            sb.AppendLine("Mobile phone: "
                + currentUser.MobileTelephoneNumber);
            Debug.WriteLine(sb.ToString());
        }
    }
}

现在我想从文本框或下拉列表中传递用户名以获取用户的AddressEntry,并且不确定使用哪种方法。请帮忙。

谢谢, 纳文

3 个答案:

答案 0 :(得分:0)

调用Application.CreateRecipient传递收件人的姓名,然后Recipient.Resolve。然后,您可以使用Recipient.FreeBusyRecipient.AddressEntry.GetFreeBusy

请记住,Outlook不能用于ma服务,例如IIS。

答案 1 :(得分:0)

  

在我的网络应用程序中

Microsoft目前不建议也不支持从任何无人参与的非交互式客户端应用程序或组件(包括ASP,ASP.NET,DCOM和NT服务)自动化Microsoft Office应用程序,因为Office在此环境中运行Office时,可能会出现不稳定的行为和/或死锁。

如果要构建在服务器端上下文中运行的解决方案,则应尝试使用已为安全无人值守执行的组件。或者,您应该尝试找到允许至少部分代码在客户端运行的替代方法。如果从服务器端解决方案使用Office应用程序,则应用程序将缺少许多成功运行的必要功能。此外,您将承担整体解决方案稳定性的风险。您可以在Considerations for server-side Automation of Office文章中详细了解相关内容。

请考虑使用EWS,有关详细信息,请参阅EWS Managed API, EWS, and web services in Exchange

答案 2 :(得分:0)

正如德米特里所说,你可以CreateRecipient然后Resolve

                var currentItem = (Office.Interop.Outlook.AppointmentItem)Globals.RoomAssistantAddIn.Application.ActiveInspector().CurrentItem;
                var oranizer = Globals.RoomAssistantAddIn.Application.Session.CreateRecipient(currentItem.Organizer);
                if (currentItem.Organizer != null && oranizer.Resolve())
                {
                    var user = oranizer.AddressEntry.GetExchangeUser();
                    ... // do what you want to do
                }