将 Outlook 代码从 VBScript 转换为 C#

Converting Outlook code from VBScript to C#

我正尝试在 C# 中为以下代码编写等效代码。

Set objApp = CreateObject("Outlook.Application")
Set objNS = CreateObject("Redemption.RDOSession") 
objNS.Logon "appsystemacc", "App@12345", False, False
objNS.MAPIOBJECT = objApp.Session.MAPIOBJECT

EntryID = "someValue"
StoreID = "someValue2"
Set olFolder = objNS.GetFolderFromID(EntryID,StoreID)

到目前为止,我已转换为以下代码,但在 GetFolderFromID() 行调试时出现 "Operation failed" 错误:

Outlook.Application oApp = new Outlook.Application();
Outlook.NameSpace oNS = oApp.GetNamespace("mapi");
oNS.Logon("appsystemacc", "App@12345", false, false);

var EntryID = "someValue";
var StoreID = "someValue2";

var folderID = oNS.GetFolderFromID(EntryID, StoreID);

我也想知道为什么要用Redemption.RDOSession?是否用于从 Outlook 获取所有电子邮件类型?

您可以循环访问文件夹集合并找到请求的文件夹,这是一种方法。请阅读代码内的评论:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Outlook = Microsoft.Office.Interop.Outlook;
namespace outlook
{
    class Program
    {
        static void Main(string[] args)
        {
            Outlook.Application oApp = new Outlook.Application();
            Outlook.NameSpace oNS = oApp.GetNamespace("mapi");
            oNS.Logon("appsystemacc", "App@12345", false, false);

            // THE FOLDER YOU WISH TO FIND
            Outlook.MAPIFolder MySomeValueFolder = null;
            // USE THIS TO INDICATE IF FOUND
            bool IsFound = false;

            Microsoft.Office.Interop.Outlook._Folders oFolders;
            Microsoft.Office.Interop.Outlook.MAPIFolder oPublicFolder =
                oNS.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderInbox).Parent;
            // Folders at Inbox level
            oFolders = oPublicFolder.Folders;
            foreach (Microsoft.Office.Interop.Outlook.MAPIFolder Folder in oFolders)
            {
                // OPTIONAL:
                // if(Folder.Name == "somevalue") { ... }
                if (Folder.EntryID == "someValue")
                {
                    Console.Write(Folder.Name + " " + Folder.StoreID);
                    MySomeValueFolder = Folder;
                    IsFound = true;
                }     
            }

            if (IsFound)
            {
                // now do with MySomeValueFolder whatever you want
            }

            Console.ReadLine();
        }
    }
}