我有用户myuser在Windows中登录,我用其他用户打开程序。
我需要那个然后我在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);
答案 0 :(得分:1)
在所需用户的上下文中启动您的应用程序,或
WindowsIdentity.Impersonate Method
确保Outlook不会在您的会话中运行。 Outlook只能在会话中运行一次 - 因此无法同时在一个Windows会话中使用不同的Outlook-MAPI-Sessions登录。你总是要重新开放前景。
另一种方法是配置多个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;
}
}
另一种方法是使用EWS-API(Exchange WebServices-API),但这需要拥有Exchange或Office365帐户。并且仅在你想在后台处理outlook-items时才有用(.Display()是不可能的) 如果您使用的是Exchange帐户(Office365),我更愿意这样做... Get started with EWS Managed API client applications