In working with a customer on a new Mail App for OWA, they had a requirement to determine if the mail item being composed is a Reply or Forward or new mail message. Determining is New or Reply/Forward is easy. But getting the Reply/Forward determination is unfortunately… too easy. Meaning the ONLY way I have been able to determine this is to look at the subject and see if there is a RE: or FW: in there. It’s a little ugly, but this is how it is. And worse – it is language dependent. If you need to support multiple languages you will have to determine the language and then make this function – much larger. So here is the English only version:
[code lang=”javascript” collapse=”true” title=”click to expand if the github.com embedding below is not visible.”]
/// getMailType()
/// This function determines the type of email item currently being composed
/// – If it is a new item, it returns "New"
/// – If it is a reply, it return "Reply"
/// – If it is a Forward it returns "Forward"
/// – And if it cannot determine, it returns "UnknownReplyOrForward"
/// This accepts a function that is called with the resulting value.
function getMailType(returnFunction) {
// get the conversation ID – if it exists
var id = Office.cast.item.toItemCompose(Office.context.mailbox.item).conversationId;
if (id == null) {
// We have a new item
returnFunction("New");
return;
}
else {
// at this point we know we have a reply or forward. Now we determine which on it is.
// we do this by getting the SUBJECT and then – yes – we look and see if it is a
// RE: or FW: or unknown.
Office.cast.item.toItemCompose(Office.context.mailbox.item)
.subject.getAsync(function (result) {
var subject = result.value;
// now this sucks, but the only way to do this is look at the
// beginning of the subject and see it if it RE or FWD and
// even worse, this is language specific…
// and worse yet – if the user changed it, we have no idea
if(subject.toString().toUpperCase.startsWith("RE:")){
returnFunction("Reply");
}
else if(subject.toString().toUpperCase.startsWith("FW:")){
returnFunction("Forward");
}
else {
returnFunction("UnknownReplyOrForward");
}
});
}
}
[/code]
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/// getMailType() | |
/// This function determines the type of email item currently being composed | |
/// – If it is a new item, it returns "New" | |
/// – If it is a reply, it return "Reply" | |
/// – If it is a Forward it returns "Forward" | |
/// – And if it cannot determine, it returns "UnknownReplyOrForward" | |
/// This accepts a function that is called with the resulting value. | |
function getMailType(returnFunction) { | |
// get the conversation ID – if it exists | |
var id = Office.cast.item.toItemCompose(Office.context.mailbox.item).conversationId; | |
if (id == null) { | |
// We have a new item | |
returnFunction("New"); | |
return; | |
} | |
else { | |
// at this point we know we have a reply or forward. Now we determine which on it is. | |
// we do this by getting the SUBJECT and then – yes – we look and see if it is a | |
// RE: or FW: or unknown. | |
Office.cast.item.toItemCompose(Office.context.mailbox.item) | |
.subject.getAsync(function (result) { | |
var subject = result.value; | |
// now this sucks, but the only way to do this is look at the | |
// beginning of the subject and see it if it RE or FWD and | |
// even worse, this is language specific… | |
// and worse yet – if the user changed it, we have no idea | |
if(subject.toString().toUpperCase.startsWith("RE:")){ | |
returnFunction("Reply"); | |
} | |
else if(subject.toString().toUpperCase.startsWith("FW:")){ | |
returnFunction("Forward"); | |
} | |
else { | |
returnFunction("UnknownReplyOrForward"); | |
} | |
}); | |
} | |
} |
And to test this, I just created a button on my Compose App task pane, that runs the following code:
[code language=”javascript”]
$(‘#getMailType’).click(function () {
getMailType(function (result) {
app.showNotification("This is a: " + result);
});
});
[/code]