DeleteMode.HardDelete无法按预期工作

问题描述 投票:1回答:1

我目前有一个流程,该流程旨在遍历收件箱,解析其中包含的电子邮件,将它们转储到JSON文件并删除电子邮件。它们无法进入DeletedItems文件夹,必须立即从服务器中删除(因此DeleteMode.HardDelete是此处的唯一选项)。

[有一个管理员在监视收件箱,以确保该过程确实删除了电子邮件,并于今天早上提醒我RecoverableItems文件夹已满。我咨询了this,看看我做错了什么。另外,我确保使用EWS API查看Delete Modes

现在,我拥有的相关代码如下:

Boolean moreItems = true;
        int loopNumber = 0;
        while (moreItems)
        {
            string filepath = "Outputs/";
            string filename = "some_filename.json";
            using (StreamWriter sw = new StreamWriter(filepath + filename))
            {
                int itemsParsed = 0;
                while (moreItems && itemsParsed < 50000)
                // I want to split up the files into 50k item files. 
                {
                    try 
                    {
                        FindItemsResults<Item> itemSet = i.GetItemSet();
                        foreach (Item x in itemSet.Items)
                        {
                            //Console.WriteLine($"Getting mailitem {x.Id}");
                            try 
                            {
                                x.Load(itemSetProperties);
                                EmailMessage email = em.BindEmail(service , x.Id);
                                metadata.Id = x.Id.ToString();
                                metadata.Subject = x.Subject.ToString();
                                metadata.Sender = email.From.Address.ToString();
                                metadata.Body = x.Body.ToString();
                                metadata.DateTimeReceived = x.DateTimeReceived;
                                metadata.DateTimeSent = x.DateTimeSent;
                                metadata.HasAttachments = email.HasAttachments;
                                serializer.Serialize(sw , metadata);
                                moreItems = itemSet.MoreAvailable;
                                itemsParsed += 1;
                                x.Delete(DeleteMode.HardDelete);
                            }
                            catch (ServiceRequestException sre)
                            { 
                                Console.WriteLine("\nTimeout caught.\n");
                                //Connection keeps getting reset every once in a while
                            }
                            catch (XmlException xle) 
                            {
                                x.Delete(DeleteMode.HardDelete);
                                // There are emails with incomplete xml in the body. These can be deleted
                            }
                            catch(Exception ex)
                            {
                                Console.WriteLine($"Caught new exception: \n{ex.Message}");
                                Environment.Exit(0);
                                // I want to catch new exceptions and figure out why they're happening
                            }
                            Console.WriteLine($"Parsed {itemsParsed} items");
                        }
                    }
                    catch (ServiceRequestException exterior_sre)
                    {
                        Console.WriteLine("Caught exterior exception");
                        // Still haven't figured this out yet, but it occurs once 
                        // in a rare while, and continuing does not affect the overall process
                    }
                }
            }
            loopNumber += 1;
            Console.WriteLine($"Moving to loop number {loopNumber}");
        }

问题是要删除的项目被still发送到垃圾箱中的RecoverableItems文件夹。在边界中,我曾要求管理员查看有关更改RecoverableItems的保留策略,以使其比默认情况更早被清除。我的主要问题是为什么会这样?电子邮件似乎正在获取SoftDelete,因此我知道对EWS的删除调用已成功进行,但HardDelete似乎被忽略了。

我对EWS API和C#整体还是比较缺乏经验,因此对于我的任何不了解,在此先致歉。

更新我已通过Admin确认,项目没有降落在“ Purges”文件夹中,而该项目应降落在该文件夹中。我还检查了this piece of documentation,它概述了在“可恢复的项目”文件夹上设置保留策略的必要。

我将继续为此添加编辑。

c# exchangewebservices
1个回答
0
投票

我相信它是按硬删除设计的-

硬删除该项目或文件夹被永久删除。硬删除项目放置在垃圾箱的“清除”文件夹中。就像当回收卡车清空您的路边回收容器时。的无法从Outlook或Outlook等电子邮件客户端访问项目Web App,并且除非在邮箱上设置了保留,否则这些项目在一段时间后将被永久删除。你可以阅读有关配置项目的更多信息,请参见配置已删除项目保留和可恢复项目的配额。 – Ryan Wilson 2小时前“注意:很难将文件夹放在“清除”文件夹中已删除。硬删除的文件夹将从邮箱中删除。

https://docs.microsoft.com/en-us/exchange/client-developer/exchange-web-services/deleting-items-by-using-ews-in-exchange

© www.soinside.com 2019 - 2024. All rights reserved.