簡體   English   中英

如何使用 Microsoft.Office.Interop.Outlook 創建默認配置文件並啟動 Outlook 客戶端 (GUI)

[英]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;
}

請參閱C# 應用程序自動化 Outlook (CSAutomateOutlook)示例代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM