C# - E-mail üzenetek ellenőrzése a háttérben

forráskód letöltése
Cikkünkben elkészítünk egy alkalmazást, mely anélkül ellenőrzi e-mail üzeneteinket a háttérben, hogy elindítottunk volna egy levelező programot. Az alkalmazás indulásakor megadható a megfelelő POP3 kiszolgáló, és a felhasználói információk, valamint az ellenőrzés gyakorisága. E-mail üzenet érkezésekor az alkalmazás ikonjának „animációja” figyelmeztet.
Az alkalmazás úgy működik, hogy a felbukkanó ablakban be kell állítanunk a POP3 kiszolgáló nevét, vagy IP címét, majd meg kell adnunk a postafiókunk azonosítóját és a jelszót. A levelek ellenőrzése 1, 5 vagy 10 perces periódusokban történhet.
Az OK gombra kattintva az ablakot elrejtjük, csupán egy ikon figyelmeztet a tálcán, hogy fut a program a háttérben.
Az ikonra kattintva az egér jobb gombjával megjeleníthető egy menü, melyből választhatunk 3 funkció közül. Bezárhatjuk az alkalmazást, vagy új konfigurációs beállításokat adhatunk meg, illetve előidézhetjük az egyébként periodikusan zajló ellenőrzést.
Az ellenőrzés tulajdonképpen egy Socket-művelet, melyben elküldünk parancsokat a POP3 kiszolgálónak (WriteServer metódus), valamint kiolvassuk a válaszokat (ReadServer) annak érdekében, hogy megtudjuk, sikeres volt-e a parancsküldés. Ezt a Check metódusban végezzük el.
Első lépésben létrehozunk egy TcpClient objektumot, melynek segítségével kapcsolódhatunk a kiszolgálóhoz.
TcpClient client = new TcpClient();
A következő mozdulat, hogy csatlakozunk is az objektum Connect metódusában megadva a szerver nevét, vagy címét és a port számot.
client.Connect(textBox1.Text,Int32.Parse(textBox2.Text));
Egy NetworkStream objektumban lekérdezzük a hálózati adatfolyamot.
netstream = client.GetStream();
Ellenőrizzük a kapott információkat.
string msg = ReadServer(ref netstream);
Error(msg);
A válaszban tulajdonképpen megvizsgáljuk, hogy a szerver válasza pozitív vagy negatív. Erre szolgál minden parancsküldés után az Error metódus, melyben megvizsgáljuk, hogy a kapott adatfolyam tartalmazza-e a „+OK” karakterláncot.
Első parancsunk a USER szócska lesz, megadva a kiszolgálónak a fiók nevét.
WriteServer(ref netstream, "USER " + textBox3.Text);
...
Ezt követi az ellenőrzés, majd a jelszó elküldése a PASS kulcsszóval.
WriteServer(ref netstream, "PASS " + textBox4.Text);
A Send STAT metódussal elküldjük a szervernek a levelek számára vonatkozó kérésünket. Ez így fest:
WriteServer(ref netstream, "STAT");
...
string[] t = msg.Split(new char[] {' '});
unread =Int32.Parse(t[1]);
Az unread változó tartalmazza a nem olvasott levelek számát, melyet megjelenítünk az alkalmazás NotifyIcon komponensének feliratában (Hint) is.
A levelek lekérdezését természetesen egy időzítő végzi, mely a beállítások megadásakor elindul, újra-konfiguráláskor pedig újraindítható.
A levelek érkezését egy animált ikonnal is jelezzük. Ennek érdekében a ShowMail metódusban elindítunk egy másik időzítőt, mely az alkalmazás ImageList komponensében elhelyezett két Bitmap objektum felhasználásával – azok megjelenítését váltogatva – hozza létre a mozgás érzetét.
Ekkor a Bitmap objektumba betöltjük az adott képet.
bmp = new Bitmap(imageList1.Images[2]);
Ezután készítünk belőle egy Icon objektumot, mely már megadható a NotifyIcon komponens Icon property-jében.
notifyIcon1.Icon = Icon.FromHandle(bmp.GetHicon());
Amennyiben érkezett új levél, akkor az animáló ikonra kattintva – amennyiben telepítve van a számítógépen – elindítható a Microsoft Outlook levelezőprogram.
Ehhez a Process osztály Start metódusát használjuk fel.