В настоящее время у меня есть процесс, который предназначен для итерации через папку «Входящие», разбора электронных писем, содержащихся в нем, выгрузки их в файл JSON и удаления электронных писем. Они не могут go в папку DeletedItems и должны быть немедленно удалены с сервера (таким образом, здесь можно удалить DeleteMode.HardDelete).
Существует администратор, который отслеживает Входящие, чтобы убедиться, что процесс действительно удалив электронные письма, и утром я предупредил меня, что папка RecoverableItems заполняется. Я проконсультировался с этим , чтобы узнать, сделал ли я что-то не так. Кроме того, я просмотрел Режимы удаления с EWS API.
Теперь у меня есть соответствующий фрагмент кода:
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}");
}
Проблема в том, что удаляемые элементы все еще отправляются в папку RecoverableItems в мусорном баке. Тем временем я попросил, чтобы администратор рассмотрел вопрос об изменении политики хранения для RecoverableItems, чтобы он был очищен раньше, чем по умолчанию. Мой главный вопрос: почему это происходит? Похоже, сообщения электронной почты получают SoftDelete, поэтому я знаю, что вызов на удаление EWS происходит успешно, но HardDelete, похоже, игнорируется.
Я все еще относительно неопытен с EWS API и C# в целом, поэтому заранее прошу прощения за любое невежество с моей стороны.
Обновление Я подтвердил администратору, что элементы не попадают в папку «Очистки», где они должны быть посадка. Я также проверил этот фрагмент документации , в котором описывается необходимость настройки политик хранения в папке «Элементы для восстановления».
Я буду добавлять изменения для этого, как я go .