'How to create a category and apply it to an email
Is it possible create a category in outlook programmatically?
I set up a hello world outlook-addin by following MS's tutorials. And I see how I have access to all the different properties of a particular email. However, I'm stumped about how to work with categories.
Solution 1:[1]
I had to pass in the following SOAP request through Office.context.mailbox.makeEwsRequestAsync() to create a category called "Muktader" and apply it to an email identified by the item id.
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Header>
    <t:RequestServerVersion Version="Exchange2013_SP1" />
  </soap:Header>
  <soap:Body>
    <m:UpdateItem MessageDisposition="SaveOnly" ConflictResolution="AlwaysOverwrite">
      <m:ItemChanges>
        <t:ItemChange>
          <t:ItemId Id="AAMkAGVlOTZjNTM3LWVjNjgtNGZlNi04MTBkLWIyNjNjNWEyY2VlNABGAAAAAABpsgv3HB+wQJRg4K+r7AmBBwBJi9ckXu/REb74AIBfn0G8AAAUrOs1AACN8cPrPdSYR5RdhR69ULJ0AAACOkAqAAA=" ChangeKey="CQAAABYAAACN8cPrPdSYR5RdhR69ULJ0AAACR0YO" />
          <t:Updates>
            <t:SetItemField>
              <t:FieldURI FieldURI="item:Categories" />
              <t:Message>
                <t:Categories>
                  <t:String>Muktader</t:String>
                </t:Categories>
              </t:Message>
            </t:SetItemField>
          </t:Updates>
        </t:ItemChange>
      </m:ItemChanges>
    </m:UpdateItem>
  </soap:Body>
</soap:Envelope>
Solution 2:[2]
To create a category, you will either have to use EWS or REST APIs. The Office.js library does not provide a way to directly set a category via javascript today.
Solution 3:[3]
To create category in outlook using EWS SOAP method:
- Use Office.context.mailbox.makeEwsRequestAsync() method to call SOAP async request.
- Use SOAP request to set custom category to the email
- Use SOAP request response for result
- Also it is possible to create master category and then use that category for email with color required. Note: Also update .xml file with ReadWriteMailbox permissions. Also pass current email itemID and ChangeKey to SOAP request.
Use Office.context.mailbox.makeEwsRequestAsync() method to call SOAP async request.
Office.context.mailbox.makeEwsRequestAsync(updateItemRequest(itemID, changeKey), function (updateAsyncResult) {
        if (updateAsyncResult.status === "failed") {
            var error = updateAsyncResult.error;
            console.log("error " + error.name + ": " + error.code + " - " + error.message);
        }
        else {
            console.log("Result: " + updateAsyncResult.value);
        }
    });function updateItemRequest(id, changeKey) {
    var request =
        '<?xml version="1.0" encoding="utf-8"?>\
  <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\
        xmlns:xsd = "http://www.w3.org/2001/XMLSchema"\
        xmlns:soap = "http://schemas.xmlsoap.org/soap/envelope/"\
        xmlns:t = "http://schemas.microsoft.com/exchange/services/2006/types">\
                <soap:Header>\
                    <t:RequestServerVersion Version="Exchange2013" />\
                </soap:Header>\
                <soap:Body>\
                   <UpdateItem MessageDisposition="SaveOnly" ConflictResolution="AlwaysOverwrite" xmlns="http://schemas.microsoft.com/exchange/services/2006/messages">\
                      <ItemChanges>\
                        <t:ItemChange>\
                          <t:ItemId Id =\"' + id + '\"  ChangeKey=\"' + changeKey + '\"   />\
                          <t:Updates>\
                            <t:SetItemField>\
                              <t:FieldURI FieldURI = "item:Categories" />\
                              <t:Message>\
                                <t:Categories>\
                                  <t:String>CategoryName</t:String>\
                                </t:Categories>\
                              </t:Message>\
                            </t:SetItemField>\
                          </t:Updates>\
                        </t:ItemChange>\
                      </ItemChanges>\
                    </UpdateItem>\
                </soap:Body >\
            </soap:Envelope >';
    console.log("Log update request: " + request);
    return request;
}Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source | 
|---|---|
| Solution 1 | Rayhan Muktader | 
| Solution 2 | AndrewS | 
| Solution 3 | Sanket | 
