【问题标题】:Reading Email body in c# using Exchange Web service使用 Exchange Web 服务在 c# 中读取电子邮件正文
【发布时间】:2017-04-19 20:14:08
【问题描述】:

我想获取电子邮件正文。使用下面的代码可以获取未格式化的 HTML 的正文。有没有办法直接获取正文?有没有办法可以解析这个未格式化的 HTML并获取实际的正文。我想要文本“Accesscode is 1603”作为输出。

ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1);
            service.AutodiscoverUrl("Deepak.kothari@domain.com");
            List<SearchFilter> searchFilterCollection = new List<SearchFilter>();
            searchFilterCollection.Add(new SearchFilter.ContainsSubstring(ItemSchema.Subject, "AccessCode"));
            SearchFilter searchFilter = new SearchFilter.SearchFilterCollection(LogicalOperator.Or, searchFilterCollection.ToArray());
            ItemView view = new ItemView(50);
            view.PropertySet = new PropertySet(BasePropertySet.IdOnly, ItemSchema.Subject, ItemSchema.DateTimeReceived);
            view.OrderBy.Add(ItemSchema.DateTimeReceived, SortDirection.Descending);
            view.Traversal = ItemTraversal.Shallow;
            FindItemsResults<Item> findResults = service.FindItems(WellKnownFolderName.Inbox, searchFilter, view);
            foreach (Item myItem in findResults.Items)
            {
                myItem.Load();            
                if (myItem is EmailMessage)
                {

                    Console.WriteLine(HttpUtility.HtmlEncode((myItem as EmailMessage).Body));

                }

                else if (myItem is MeetingRequest)
                {
                    Console.WriteLine((myItem as MeetingRequest).Subject);
                }
                else
                {
                    // Else handle other item types.
                }

注意:我使用的是 Exchange 2010

【问题讨论】:

标签: c# exchangewebservices exchange-server-2010


【解决方案1】:

试试ExchangeService.LoadPropertiesForItems的方法。

代码:

ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010);
        service.AutodiscoverUrl("Deepak.kothari@domain.com");
        List<SearchFilter> searchFilterCollection = new List<SearchFilter>();
        searchFilterCollection.Add(new SearchFilter.ContainsSubstring(ItemSchema.Subject, "AccessCode"));
        SearchFilter searchFilter = new SearchFilter.SearchFilterCollection(LogicalOperator.Or, searchFilterCollection.ToArray());
        ItemView view = new ItemView(50);
        view.OrderBy.Add(ItemSchema.DateTimeReceived, SortDirection.Descending);
        view.Traversal = ItemTraversal.Shallow;
        FindItemsResults<Item> findResults = service.FindItems(WellKnownFolderName.Inbox, searchFilter, view);
        service.LoadPropertiesForItems(findResults, view.PropertySet = new PropertySet(BasePropertySet.IdOnly, ItemSchema.Subject, ItemSchema.DateTimeReceived) { RequestedBodyType = BodyType.Text });
        foreach (Item myItem in findResults.Items)
        {
            myItem.Load();
            if (myItem is EmailMessage)
            {

                Console.WriteLine(HttpUtility.HtmlEncode((myItem as EmailMessage).Body));

            }

            else if (myItem is MeetingRequest)
            {
                Console.WriteLine((myItem as MeetingRequest).Subject);
            }
            else
            {
                // Else handle other item types.
            }

更新:

ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1);
        service.AutodiscoverUrl("Deepak.kothari@domain.com");
        List<SearchFilter> searchFilterCollection = new List<SearchFilter>();
        searchFilterCollection.Add(new SearchFilter.ContainsSubstring(ItemSchema.Subject, "AccessCode"));
        SearchFilter searchFilter = new SearchFilter.SearchFilterCollection(LogicalOperator.Or, searchFilterCollection.ToArray());
        ItemView view = new ItemView(50);
        view.PropertySet = new PropertySet(BasePropertySet.IdOnly, ItemSchema.Subject, ItemSchema.DateTimeReceived){ RequestedBodyType = BodyType.Text };
        view.OrderBy.Add(ItemSchema.DateTimeReceived, SortDirection.Descending);
        view.Traversal = ItemTraversal.Shallow;
        FindItemsResults<Item> findResults = service.FindItems(WellKnownFolderName.Inbox, searchFilter, view);
        foreach (Item myItem in findResults.Items)
        {
            myItem.Load();
            if (myItem is EmailMessage)
            {

                Console.WriteLine(HttpUtility.HtmlEncode((myItem as EmailMessage).Body));

            }

            else if (myItem is MeetingRequest)
            {
                Console.WriteLine((myItem as MeetingRequest).Subject);
            }
            else
            {
                // Else handle other item types.
            }

【讨论】:

  • 嗨 Tristan B。LoadPropertiesForItems 方法不起作用。
  • 你能告诉我错误信息吗,因为我无法访问交换服务器 atm,我自己测试一下?
  • 我没有收到任何错误消息,但 (myItem as EmailMessage).Body) 仍然有未格式化的 HTML 作为输出。
  • 我更新了我的答案。我尽量靠近你的代码,我只是添加了{ RequestedBodyType = BodyType.Text }给你PropertySet
猜你喜欢
  • 2012-07-13
  • 1970-01-01
  • 2016-12-15
  • 1970-01-01
  • 2021-01-07
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多