2016-03-30 10 views
0

Outlookアドインでmailitemを保存する際に問題が発生しました。コードがエラーをスローする:「メッセージが変更されたため、操作を実行できません」アドインのアイデアは、メールを右クリックし、新しいオプション「システムに送信」をクリックすると、メールが送信され、アイコンが正常に送信されたことを示すマークとして表示されます。ここで が私のコードです:MailItem.Save()エラー "メッセージが変更されたため、操作を実行できません"

mail.UserProperties.Add("exportedToCompany", OlUserPropertyType.olText, true, OlFormatText.olFormatTextText); 
mail.UserProperties["exportedToCompany"].Value = "exported"; 

try 
{ 
    try 
    { 
     mail.PropertyAccessor.SetProperty("http://schemas.microsoft.com/mapi/id/{00062008-0000-0000-C000-000000000046}/8582000B", false); 
     mail.MessageClass = "IPM.Note.ExportedMail"; 
     mail.Save(); //throws error 
    } 
    catch (System.Exception ex) { logger.Error(ex.Message); logger.Error(ex.StackTrace); } 
    DeleteUselessMsg(mail); 
} 
catch (System.Exception ex) 
{ 
    Debug.WriteLine(ex.StackTrace); 
    logger.Error(ex.Message); 
    logger.Error(ex.StackTrace); 
} 

SendMail(GetNextMail()); 

デバッグ時にはそれが起こるとき、私は本当に状況をシミュレートすることができない、私はこのエラーが大量に発生したクライアントからのログファイルを得ました。 私はなぜこのようなエラーが発生せず、クライアントがそれをたくさん得ることができるのか、それほどランダムではないのだろうと思っています。私のアイディアの1つは、IMAPがメールを保存する前に何らかの形でメールを更新していることです。それは可能ですか? 他のコード実行後にエラーが発生しました:プログラムを閉じようとした後、保存されていないアイテムを保存するかどうかを尋ねるメッセージが表示され、ドラフトフォルダにメールのコピーが作成されます。どうにかMailItemを強制的に保存することはできますか? Outlook 2013を使用しています

答えて

0

エラーは、メッセージを開いた時点から保存された時点までにメッセージが変更されたことを意味します。一般的な経験則として、ライブのOutlookアイテムへの参照はできるだけ短時間の間保持してください。

メール変数はどこから来ますか?実際のMailItemオブジェクトの代わりにアイテムのエントリIDを格納しようとします。Application.Session.GetItemFromIDを使用してエントリIDでアイテムを開き、変更して保存してアイテムを解放します。

+0

メール変数はExplorer.Selection od型から来ます。MailItem – user3762819

+0

このように、メッセージは開いて保存するアクション間でメッセージが変更されたときに発生しますが、ユーザープロパティを追加するたびに変更します。時間は? – user3762819

+0

いいえ。メッセージが保存されたときにのみ、基になるMAPIプロバイダに競合が発生します。メッセージを変更してもそれを保存することは絶対にうまくいきます。 –

関連する問題