EWS管理API.IsNew总是返回false,并且可以';不要使用TextBody

本文关键字:TextBody IsNew API 管理 返回 false EWS | 更新日期: 2023-09-27 18:24:32

我是一名新手开发人员,我已经在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!");
            }
        }        

    }

我已经在谷歌上搜索了很多次,但我还是被卡住了。我现在如何阅读哪些电子邮件,有没有一种方法可以获得比我所做的更有效的电子邮件正文?任何帮助都将不胜感激。

EWS管理API.IsNew总是返回false,并且可以';不要使用TextBody

如果你还没有读过MSDN的文章,那么它的用法就很好了。

对于您的问题,将您的项目投射到EmailMessage

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

我确实注意到你没有使用属性集,但只使用EWS进行事件通知,而没有查看现有的邮件,这可能会有所不同。

根据您的更改更新添加

将此用于您的属性集

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!!!!");
}