为什么我总是收到 DeleteItem EWS 操作的 ErrorInvalidRequest?

Why do I always get ErrorInvalidRequest for DeleteItem EWS Operation?

我正在尝试使用 EWS DeleteItem 操作,我是这样调用它的:

var mailbox = Office.context.mailbox;
var item = Office.cast.item.toItemRead(mailbox.item);
var requestResponse = mailbox.makeEwsRequestAsync(getDeleteItemRequest(item.itemId), callback2);

这是我的 getDeleteItemRequest 函数:

function getDeleteItemRequest(id) {
    var result = '<?xml version="1.0" encoding="utf-8"?> ' +
        '<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:t="https://schemas.microsoft.com/exchange/services/2006/types"> ' +
        '<soap:Body> ' +
        '<DeleteItem DeleteType="HardDelete" xmlns="https://schemas.microsoft.com/exchange/services/2006/messages"> ' +
        '<ItemIds> ' +
        '<t:ItemId Id="' + id + '" /> ' +
        '</ItemIds> ' +
        '</DeleteItem> ' +
        '</soap:Body> ' +
        '</soap:Envelope>';

    return result;
}

但是,我总是返回 ErrorInvalidRequest 并且项目永远不会被删除。 我使用的是 Exchange 2013。为什么这无法删除该项目? 谢谢!

插件中不允许删除项目,https://docs.microsoft.com/en-us/office/dev/add-ins/outlook/web-services 中仅列出了 EWS 请求的子集。您可以使用 MoveItem 或在项目上设置特定的保留标记作为替代。

在您请求中,XML 模式定义是错误的 Microsoft 对文档进行了大规模更新并破坏了大多数 EWS 请求(在服务器不接受的模式声明中将 http 更改为 https)所以您的要求

function getMoveItemRequest(id, changeKey) {
var result =
    '<?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" xmlns="http://schemas.microsoft.com/exchange/services/2006/types" soap:mustUnderstand="0" /> ' +
    '</soap:Header> ' +
    '<soap:Body> ' +
        '<MoveItem xmlns="https://schemas.microsoft.com/exchange/services/2006/messages" ' +
            'xmlns:t="https://schemas.microsoft.com/exchange/services/2006/types"> ' +
            '<ToFolderId> ' +
                '<t:DistinguishedFolderId Id="deleteditems"/> ' +
            '</ToFolderId> ' +
            '<ItemIds> ' +
                '<t:ItemId Id="' + id + '" ChangeKey="' + changeKey + '"/> ' +
            '</ItemIds> ' +
        '</MoveItem> ' +
    '</soap:Body> ' +
    '</soap:Envelope> ';

return result;

}

应该是

function getMoveItemRequest(id, changeKey) {
var result =
    '<?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" xmlns="http://schemas.microsoft.com/exchange/services/2006/types" soap:mustUnderstand="0" /> ' +
    '</soap:Header> ' +
    '<soap:Body> ' +
        '<MoveItem xmlns="http://schemas.microsoft.com/exchange/services/2006/messages" ' +
            'xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types"> ' +
            '<ToFolderId> ' +
                '<t:DistinguishedFolderId Id="deleteditems"/> ' +
            '</ToFolderId> ' +
            '<ItemIds> ' +
                '<t:ItemId Id="' + id + '" ChangeKey="' + changeKey + '"/> ' +
            '</ItemIds> ' +
        '</MoveItem> ' +
    '</soap:Body> ' +
    '</soap:Envelope> ';

return result;

}