从邮件正文中检索 URL 的最佳方式
best way to retrieve URLs from a mail body
以下行使 Mac 客户端上的加载项无响应。如果我们删除此行并直接执行函数 someFunction
,则加载项在 mac 客户端上绝对可以正常工作。
Office.context.mailbox.item.body.getAsync("html", someFunction);
我们使用 body.getAsync()
因为我们需要通过处理 html 和那些包含特定 ID 的 url 来提取邮件正文中的所有 URL。
尝试使用以下但未提供预期的 URL。
var links = Office.context.mailbox.item.getEntities().urls;
我也在尝试以下
Office.initialize = function (reason) {
$(document).ready(function () {
app.initialize();
Office.context.mailbox.item.body.getAsync("html", processHtmlBody);
});
};
function processHtmlBody(asyncResult) {
var htmlParser = new DOMParser().parseFromString(asyncResult.value, "text/html");
var links = htmlParser.getElementsByTagName("a");
}
是否有更好的替代方法来从邮件正文中获取 URL。
请注意,getAsync 是 1.3 邮箱要求集的一部分,Mac 的 Outlook 当前不支持:
https://dev.outlook.com/reference/add-ins/tutorial-api-requirement-sets.html
否则使用实体是您唯一的选择,但 getElementsByTagName 可能效果最好(如果您可以访问电子邮件正文)。
我们尝试使用 makeEwsRequestAsync()
和 getEntities().urls
alternatives/workarounds 从 Mac 客户端上的邮件正文中检索 URL。但是都没有成功:
makeEwsRequestAsync()
:“没有数据错误”。
getEntities().urls
: 没有给出预期 result/URLs
因此,对于 Mac 客户端,我们最终更改了逻辑并添加了条件逻辑,其中不包含任何用于检索 URL 的代码。
if (Office.context.requirements.isSetSupported("mailbox", 1.3))
{
//conditional code
}
我遇到了同样的问题,我用类似的方法解决了它:
return new Promise((resolve, reject) => {
mailbox.item.body.getAsync(window.Office.CoercionType.Html, asyncResult => {
if (asyncResult.status == window.Office.AsyncResultStatus.Succeeded) {
var $dom = $(asyncResult.value);
var url = $dom.find('#x_hiddenURL').text();
resolve(url);
} else {
reject(new Error('Failed to load email body'));
}
});
});
以下行使 Mac 客户端上的加载项无响应。如果我们删除此行并直接执行函数 someFunction
,则加载项在 mac 客户端上绝对可以正常工作。
Office.context.mailbox.item.body.getAsync("html", someFunction);
我们使用 body.getAsync()
因为我们需要通过处理 html 和那些包含特定 ID 的 url 来提取邮件正文中的所有 URL。
尝试使用以下但未提供预期的 URL。
var links = Office.context.mailbox.item.getEntities().urls;
我也在尝试以下
Office.initialize = function (reason) {
$(document).ready(function () {
app.initialize();
Office.context.mailbox.item.body.getAsync("html", processHtmlBody);
});
};
function processHtmlBody(asyncResult) {
var htmlParser = new DOMParser().parseFromString(asyncResult.value, "text/html");
var links = htmlParser.getElementsByTagName("a");
}
是否有更好的替代方法来从邮件正文中获取 URL。
请注意,getAsync 是 1.3 邮箱要求集的一部分,Mac 的 Outlook 当前不支持:
https://dev.outlook.com/reference/add-ins/tutorial-api-requirement-sets.html
否则使用实体是您唯一的选择,但 getElementsByTagName 可能效果最好(如果您可以访问电子邮件正文)。
我们尝试使用 makeEwsRequestAsync()
和 getEntities().urls
alternatives/workarounds 从 Mac 客户端上的邮件正文中检索 URL。但是都没有成功:
makeEwsRequestAsync()
:“没有数据错误”。getEntities().urls
: 没有给出预期 result/URLs
因此,对于 Mac 客户端,我们最终更改了逻辑并添加了条件逻辑,其中不包含任何用于检索 URL 的代码。
if (Office.context.requirements.isSetSupported("mailbox", 1.3))
{
//conditional code}
我遇到了同样的问题,我用类似的方法解决了它:
return new Promise((resolve, reject) => {
mailbox.item.body.getAsync(window.Office.CoercionType.Html, asyncResult => {
if (asyncResult.status == window.Office.AsyncResultStatus.Succeeded) {
var $dom = $(asyncResult.value);
var url = $dom.find('#x_hiddenURL').text();
resolve(url);
} else {
reject(new Error('Failed to load email body'));
}
});
});