2012-02-02 32 views
1

上記のタスクは、このスタックオーバーフローのように非常に単純に思われます。questionまたはこのMSDN How Toです。C#からOutlookのメールを読む

しかし、私はちょうど私が「 『Microsoft.Office.Interop.Outlook.MailItem』タイプのインタフェースにタイプ 『システム.__ ComObject』のの COMオブジェクトをキャストすることができませんを言って例外を取得ラインforeach (Outlook.MailItem mail in items)、で打っています。 .. "

この例外に関する投稿はかなりありますが、それを乗り越えるのに役立つものはありません。

誰かがこれを解決し、C#から電子メールを読むことができるように助けてくれますか?

おかげで

+1

あなたはこれを試すことができ、次のよう

したがって、私はループを設計します。 – Feroc

+0

私はそれを試みた。これは "System .__ ComObject"です。 – ViV

答えて

3

見通しエクスプローラ内のすべての項目は必ずしもMailItemあるわけではありません。たとえば、パブリックフォルダにはPostItemが含まれます。私が正しく覚えていれば、紛争のメッセージと会議の要求にも独自のアイテムタイプがあります。少なくともあなたが次の行に、メールのアイテムの種類を確認することができます、foreachの(項目中のvarメール):

foreach (object item in items) { 
    var mail = item as MailItem; 
    if (mail != null) { 
     // do something useful 
     ... 
    } else { 
     // log or show some message box, so that you can debug this case 
     ... 
    } 
} 
+0

同意します。デバッガでは、「アイテム」の内容を確認することができ、Gmailからのウェルカム電子メール(最初のメール)が表示されます。単なる単純な電子メール。それはMailItemではないでしょうか?あなたのデザインでは、このメールの「メール」はまだnullです。これは私の最初のOutlookプログラムなので、その種類は分かりません。 – ViV

+1

@Vishruth:これは*すべてのメールに対して起こるのでしょうか?それともMailItem型のものがありますか? – Heinzi

+0

あなたは正しいです。私はすべての郵便で起こるわけではありません。それは一部の人だけに起こります。ご協力いただきありがとうございます。 – ViV