【问题标题】:Multiple MailBoxes - Access "drafts" folder of "outlook" email account without using the folder name as a string多个邮箱 - 访问“outlook”电子邮件帐户的“草稿”文件夹,而不使用文件夹名称作为字符串
【发布时间】:2015-12-20 10:36:22
【问题描述】:

我使用 Visual Studio 2013 和 Add-in express v.7.7.4087 开发了一个 Outlook 插件。 我必须处理多个电子邮件帐户(商店)。请看下面的截图和代码

private void timerSendFromDraftsFolder_Tick(object sender, EventArgs e)
        {
            Outlook.Stores stores = null; // CC and OL accounts, 
            Outlook.Store store = null;
            Outlook.MAPIFolder rootFolder = null;
            Outlook.Folders rootFolderFolders = null;
            Outlook.MAPIFolder draftsFolder = null;
            Outlook.Items items = null;
            Outlook.MailItem mailItem = null;

            bool itemSent = true;
            bool allMailItemsSent = true;

            try
            {
                if (Helper.IsOnline())
                {
                    Debug.DebugMessage(3, "AddinModule : timerSendFromSaleswingsFolder_Tick : Fired");

                    string version = OutlookApp.Version;
                    if (String.Compare(version, "13") > 0)
                    {
                        stores = Globals.ObjNS.Stores;
                        for (int i = 1; i <= stores.Count; i++)
                        {
                            try
                            {
                                store = stores[i];
                                string storeName = store.DisplayName;
                                if (store.ExchangeStoreType != Outlook.OlExchangeStoreType.olExchangePublicFolder)
                                {                                    
                                    rootFolder = store.GetRootFolder();
                                    rootFolderFolders = rootFolder.Folders;
                                    if (rootFolderFolders != null)
                                    {
                                        try
                                        {
                                            draftsFolder = rootFolderFolders["drafts"]; // not working for "xxxxxxx@outlook.com" type email accounts
                                        }
                                        catch (Exception )
                                        {
                                            Debug.DebugMessage(3, "AddinModule : timerSendFromSaleswingsFolder_Tick : Excep");
                                            draftsFolder = rootFolderFolders["Drafts (This computer only)"];
                                        }
                                    }

我需要访问每个邮件帐户的草稿文件夹,但“xxxxxxx@outlook.com”的电子邮件帐户显示草稿文件夹为“草稿(仅限此计算机)” 而不是 “草稿”

我工作得很好。但我不喜欢将此引入生产版本。因为我认为这不适用于非英语环境。

  1. 你能建议我解决这个问题吗

  2. 作为救赎 (http://www.dimastr.com/redemption/home.htm),有解决方案吗?

附言

我在一些项目中使用过这段代码

oFolder = oNS.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderDrafts);

但它提供了主邮件帐户的草稿文件夹。在我的代码中,这里没有“store”对象的这种方法。

【问题讨论】:

    标签: c# email outlook outlook-addin outlook-redemption


    【解决方案1】:

    请改用 Store 类的 GetDefaultFolder 方法。它允许获取一个 Folder 对象,该对象代表存储中的默认文件夹,并且是 FolderType 参数指定的类型。

    此方法类似于NameSpace 对象的GetDefaultFolder 方法。不同之处在于此方法获取与帐户关联的交付存储上的默认文件夹,而NameSpace.GetDefaultFolder 返回当前配置文件的默认存储上的默认文件夹。

    Redemption 库提供了RDOStore 类的GetDefaultFolder 方法。

    【讨论】:

    • 它没有为我的 store 对象提供 GetDefaultFolder() 方法。那么我可以使用 .NET Reflection 引用较新的程序集并调用 GetDefaultFolder() 方法吗?谢谢
    • 我试过这段代码。它对我不起作用。如果有意义,请告诉我dl.dropboxusercontent.com/u/9507668/reflection.PNG
    【解决方案2】:

    GetSharedDefaultFolder 是要走的路 - 调用 Namespace.CreateRecipient / Recipient.Resolve / Namespace.GetSharedDefaultFolder。

    【讨论】:

    • 我试过这段代码。它对我不起作用。请告诉我是否有意义 dl.dropboxusercontent.com/u/9507668/reflection.PNG
    • 究竟是什么不起作用?有没有返回错误?这是什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多