Pobieranie załączników email po kolei

0

Korzystam z biblioteki OpenPOP. Chcę, aby program pobierał załączniki z wiadomości e-mail (zakładam, że jedna wiadomość ma jednego załącznika). Napisałem taki fragment kodu, ale nie działa on poprawnie. Po kliknięciu przycisku program jakby zawiesza się i za jakiś czas na listView1 pojawiają się wszystkie załączniki i w tym samym czasie wszystkie zapisują się na dysku. Chciałbym, żeby załączniki pojawiały się na liście / zapisywały na dysku po kolei, jeden po drugim.

int messageCount = client.GetMessageCount();
progressBar2.Maximum = messageCount;
List<Message> allMessages = new List<Message>(messageCount);
for (int i = 1; i <= messageCount; i++)
{
	allMessages.Add(client.GetMessage(i));
}
foreach (Message msg in allMessages)
{
	var zalaczniki = msg.FindAllAttachments();
	foreach (var zalacz in zalaczniki)
	{
		listView1.Items.Add(zalacz.FileName);
		zalacz.Save(new FileInfo(Path.Combine(label12.Text, zalacz.FileName)));
		int k = listView1.Items.Count;
		progressBar2.Value = k;
		label13.Text = "Pobrano: " + k + "/" + (messageCount);
		Refresh();
	}
}
2
  • zakładam, że jedna wiadomość ma jednego załącznika
    Dlaczego? Przeciez moze byc wiecej zalacznikow.
  • chciałbym, żeby załączniki pojawiały się na liście / zapisywały na dysku po kolei, jeden po drugim.
    Poczytaj o wątkach. Musisz po prostu ten kod odpalic w innym wątku dla UI a inny dla logiki (dla UI powinnien być główny wątek)
1

zwróć uwagę, że najpierw pobierasz wszystkie maile (pierwsza pętla for) i zapełniasz listę allMessage, a dopiero potem przelatujesz po tej liście i pobierasz załączniki z każdego maila.
Proponuje też wyczyścić skrzynkę

0

Jak dla mnie operacją blokującą jest tutaj zapis załącznika do pliku zalacz.Save(...).

Powinno dać się to zrobić asynchronicznie np. za pomocą FileStream.WriteAsync(), co powinno rozwiązać problem z zablokowanym wątkiem UI.

0

Dzięki za wszystkie wskazówki!

Zwrob miał rację, że najpierw pobieram wszystkie wiadomości, dopiero potem przelatuję listę i wyciągam załączniki. Poprawiłem kod i teraz już pobiera mi każdy z załączników po kolei i to widać (nawet przy kolejności zapisu plików na dysku). W końcu! :)

Jeśli chodzi o wątki, to spróbuję jak najszybciej kod przerobić. Poczytałem o tym i rzeczywiście rozdzielenie na wątki powinno załatwić problem z tym chwilowym zawieszaniem się.

0

Witam. chciałem dopytać skąd wziąć tą bibliotekę OpenPOP ? dzięki za podpowiedź. Kosiak

0

dzięki za wskazanie - głównie miałem problem ponieważ natrafiłem na OpenPOP.dll, co do którego trafiłem na stronę firmową Solvusoft wskazującą mi program WinThruster naprawiający plik OpenPOP.dll co do którego zastrzeżenia ma antywirus Symantec ( użyłem podglądu virusTotal w procexp.exe Mark Russinovich Sysinternals ).
Zatem musiałem dopytać o jaką bibliotekę chodzi i otrzymałem odpowiedź, że .NET a nie dll. Jak to dobrze jest zapytać starszych Kolegów na tym Forum... raz jeszcze dzięki za podpowiedź. Kosiak

0

jeszcze jeden chyba najważniejszy obrazek załączam aby tego programu WinThruster.exe NIE INSTALOWAĆ

1 użytkowników online, w tym zalogowanych: 0, gości: 1