从 Outlook Web 插件获取电子邮件正文时如何保留换行符

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

我目前正在开发一个 Outlook 插件来获取电子邮件正文并将其发布到外部 API。我遇到的问题是,每次使用 body.getAsync() 时,所有换行符都会被删除,这会导致 API 尝试执行的处理出现问题。 我读过许多与此类似的问题,但除了使用 Office.CoercionType.Html 类型调用 getAsync 之外,似乎没有一个真正有解决方案,我不认为这实际上是解决此问题的方法。 任何建议将不胜感激。 这是我的代码:

    var body = '';
    item.body.getAsync('text', function (result) {
        body = result.value.trim();
        $.ajax({
            //some ajax call
        });
    })

电子邮件正文在 html 中肯定有换行符,因为当我将内容复制并粘贴到纯 txt 文件中时,它会正确显示。 请注意,这篇文章(how to Transfer body.getAsync plain text with )包含一个类似的问题,但答案正是我想要避免的,而且我不相信实际上回答了这个问题。 OP在评论中提到他们已经找到了一种让它工作的方法,但没有澄清这是什么,因此我想再次提出这个问题。

javascript outlook outlook-addin line-breaks outlook-web-addins
1个回答
0
投票

当使用带有 'text' 参数的

body.getAsync()
方法检索电子邮件正文时,它会返回电子邮件正文的纯文本内容,没有任何格式或换行符。

要保留电子邮件正文中的换行符,您可以使用“html”参数而不是“text”。这将返回电子邮件正文的 HTML 内容,然后您可以解析并提取文本内容,同时保留换行符。

以下示例说明了如何修改代码以检索 HTML 内容并提取纯文本内容,同时保留换行符:

var body = '';
item.body.getAsync('html', function (result) {
    body = result.value.trim();
    // extract plain text content while preserving line breaks
    var div = document.createElement('div');
    div.innerHTML = body;
    body = div.innerText.replace(/\n\n/g, '\n');
    $.ajax({
        //some ajax call
    });
})

在此示例中,我们创建一个临时

div
元素并将
innerHTML
属性设置为电子邮件正文的 HTML 内容。然后,我们检索
innerText
元素的
div
属性,其中包含带有保留换行符的纯文本内容。最后,我们使用
replace()
方法和正则表达式将所有连续换行符替换为单个换行符。

请注意,如果电子邮件正文的 HTML 内容具有混合或复杂的格式,无法在保留换行符的同时轻松解析或转换为纯文本,则此方法可能不起作用。在这种情况下,您可能需要使用第三方库或实现更高级的解析算法来提取所需的内容。

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