可以在阅读和撰写模式下获取邮件或约会的正文。 若要检索邮件项目的正文,请调用 Office.context.mailbox.item.body.getAsync。 调用 getAsync
方法时,必须在 参数中 coercionType
指定返回正文的格式。 例如,可以获取 HTML 或纯文本格式的正文。
以下示例获取 HTML 格式的项的正文。
// Get the current body of the message or appointment.
Office.context.mailbox.item.body.getAsync(Office.CoercionType.Html, (bodyResult) => {
if (bodyResult.status === Office.AsyncResultStatus.Failed) {
console.log(`Failed to get body: ${bodyResult.error.message}`);
return;
}
const body = bodyResult.value;
// Perform additional operations here.
});
在 Outlook 网页版 或新的 Windows 版 Outlook 中获取邮件答复正文
在Outlook 网页版和新的 Outlook on Windows 中,用户可以在“设置邮件布局>邮件”>>组织中将其邮件组织为对话或单个邮件。 此设置会影响向用户显示消息正文的量,尤其是在具有多个消息的会话线程中。 根据设置,将显示整个会话线程的内容或仅显示当前消息的内容。 有关 邮件组织 设置的详细信息,请参阅 更改邮件列表在 Outlook 中的显示方式。
在消息回复上调用 Office.context.mailbox.item.body.getAsync
时,将返回会话线程的整个正文。 如果希望返回的正文反映用户的“消息组织”设置,可以在调用中getAsync
指定 bodyMode 选项。 下表列出了根据 bodyMode
配置返回的正文部分。
bodyMode 配置 |
对正文的影响 |
bodyMode 未在调用中 getAsync 指定 |
将返回会话线程的整个正文。 |
bodyMode 设置为 Office.MailboxEnums.BodyMode.FullBody |
将返回会话线程的整个正文。 |
bodyMode 设置为 Office.MailboxEnums.BodyMode.HostConfig |
如果将“邮件组织”设置为“按对话>分组邮件”所选对话中的所有邮件或“在底部的”最新邮件“顶部/显示按对话>分组的电子邮件,则仅返回当前答复的正文。
如果 “邮件组织 ”设置为 “单个邮件:不对邮件>仅一封邮件 进行分组”或 “将电子邮件显示为单个邮件”,则会返回会话线程的整个正文。 |
注意
bodyMode
在 Outlook on Windows (经典) 、Mac 和移动设备上忽略此选项。
以下示例指定用于 bodyMode
遵循用户消息设置的选项。
Office.context.mailbox.item.body.getAsync(
Office.CoercionType.Html,
{ bodyMode: Office.MailboxEnums.BodyMode.HostConfig },
(bodyResult) => {
if (bodyResult.status === Office.AsyncResultStatus.Failed) {
console.log(`Failed to get body: ${bodyResult.error.message}`);
return;
}
const body = bodyResult.value;
// Perform additional operations here.
}
);
使用异步方法 (Body.getAsync、 Body.getTypeAsync、 Body.prependAsync、 Body.setAsync 和 Body.setSelectedDataAsync) 获取正文类型,然后将数据插入到正在撰写的约会或邮件的正文中。 这些异步方法仅适用于撰写加载项。若要使用这些方法,请确保已正确设置外接程序清单,以便 Outlook 在撰写窗体中激活加载项,如 为撰写窗体创建 Outlook 外接程序中所述。
在 Outlook 中,用户可以创建文本、HTML 或 RTF 格式的邮件,还可以创建 HTML 格式的约会。 在插入数据之前,必须先通过调用 getTypeAsync
来验证支持的项格式,因为可能需要执行其他步骤。 返回的值 getTypeAsync
取决于原始项目格式,以及设备作系统和应用程序的支持,以 HTML 格式进行编辑。 验证项格式后,设置 coercionType
或 setSelectedDataAsync
参数prependAsync
以相应地插入数据,如下表所示。 如果未指定参数, prependAsync
则 setSelectedDataAsync
假定要插入的数据采用文本格式。
要插入的数据 |
getTypeAsync 返回的项目格式 |
coercionType 要使用的 |
Text |
文本1 |
文本 |
HTML |
文本1 |
文本2 |
文本 |
HTML |
文本/HTML |
HTML |
HTML |
HTML |
注意
1 在平板电脑和智能手机上, getTypeAsync
如果作系统或应用程序不支持编辑最初以 HTML 格式创建的 HTML 格式的项目,则返回“文本”。
2 如果要插入的数据是 HTML,并且 getTypeAsync
返回当前邮件项的文本类型,则必须将数据重新组织为文本并将 设置为 coercionType
Office.CoercionType.Text
。 如果只是将 HTML 数据插入到文本格式的项目中,应用程序会将 HTML 标记显示为文本。 如果尝试插入 HTML 数据并将其设置为 coercionType
Office.CoercionType.Html
,则会收到错误。
除了 coercionType
参数,与 Office JavaScript API 中的大多数异步方法一样, getTypeAsync
、 prependAsync
和 setSelectedDataAsync
采用其他可选输入参数。 有关如何指定这些可选输入参数的详细信息,请参阅 Office 外接程序中的异步编程中的“将可选参数传递给异步方法”。
在当前光标位置插入数据
本部分演示了一个代码示例,该示例使用 getTypeAsync
验证正在撰写的项的正文类型,然后使用 setSelectedDataAsync
在当前光标位置插入数据。
必须将数据字符串作为输入参数传递给 setSelectedDataAsync
。 根据项目正文的类型,您可以相应地将此数据字符串指定为文本或 HTML 格式。 如前所述,可以选择性地指定要在 参数中 coercionType
插入的数据的类型。 若要获取 的状态和结果 setSelectedDataAsync
,请将回调函数和可选输入参数传递给 方法,然后从回调的 asyncResult 输出参数中提取所需的信息。 如果方法成功,可以从 属性获取项正文 asyncResult.value
的类型,即“text”或“html”。
如果用户尚未将光标置于项目正文中, setSelectedDataAsync
则在正文顶部插入数据。 如果用户在项目正文中选择了文本, setSelectedDataAsync
请将所选文本替换为指定的数据。 请注意, setSelectedDataAsync
如果用户在撰写项目时同时更改光标位置,则可能会失败。 一次最多可以插入 1,000,000 个字符。
let item;
// Confirms that the Office.js library is loaded.
Office.onReady((info) => {
if (info.host === Office.HostType.Outlook) {
item = Office.context.mailbox.item;
setItemBody();
}
});
// Inserts data at the current cursor position.
function setItemBody() {
// Identify the body type of the mail item.
item.body.getTypeAsync((asyncResult) => {
if (asyncResult.status === Office.AsyncResultStatus.Failed) {
console.log(asyncResult.error.message);
return;
}
// Insert data of the appropriate type into the body.
if (asyncResult.value === Office.CoercionType.Html) {
// Insert HTML into the body.
item.body.setSelectedDataAsync(
"<b> Kindly note we now open 7 days a week.</b>",
{ coercionType: Office.CoercionType.Html, asyncContext: { optionalVariable1: 1, optionalVariable2: 2 } },
(asyncResult) => {
if (asyncResult.status === Office.AsyncResultStatus.Failed) {
console.log(asyncResult.error.message);
return;
}
/*
Run additional operations appropriate to your scenario and
use the optionalVariable1 and optionalVariable2 values as needed.
*/
});
}
else {
// Insert plain text into the body.
item.body.setSelectedDataAsync(
"Kindly note we now open 7 days a week.",
{ coercionType: Office.CoercionType.Text, asyncContext: { optionalVariable1: 1, optionalVariable2: 2 } },
(asyncResult) => {
if (asyncResult.status === Office.AsyncResultStatus.Failed) {
console.log(asyncResult.error.message);
return;
}
/*
Run additional operations appropriate to your scenario and
use the optionalVariable1 and optionalVariable2 values as needed.
*/
});
}
});
}
在项正文的开头插入数据
或者,可以使用 prependAsync
在项正文的开头插入数据,并忽略当前光标位置。 除了插入点, prependAsync
和 setSelectedDataAsync
的行为方式类似。 必须首先检查邮件正文的类型,以避免在文本格式的邮件前面附加 HTML 数据。 然后,将要以文本或 HTML 格式开头的数据字符串传递给 prependAsync
。 一次最多可以预置 1,000,000 个字符。
以下 JavaScript 代码首先调用 getTypeAsync
以验证项正文的类型。 然后,根据类型,它会将数据作为 HTML 或文本插入到正文顶部。
let item;
// Confirms that the Office.js library is loaded.
Office.onReady((info) => {
if (info.host === Office.HostType.Outlook) {
item = Office.context.mailbox.item;
prependItemBody();
}
});
// Prepends data to the body of the item being composed.
function prependItemBody() {
// Identify the body type of the mail item.
item.body.getTypeAsync((asyncResult) => {
if (asyncResult.status === Office.AsyncResultStatus.Failed) {
console.log(asyncResult.error.message);
return;
}
// Prepend data of the appropriate type to the body.
if (asyncResult.value === Office.CoercionType.Html) {
// Prepend HTML to the body.
item.body.prependAsync(
'<b>Greetings!</b>',
{ coercionType: Office.CoercionType.Html, asyncContext: { optionalVariable1: 1, optionalVariable2: 2 } },
(asyncResult) => {
if (asyncResult.status === Office.AsyncResultStatus.Failed) {
console.log(asyncResult.error.message);
return;
}
/*
Run additional operations appropriate to your scenario and
use the optionalVariable1 and optionalVariable2 values as needed.
*/
});
}
else {
// Prepend plain text to the body.
item.body.prependAsync(
'Greetings!',
{ coercionType: Office.CoercionType.Text, asyncContext: { optionalVariable1: 1, optionalVariable2: 2 } },
(asyncResult) => {
if (asyncResult.status === Office.AsyncResultStatus.Failed) {
console.log(asyncResult.error.message);
return;
}
/*
Run additional operations appropriate to your scenario and
use the optionalVariable1 and optionalVariable2 values as needed.
*/
});
}
});
}
在 Outlook 网页版 或新的 Windows 版 Outlook 中设置邮件答复的正文
在Outlook 网页版和新的 Outlook on Windows 中,用户可以在“设置邮件布局>邮件”>>组织中将其邮件组织为对话或单个邮件。 此设置会影响向用户显示消息正文的量,尤其是在具有多个消息的会话线程中。 根据设置,将显示整个会话线程的内容或仅显示当前消息的内容。 有关 邮件组织 设置的详细信息,请参阅 更改邮件列表在 Outlook 中的显示方式。
在消息回复上调用 Office.context.mailbox.item.body.setAsync
时,会话线程的整个正文将替换为指定的文本。 如果要遵循用户的“消息组织”设置并仅替换当前回复的正文,则可以在呼叫中setAsync
指定 bodyMode 选项。 下表列出了 bodyMode
配置以及每个配置对所设置的消息正文的影响。
bodyMode 配置 |
对正文的影响 |
bodyMode 未在调用中 setAsync 指定 |
将替换会话线程的整个正文。 即使用户的消息按对话进行组织,这一点也适用。 在此方案中,用户的设置暂时更改为“单个邮件:不要将邮件>分组,仅一封邮件”或“在通话期间setAsync 将电子邮件显示为单个邮件”。 向用户显示通知,提醒他们注意此更改。 调用完成后,将恢复用户的设置。 |
bodyMode 设置为 Office.MailboxEnums.BodyMode.FullBody |
将替换会话线程的整个正文。 即使用户的消息按对话进行组织,这一点也适用。 在此方案中,用户的设置暂时更改为“单个邮件:不要将邮件>分组,仅一封邮件”或“在通话期间setAsync 将电子邮件显示为单个邮件”。 向用户显示通知,提醒他们注意此更改。 调用完成后,将恢复用户的设置。 |
bodyMode 设置为 Office.MailboxEnums.BodyMode.HostConfig |
如果将“邮件组织”设置为“按对话>分组邮件”所选对话中的所有邮件或“在底部的”最新邮件“顶部/显示按对话>分组的电子邮件,则仅替换当前答复的正文。
如果将 “邮件组织” 设置为 “单个邮件:不对邮件>仅一封邮件 进行分组”或 “将电子邮件显示为单个邮件”,则会替换会话线程的整个正文。 |
注意
bodyMode
在 Outlook on Windows (经典) 、Mac 和移动设备上忽略此选项。
以下示例指定用于 bodyMode
遵循用户消息设置的选项。
Office.context.mailbox.item.body.setAsync(
"This text replaces the body of the message.",
{
coercionType: Office.CoercionType.Html,
bodyMode: Office.MailboxEnums.BodyMode.HostConfig
},
(bodyResult) => {
if (bodyResult.status === Office.AsyncResultStatus.Failed) {
console.log(`Failed to set body: ${bodyResult.error.message}`);
return;
}
console.log("Successfully replaced the body of the message.");
}
);