【问题标题】:Email.Body not updating after editing WordEditor编辑 WordEditor 后 Email.Body 不更新
【发布时间】:2016-05-25 23:49:18
【问题描述】:

我有一个用于阅读窗格的表单区域。我检索转发邮件项目的 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 已经更新了对 word doc 的编辑。我试过fEmail.Save(),但似乎没有用。文字编辑器确实保存了工作,因为我可以在不同的位置访问文字编辑器,它仍然可以进行编辑。 Email.Body 只是不会随着更改而更新。

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

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

【问题讨论】:

    标签: c# outlook-addin


    【解决方案1】:

    您在何时何地运行代码?它在辅助线程上吗?

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

    【讨论】:

    • 在表单区域的按钮按下事件期间调用该函数。它没有在辅助线程上运行。
    猜你喜欢
    • 1970-01-01
    • 2012-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-02
    • 2013-10-30
    • 1970-01-01
    相关资源
    最近更新 更多