![](/img/trans.png)
[英]Using Microsoft.Office.Interop.Outlook without Outlook Client installed
[英]How to create a default profile and launch outlook client(GUI) using Microsoft.Office.Interop.Outlook
我試圖使用默認配置文件啟動 Outlook 或使用Microsoft.Office.Interop.Outlook程序集文件創建默認配置文件。 但是在啟動我的 Outlook 應用程序時出現以下錯誤。 錯誤消息:屬性“http://schemas.microsoft.com/mapi/proptag/0x7C070102”未知或找不到。 我是這個大會的新手。 還建議任何其他框架來實現我的目標
Outlook.Application OutlookClient()
{
Outlook.Application oOutlook = null;
Outlook.NameSpace oNS = null;
oOutlook = new Outlook.Application();
oNS = oOutlook.GetNamespace("MAPI");
oNS.Logon("My profile", "myprofilepassword", false, false);
oOutlook = Marshal.GetActiveObject("Outlook.Application") as Outlook.Application;
return oOutlook;
}
首先,不需要在代碼中兩次初始化Application實例對象:
oOutlook = new Outlook.Application();
和
oOutlook = Marshal.GetActiveObject("Outlook.Application") as Outlook.Application;
其次,不需要使用Logon
方法。
以下是 MSDN 對此的聲明:
當 Outlook 尚未運行時,僅使用登錄方法登錄到特定配置文件。 這是因為一次只能運行一個 Outlook 進程,並且該 Outlook 進程僅使用一個配置文件並且僅支持一個 MAPI 會話。 當用戶第二次啟動 Outlook 時,該 Outlook 實例在同一個 Outlook 進程中運行,不會創建新進程,並使用相同的配置文件。
如果 Outlook 已在運行,則使用此方法不會創建新的 Outlook 會話或將當前配置文件更改為其他配置文件。
如果 Outlook 未運行並且您只想使用默認配置文件啟動 Outlook,請不要使用登錄方法。 下面的代碼示例 InitializeMAPI 顯示了更好的替代方法:首先,實例化 Outlook 應用程序對象,然后引用默認文件夾,例如收件箱。 這具有初始化 MAPI 以使用默認配置文件並使對象模型完全起作用的副作用。
Sub InitializeMAPI ()
' Start Outlook.
Dim olApp As Outlook.Application
Set olApp = CreateObject("Outlook.Application")
' Get a session object.
Dim olNs As Outlook.NameSpace
Set olNs = olApp.GetNamespace("MAPI")
' Create an instance of the Inbox folder.
' If Outlook is not already running, this has the side
' effect of initializing MAPI.
Dim mailFolder As Outlook.Folder
Set mailFolder = olNs.GetDefaultFolder(olFolderInbox)
' Continue to use the object model to automate Outlook.
End Sub
從 Outlook 2010 開始,如果您有多個配置文件,您已將 Outlook 配置為始終使用默認配置文件,並且您使用Logon
方法登錄默認配置文件而不提示用戶,則用戶將收到選擇配置文件的提示反正。 為避免這種行為,請不要使用Logon
方法; 請改用前面InitializeMAPI
示例中建議的解決方法。
因此,您的代碼應如下所示:
Outlook.Application OutlookClient()
{
Outlook.Application oOutlook = null;
Outlook.NameSpace oNS = null;
oOutlook = new Outlook.Application();
// optional
oNS = oOutlook.GetNamespace("MAPI");
Outlook.MAPIFolder folderInbox = oNS.GetDefaultFolder(olFolderInbox)
return oOutlook;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.