当我在 mail.open 事件中编辑邮件的 html 正文时,Outlook 屏幕闪烁

问题描述 投票:0回答:1

我目前正在尝试在 mailitem.open 事件中编辑邮件项目的 html 正文。这对于相当短的邮件来说效果很好,但邮件本身越长,屏幕闪烁越多,直到 Outlook 加载 100%。我尝试做的是模仿 Outlook 默认签名行为,但使用我自己来自 Web 服务的签名。

我这样做的方法是首先为 itemload 事件分配一个事件:

Application.ItemLoad += new ApplicationEvents_11_ItemLoadEventHandler(Application_ItemLoad);

在 itemload 方法中,我分配了 open 事件处理程序:

private void Application_ItemLoad(object item)
{
    log.Debug("Application_ItemLoad");
    if (item is MailItem)
    {
        var mailItem = (MailItem)item;
        mailItem.Open += new ItemEvents_10_OpenEventHandler(MailItem_Open);
    }
}

最后在 mailitem.open 事件中我将我的签名加载到邮件中

public void MailItem_Open(ref bool Cancel)
{
    *some logic here to get the right mail*
    {
        LoadDefaultSignature(*the right mailitem*);
    }
}

LoadDefaultSignature 然后调用 Web 服务并将签名放置在邮件中的正确位置:

public void LoadDefaultSignature(MailItem mailItem)
{
    try
    {
        log.Debug("LoadDefaultSignature");
        var proxy = new WebServiceOutlookClient();
        System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
        var defaultSignature = proxy.GetDefaultSignatureByMail(Application.Session.CurrentUser.AddressEntry.GetExchangeUser().PrimarySmtpAddress);

        if (defaultSignature != null)
        {
            var htmlDoc = GetHtmlDoc(mailItem);

            *logic to place out text in original mail*

            mailItem.HTMLBody = htmlDoc.DocumentNode.OuterHtml;
            log.Debug("DefaultSignature set");
        }
    }
    catch (System.Exception exc)
    {
        log.Error("Couldn't load default signature", exc);
    }
}

我不太明白为什么 Outlook 会显示此行为,因为每当我稍后从自定义任务窗格中更改 htmlbody 时,它都不会执行此操作。也许正在进行一些验证? 我也愿意采用其他方法来解决这个问题。我的想法是尝试使用 wordeditor 将我的 html 转换为 openxml 并使用它,但到目前为止还没有成功。

c# outlook vsto
1个回答
0
投票

这并不奇怪 - 您正在重置整个文档,因此 Outlook/Word 需要重新解析整个邮件正文:它们不够复杂,无法弄清楚仅更改了其中的一部分。

这确实是一种大锤方法 - 如果您只更改身体的某些部分,请改用 Word 对象模型:使用

Inspector.WordEditor
Explorer.ActiveInlineResponseWordEditor
(返回
Document
对象),具体取决于打开项目进行编辑的位置。一旦您知道需要在哪里插入签名,请使用
Range.InsertFile
插入 HTML 数据。

© www.soinside.com 2019 - 2024. All rights reserved.