Email.Body编辑WordEditor

时间:2016-05-24 21:08:02

标签: c# outlook-addin

我有一个阅读窗格的表单区域。我检索转发邮件项目的wordeditor,然后将信息添加到word文档。当我不在同一个功能中创建和发送电子邮件时,这似乎有效,但当我想创建转发电子邮件,编辑它并发送它时,Email.Body不会更新。

_email = this.OutlookItem as Outlook.MailItem;
private void SendForwardEmail()
{
    Outlook.MailIem fEmail = null;
    Word.Document doc = null;
    try
    {
        fEmail = ((Outlook._MailItem)_email).Forward();
        doc = GetWordEditor(fEmail);
        EditDoc(doc);
        var tmp = doc.Range().Text;
        var tmp1 = fEmail.Body;     // tmp1 won't have what I added to tmp
        ((Outlook._MailItem)fEmail).Send(); // This will send with the fEmail.Body value
                                            // and won't show edits to the word doc
    }
    finally
    {
        Release(doc);
        Release(fEmail);
    }
}

我在表单区域中使用类似的代码来编写电子邮件,不同之处在于,当触发Send事件时,Email.Body已更新为对单词doc的编辑。我试过了fEmail.Save(),但似乎没有用。单词编辑器确实保存了工作,因为我可以在不同的点访问单词编辑器,它仍然会有编辑。 Email.Body只是不随更改而更新。

编辑:我将补充说,执行以下操作会更新Email.Body,但似乎是一个时髦的解决方案。

fEmail.Display();
((Outlook.MailItem)fEmail).Close(Outlook.OlInspectorClose.olSave);

1 个答案:

答案 0 :(得分:0)

您在何时何地运行代码?它是在次要线程上吗?

无论如何,我建议立即从释放所有底层COM对象开始。完成使用后,使用System.Runtime.InteropServices.Marshal.ReleaseComObject释放Outlook / Word对象。然后在Visual Basic中将变量设置为Nothing(C#中为null)以释放对该对象的引用。请在Systematically Releasing Objects文章中详细了解相关内容。