When replying or forwarding an email body.getAsync() returns an incorrect value
Closed this issue · 7 comments
Provide required information needed to triage your issue
Similar symptoms as:
#3988
#4360
- For reply/forward emails, the
item.body.getAsync
returns mismatched and duplicated contents afteritem.body.setAsync
Your Environment
- Platform [PC desktop, Mac, iOS, Office on the web]: Office on the web, the New Outlook for Windows
- Host [Excel, Word, PowerPoint, etc.]: Outlook
- Office version number:
- Operating System: MacOS 14.4.1
- Browser (if using Office on the web): Chrome
Expected behavior
Appropriately get the value of the mail body for reply/forward emails.
Current behavior
The mail body is incorrect and contains duplicating contents after item.body.setAsync
.
Steps to reproduce
- Open a received email and press the reply button. We see this issue on the Microsoft Viva emails.
- Execute
item.body.getAsync
, and sets the same content back withitem.body.setAsync
- Execute body.getAsync.
Link to live example(s)
These are taken from #3988
Javascript
$("#run").on("click", run);
const timeout = 1000;
function run() {
// Gets current email body
Office.context.mailbox.item.body.getAsync(Office.CoercionType.Html, (result) => {
document.getElementById("firstBody").innerHTML = escapeHtml(result.value);
setTimeout(() => {
// Sets the same email body
Office.context.mailbox.item.body.setAsync(result.value, { coercionType: Office.CoercionType.Html }, (result) => {
Office.context.mailbox.item.body.getAsync(Office.CoercionType.Html, (result) => {
// Gets email body again after setAsync
document.getElementById("secondBody").innerHTML = escapeHtml(result.value);
});
});
}, timeout);
});
}
function escapeHtml(html) {
return html
.replace(/&/g, "&")
.replace(/</g, "<")
.replace(/>/g, ">")
.replace(/"/g, """)
.replace(/'/g, "'");
}
HTML
<div>
<button id="run" class="ms-Button">
<span class="ms-Button-label">Run</span>
</button>
<p>--FIRST--</p>
<p id="firstBody"></p>
<br><br>
<p>--SECOND--</p>
<p id="secondBody"></p>
</div>
Provide additional details
- On the first getAsync, the body contains
elementToProof
which doesn't exist on subsequent getAsync results.
@bchenhs we are not able to repro the issue on our side. Could you please share a repro video of the issue?
Hi @anjalitp I've updated the description and sample script to better demonstrate the issue. The missing step in the original description was calling body.setAsync
.
Thanks for updating the issue. We are able to repro the issue with body.setAsync call. It seems like body.setAsync call is not replacing the quoted text in the original body, hence the subsequent getAsync call shows the quoted text twice.
This looks like expected behaviour for body.setAsync API on OWA but we would like to understand more about your Add-in use case which is being blocked by this issue. Could you please share the same?
@anjalitp Can you please elaborate on how this looks like expected behaviour for body.setAsync
when the API specifies it "Replaces the entire body with the specified text."?
The example on the API documentation site states:
Office.context.mailbox.item.body.setAsync(
"<b>(replaces all body, including threads you are replying to that may be on the bottom)</b>",
{ coercionType: "html", asyncContext: "This is passed to the callback" },
function callback(result) {
// Process the result.
});
This is also a recent change in behaviour. Prior to a few day ago, it was working as expected and followed the API spec.
Hi @anjalitp @exextoc, just to add to this report, the symptoms here fully match the other issues linked (#3988 and #4360), where the add-in team was able to confirm there was a regression. Tagging in @ajays-msft in case he can add context as well.
In OWA, getBody or setBody reflects what can be possible in from the UI. For example, if the messages are grouped by conversation, reply/forward will show quoted text (... which requires user to expand to see the full message). When there is quoted text, get/set body will only get/set the editable content in the email.