我目前有一个流程,该流程旨在遍历收件箱,解析其中包含的电子邮件,将它们转储到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,它概述了在“可恢复的项目”文件夹上设置保留策略的必要。
我将继续为此添加编辑。
我相信它是按硬删除设计的-
硬删除该项目或文件夹被永久删除。硬删除项目放置在垃圾箱的“清除”文件夹中。就像当回收卡车清空您的路边回收容器时。的无法从Outlook或Outlook等电子邮件客户端访问项目Web App,并且除非在邮箱上设置了保留,否则这些项目在一段时间后将被永久删除。你可以阅读有关配置项目的更多信息,请参见配置已删除项目保留和可恢复项目的配额。 – Ryan Wilson 2小时前“注意:很难将文件夹放在“清除”文件夹中已删除。硬删除的文件夹将从邮箱中删除。