Office 用アプリを使用して、ユーザーのメイン メールボックスから共有メールボックスにメールを移動するにはどうすればよいですか。これを手動で実行できることはわかっていますが、アイテムを移動するためのボタンとなるowa/outlook用を作成しています。ews を使用してみましたが、ユーザーのメールボックス内でメールを移動するコマンドしか見つかりません
例えば :
'<?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" />' +
' </soap:Header>' +
' <soap:Body>' +
' <m:MoveItem>' +
' <m:ToFolderId>' +
' <t:DistinguishedFolderId Id="junkemail" />' +
' </m:ToFolderId>' +
' <m:ItemIds>' +
' <t:ItemId Id="' + id + '" ' +
' ChangeKey="' + changeKey + '" />' +
' </m:ItemIds>' +
' </m:MoveItem>' +
' </soap:Body>' +
'</soap:Envelope>';
これを行うxmlを作成できますか? EWS サービス リファレンスを使用してそれを行う方法はありますか。これを行うためにインポート/エクスポートを使用したくありません。
以下のコードは、ユーザーを認証できれば Web Api として機能します。ユーザーに資格情報を再入力させたくありません。ただし、これはダブル ホップ認証の問題があることを意味します。上記は、ユーザーのクライアント側マシンにあるため機能します。以下では、Web API をホストする必要があり、Web サーバーから Exchange に資格情報を渡すことができません。すべてのユーザーのメールボックスにアクセスできるアカウントは必要ないため、サービス アカウントも問題外です。
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2013);
service.Url = new Uri("Ews url");
service.Credentials = CredentialCache.DefaultCredentials;
//service.UseDefaultCredentials = true;
// Create a new folder view, and pass in the maximum number of folders to return.
FolderView view = new FolderView(5);
// Create an extended property definition for the PR_REPLICA_LIST property.
ExtendedPropertyDefinition PR_REPLICA_LIST = new ExtendedPropertyDefinition(0x6698, MapiPropertyType.Binary);
view.PropertySet = new PropertySet(BasePropertySet.IdOnly, FolderSchema.DisplayName, PR_REPLICA_LIST);
// get to the inbox folder of spam mailbox
Mailbox SpamMailbox = new Mailbox("Smtp of other mailbox");
FolderId SpamInbox = new FolderId(WellKnownFolderName.Inbox, SpamMailbox);
Folder SpamFolder = Folder.Bind(service, SpamInbox);
FindItemsResults<Item> findItems = service.FindItems(WellKnownFolderName.JunkEmail, new ItemView(10));
foreach (Item item in findItems)
{
item.Load();
ItemId ItemToMoveId = new ItemId(item.Id.UniqueId.ToString());
Item ItemToMove = Item.Bind(service, ItemToMoveId);
ItemToMove.Move(SpamFolder.Id);
//item.Move(SpamFolder.Id);
}