3

私は初心者の開発者で、何時間も EWS を使い続けています。最新のメールを読み、未読のメールをすべて取得し、それらのデータを使用して何かを行う必要があります。

現時点で私のコードは次のようになります。

static void Main(string[] args)
    {
        ServicePointManager.ServerCertificateValidationCallback = CertificateValidationCallBack;
        ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2013);
        service.Credentials = new WebCredentials("support@mycompany.com", "mysupersuperdupersecretpassword");


        service.AutodiscoverUrl("support@mycompany.com", RedirectionUrlValidationCallback);


        FindItemsResults<Item> findResults = service.FindItems(WellKnownFolderName.Inbox,new ItemView(2));
        foreach (Item item in findResults.Items)
        {
            // works perfectly until here
            Console.WriteLine(item.Subject);
            Console.WriteLine('\n');
            item.Load();
            string temp = item.Body.Text;
            // I can't seem to get TextBody to work. so I used a RegEx                                                 Match match = Regex.Match(temp, "<body>.*?</body>", RegexOptions.Singleline);
            string result = match.Value;
            result = result.Replace("<body>", "");
            result = result.Replace("</body>", "");
            Console.Write(result);
            Console.WriteLine('\n');
            //Now the email boddy is fine but IsNew always returns false.
            if (item.IsNew)
            {
                Console.WriteLine("This message is unread!");
            }
            else
            {
                Console.WriteLine("This message is read!");
            }
        }        


    }

私はググって、もう少しググってみましたが、行き詰まっています。どの電子メールが読まれるようになったのか、私が行ったことよりも効果的な電子メール本文を取得する方法はありますか? どんな助けでも大歓迎です。

4

1 に答える 1

2

まだ読んでいない場合は、使用方法に関するMSDN の記事が非常に役立ちます。

問題については、アイテムを EmailMessage にキャストしてください

foreach (Item item in findResults.Items)
{
    var mailItem = (EmailMessage)item;
    // works perfectly until here
    Console.WriteLine(mailItem.Subject);
}

プロパティ セットを使用していないことに気付きましたが、イベント通知に EWS のみを使用しており、既存のメールを使用していないため、異なる可能性があります。

UPDATE あなたの変更を考慮した追加

これをプロパティ セットに使用します

new PropertySet(BasePropertySet.FirstClassProperties) {
    RequestedBodyType = BodyType.Text
};

また、これは少し読みやすく、Body.Textプロパティを使用します

foreach (Item myItem in findResults.Items.Where(i=>i is EmailMessage))
{
    var mailItem = myItem as EmailMessage;
    Console.WriteLine(mailItem.Subject);
    mailItem.Load(new PropertySet(BasePropertySet.FirstClassProperties) {
        RequestedBodyType = BodyType.Text
    }); // Adding this parameter does the trick :)
    Console.WriteLine(mailItem.Body.Text);

    if(! mailItem.IsRead)
        Console.WriteLine("Who is Your Daddy!!!!");

}
于 2013-07-24T07:52:45.480 に答える