office365-restapi

Getting the email id from the Outlook REST API when sending email


I am trying to use the Microsoft Rest API to send emails on behalf of our users. When I create a message as a draft, I get back an ID that I can use in future requests for editing, deleting, viewing the full conversation (after it is sent), etc.

I do not want to save it as a draft since I have no reason to, I just want to send it directly. After it is sent, I would still like to view the full conversation. However, if I just send the email (using the /sendmail endpoint), I do not get that ID. Is there anyway to get it? Here is my request:

POST https://outlook.office.com/api/v2.0/Users/email/sendmail

{
    "Message": {
        "Subject": "Test",
        "Importance": "Normal",
        "ToRecipients": [{
            "EmailAddress": {
                "Address": "<email>",
                "Name": "<name>"
            }
        }],
        "Sender": {
            "EmailAddress": {
                "Address": "<email",
                "Name": "<name>"
            }
        },
        "Body": {
            "ContentType": "HTML",
            "Content": "<html>\\n<head>\\n  <style>\\n    p { color: red; }\\n  </style> \\n</head>\\n<body>\\n  <p>Test</p>\\n</body>\\n</html>\\n"
        }
    },
    "SaveToSentItems": "true"
}

The HTTP response code is 202, the email sends, but the body is empty (no content, whatsoever).

I don't think this matters, since I can recreate this in Postman, but I am running this in Nodejs using the node-outlook package.


Solution

  • Emails in Exchange via REST and EWS are submitted for transport, but the actual send and subsequent save to the sent items folder are done async. This is why you don't get the id. Transport is who actually writes the email to the sent items folder, not REST.

    If you really need to find the item after it has been saved to the sentItems folder, set something like the PR_SEARCH_KEY and then do a view of the sent items folder and seek to that search key value.

    Also note when you save a draft, the id that you get back will be different than the id of the item in the sent items folder because the folder Id is part of the id of the item, so that id wouldn't help you anyways.