如何在不同用户的Outlook中打开新邮件?

时间:2015-05-06 11:45:44

标签: c# winforms outlook windows-authentication

我有用户myuser在Windows中登录,我用其他用户打开程序。

enter image description here

我需要那个然后我在outlook中打开新邮件它会用myuser打开它。我使用的代码是:

Outlook.Application App = new Outlook.Application();
        Outlook._MailItem MailItem = (Outlook._MailItem)App.CreateItem(Outlook.OlItemType.olMailItem);
        MailItem.To = BossName.Text;
        MailItem.CC = ClientName.Text;
        MailItem.Display(true);

1 个答案:

答案 0 :(得分:1)

在所需用户的上下文中启动您的应用程序,或

  1. 您可以使用模拟:
  2. WindowsIdentity.Impersonate Method

    确保Outlook不会在您的会话中运行。 Outlook只能在会话中运行一次 - 因此无法同时在一个Windows会话中使用不同的Outlook-MAPI-Sessions登录。你总是要重新开放前景。

    1. Multible Outlook-Profiles
    2. 另一种方法是配置多个Outlook配置文件并通过.net启动Outlook并传递Profilename。但这可能有点棘手,因为你总是要检查outlook是否已经在不同的profilecontext中运行 - 因为如果outlook已经打开,将忽略Profile-Parameter。

      class Sample
      {
          Outlook.Application GetApplicationObject()
          {
      
              Outlook.Application application = null;
      
              // Check whether there is an Outlook process running.
              if (Process.GetProcessesByName("OUTLOOK").Count() > 0)
              {
      
                  // If so, use the GetActiveObject method to obtain the process and cast it to an Application object. Or close Outlook to open a new instance with a desired profile
                  application = Marshal.GetActiveObject("Outlook.Application") as Outlook.Application;
                  //!! Check if the application is using the right profile - close & reopen if necessary
              }
              else
              {
      
                  // If not, create a new instance of Outlook and log on to the default profile.;
                  application = new Outlook.Application();
                  Outlook.NameSpace nameSpace = application.GetNamespace("MAPI");
                  nameSpace.Logon("profilename", "", Missing.Value, Missing.Value);
                  nameSpace = null;
              }
      
              // Return the Outlook Application object.
              return application;
          }
      
      }
      
      1. 如果可能,请使用EWS
      2. 另一种方法是使用EWS-API(Exchange WebServices-API),但这需要拥有Exchange或Office365帐户。并且仅在你想在后台处理outlook-items时才有用(.Display()是不可能的) 如果您使用的是Exchange帐户(Office365),我更愿意这样做... Get started with EWS Managed API client applications