Outlook 2007:导入加密电子邮件时不会更新阅读窗格

时间:2016-07-25 08:00:04

标签: c# .net outlook vsto outlook-redemption

我们使用Redemptiontools为Outlook开发Addin。首先,我们从Metadataset创建Emailstubs。当用户选择邮件时,我们从网络加载一个msg文件并将其导入到Emailstub中。我们在Outlook 2010/2013/2016中没有任何问题。

但是在Outlook 2007中,如果邮件具有签名,则阅读窗格不会刷新。我取消选择并重新选择邮件,然后我可以看到新邮件。

从元数据集创建Emailstub:

    using (ComObjectWrapper<RDOFolder> rdoFolder = RDOSession.Resource.GetFolderFromID(folderEntryID).WithComCleanup())
    {
            using (ComObjectWrapper<RDOMail> mailstub = rdoFolder.Resource.Items.Add().WithComCleanup())
            {
                    mailstub.Resource.Sent = true;
                    mailstub.Resource.SenderName = metadatamail.SenderName + " ";
                    mailstub.Resource.SenderEmailAddress = metadatamail.SenderEmailAddress + " ";
                    mailstub.Resource.SentOnBehalfOfName = metadatamail.SentOnBehalfOfName + " ";
                    mailstub.Resource.SentOnBehalfOfEmailAddress = metadatamail.SentOnBehalfOfEmailAddress + " ";
                    mailstub.Resource.Subject = metadatamail.Subject + " ";
                    mailstub.Resource.ReceivedTime = metadatamail.ReceivedTime;
                    mailstub.Resource.Body = metadatamail.Body + " ";
                    mailstub.Resource.To = metadatamail.To + " ";
                    mailstub.Resource.ReceivedByName = metadatamail.ReceivedByName + " ";
                    mailstub.Resource.UnRead = metadatamail.UnRead;
                    if (metadatamail.ContainsAttachments)
                    {
                        var Attach = mailstub.Resource.Attachments.Add(new char[0]);
                        Attach.FileName = "Attachment.txt";
                    }
                    mailstub.Resource.Save();
            }
    }

在资源管理器(expl)的选择更改事件中导入msg文件:

    void expl_SelectionChange()
    {
        using (var selection = expl.Selection.WithComCleanup())
        {
            foreach (var item in selection.Resource)
            {
                if (item is Outlook.MailItem)
                {
                    string entryID = (item as Outlook.MailItem).EntryID;
                    GC.Collect();
                    GC.WaitForPendingFinalizers();
                    GC.Collect();
                    GC.WaitForPendingFinalizers();
                    if (!string.IsNullOrEmpty(entryID))
                    {
                        using (var researchEntry = RDOSession.Resource.GetMessageFromID(entryID).WithComCleanup())
                        {
                            string mailpath = GetEmailFromNetwork(entryID);
                            if (!string.IsNullOrEmpty(mailpath))
                            {
                                Redemption.SafeMailItem sItem = new Redemption.SafeMailItem();
                                sItem.Item = researchEntry.Resource;
                                sItem.Import(mailpath, (int)rdoSaveAsType.olMSG);
                                sItem.ReleaseComObject<Redemption.SafeMailItem>();
                                researchEntry.Resource.Save();
                            }
                        }
                    }
                }
            }
        }
    }

RDOSession:

    private ComObjectWrapper<RDOSession> RDOSession
    {
        get
        {
            try
            {
                var rdoSession = Activator.CreateInstance(Type.GetTypeFromProgID("Redemption.RDOSession")) as RDOSession;
                if (rdoSession != null)
                {
                    rdoSession.MAPIOBJECT = this.Application.Session.MAPIOBJECT;
                    return rdoSession.WithComCleanup();
                }
            }
            catch { }
            return null;
        }
    }

有人有提示或解决方案吗?

0 个答案:

没有答案