Ich habe eine Konsolenanwendung in Visual Studio mit C# erstellt. Ich habe eine Konfigurationsdatei (app.config) mit vielen Schlüsseln, um die E-Mail zu identifizieren, die ich löschen möchte.Nicht in der Lage, E-Mails aus Outlook auf den ersten Blick zu löschen
Mein Problem ist, dass selbst wenn das Löschen funktioniert, wenn ich 10 ungelesene E-Mails zu löschen habe, muss ich die Anwendung ein paar Mal ausführen, um dies tun zu können. Ich bekomme keinen Fehler.
Es sieht so aus als gäbe es eine Art Timeout, also löscht die Anwendung die ersten 3 Emails, den Rest unberührt, dann starte ich die Applikation nochmal und es werden die nächsten 3 oder 4 Emails gelöscht und dann immer wieder bis ich alles löschen
Mache ich etwas falsch? Nach meinem Code verbindet es sich mit Outlook und unser Mail-Server ist Microsoft Exchange.
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using Microsoft.Office.Interop.Outlook;
using Exception = System.Exception;
namespace OutlookReader
{
class Program
{
static void Main()
{
try
{
var outlookApplication = new ApplicationClass();
var mapiNameSpace = outlookApplication.GetNamespace("MAPI");
//Inbox
var inbox = mapiNameSpace.GetDefaultFolder(OlDefaultFolders.olFolderInbox);
//Unread emails
var unreadItems = inbox.Items.Restrict("[Unread]=true");
var splitter = char.Parse(ConfigurationManager.AppSettings["splitter"]);
var excludeBySenderName = ConfigurationManager.AppSettings["ExcludeBySenderName"].Split(splitter).ToList();
var excludeByEmail = ConfigurationManager.AppSettings["ExcludeByEmail"].Split(splitter).ToList();
var excludeByDomain = ConfigurationManager.AppSettings["ExcludeByDomain"].Split(splitter).ToList();
var excludeByTo = ConfigurationManager.AppSettings["ExcludeByTo"].Split(splitter).ToList();
var excludeBySubject = ConfigurationManager.AppSettings["ExcludeBySubject"].Split(splitter).ToList();
foreach (MailItem item in unreadItems)
{
Console.WriteLine("Sender: " + item.SenderName + " - To: " + item.To + " - Subject: " + item.Subject);
if (stringExists(item.SenderName, excludeBySenderName)
|| stringExists(item.SenderEmailAddress, excludeByEmail)
|| stringExists(item.SenderEmailAddress, excludeByDomain)
|| stringExists(item.To, excludeByTo)
|| stringExistsFullSearch(item.Body, excludeByDomain)
|| stringExistsFullSearch(item.HTMLBody, excludeByDomain)
|| stringExistsFullSearch(item.Subject, excludeBySubject))
{
//item.UnRead = false;
item.Delete();
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Console.ReadKey();
}
private static bool stringExists(string pattern, List<string> list)
{
var result = list.Find(item => item.ToLower().Contains(pattern.ToLower()));
if (string.IsNullOrWhiteSpace(result))
{
return false;
}
return true;
}
private static bool stringExistsFullSearch(string pattern, List<string> list)
{
var result = false;
foreach (var item in list)
{
if (pattern.ToLower().Contains(item.ToLower()))
{
result = true;
}
}
return result;
}
}
}
Vielen Dank, es funktioniert! – MarcosF8