8

追加:ユーザー@grapkulecのおかげで、私は使用しています

using Microsoft.Exchange.WebServices.Data;

Outlookで(MS Exchangeを使用して)作成済みのフォルダーに電子メールを移動しようとしています。これまでのところ、メールを下書きまたは別のよく知られたフォルダ名に移動することはできましたが、作成した「例」というフォルダに移動することはできませんでした。

foreach (Item email in findResults.Items)
email.Move(WellKnownFolderName.Drafts);

上記のコードは機能します。しかし、私はよく知られたフォルダを使いたくありません。そして、コードを次のようなものに変更しようとすると、次のようになります。

email.Move(Folder.(Example));

また

email.Move(Folder.["Example"]);

移動しません(どちらの場合も、エラーがスローされます)。MSDN、SO、および一般的なC#のフォルダーに電子メールを移動する方法の例をたくさん見つけましたが、Outlookで「よく知られている」フォルダー(下書き、迷惑メールなど)のみで、私が作成したフォルダ。

4

3 に答える 3

11

解決しました!

IDのMove形式が正しくないため、何度か試行してもコマンドは失敗しました。どうやら、移動操作は名前の使用を許可していません。DisplayName私は識別子として試しましたが、それが私を失望させ続けたものです。最後に、私はあきらめましたDisplayName、それは助けになったでしょう。代わりに、IDを変数に格納することでID(迷惑な「IDは不正な形式です」エラーを停止しました)をポイントすると、移動が機能しました。

コード:

Folder rootfolder = Folder.Bind(service, WellKnownFolderName.MsgFolderRoot);
rootfolder.Load();

foreach (Folder folder in rootfolder.FindFolders(new FolderView(100)))
{
    // Finds the emails in a certain folder, in this case the Junk Email
    FindItemsResults<Item> findResults = service.FindItems(WellKnownFolderName.JunkEmail, new ItemView(10));

    // This IF limits what folder the program will seek
    if (folder.DisplayName == "Example")
    {
        // Trust me, the ID is a pain if you want to manually copy and paste it. This stores it in a variable
        var fid = folder.Id;
        Console.WriteLine(fid);
        foreach (Item item in findResults.Items)
        {
            // Load the email, move the email into the id.  Note that MOVE needs a valid ID, which is why storing the ID in a variable works easily.
            item.Load();
            item.Move(fid);
        }
    }
}
于 2012-12-04T17:11:09.757 に答える
8

EWSマネージAPIを使用しているようですので、これが私の答えです。

アイテムのMoveメソッドは、WellKnownFolderNameまたはフォルダーIDを受け入れることができます。私がそれを正しく理解しているなら、あなたはあなたの電子メールを「例」という名前のフォルダに移動したいと思うでしょう。したがって、最初にこのフォルダのフォルダオブジェクトを取得する必要があります。

var filter = new SearchFilter.IsEqualTo(FolderSchema.DisplayName, "Example");
var view = new FolderView(1)
{
    PropertySet = new PropertySet(BasePropertySet.FirstClassProperties)
};
var findFoldersResults = exService.FindFolders(filter, view);
folder = findFoldersResults.FirstOrDefault(f => f.DisplayName.Equals("Example", StringComparison.OrdinalIgnoreCase));

これで、「Example」フォルダ変数が作成され、そのIDを電子メールのMoveメソッドに渡すことができます。詳細については、EWS Managed APIの操作方法に関するmsdnページを確認してください。ここには、非常に多くの単純で基本的な使用例があります。

ところで:WellKnownFolderNames列挙型は、受信トレイ、送信済みアイテムなどの最も一般的なExchangeフォルダーの便利なタイプです。他のExchangeオブジェクトの場合に備えて、検索またはバインディングによって自分で取得する必要があるその他のもの。

于 2012-12-03T15:29:04.167 に答える
3

これらの回答に基づいて、フォルダに移動するための作業方法を作成すると、誰かに役立つ可能性があります。

/// <summary>
/// Moves the email to the specified folder.
/// </summary>
/// <param name="mail">Email message to move.</param>
/// <param name="folderName">Display name of the folder.</param>
public void MoveToFolder(EmailMessage mail, string folderName)
{
    Folder rootfolder = Folder.Bind(_exchangeService, WellKnownFolderName.MsgFolderRoot);
    rootfolder.Load();
    Folder foundFolder = rootfolder.FindFolders(new FolderView(100)).FirstOrDefault(x => x.DisplayName == folderName);
    if (foundFolder == default(Folder))
    {
        throw new DirectoryNotFoundException(string.Format("Could not find folder {0}.", folderName));
    }

    mail.Move(foundFolder.Id);
}
于 2017-04-10T11:26:52.700 に答える