HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Új e-mail-ek érkezésének ellenőrzése az Exchange szerveren keresztül


Példaprogram letöltése

8332 bájt

Mostani példánkban azt valósítjuk meg, hogy programból ellenőrizzük, hogy kaptunk-e új e-mail-t és ha igen hány darabot. Ezt felhasználva könnyen készíthetünk olyan alkalmazást, mely rendszeres időközönként ellenőrizi ezt és szükség esetén értesít bennünket.
Az e-mail-ek számának lekérdezéséhez az MS Exchange-t fogjuk elérni programunkból és a POP3 protokollt felhasználva kommunikálunk vele, hogy megtudhassuk a számunkra szükséges információt.

A megvalósítás menete a következő lesz. Felvesszük a kapcsolatot az Exchange szerverünkkel, mely alapértelmezésben a 110-es TCP porton figyeli a POP3 kéréseket. A kapcsolat felvétele után be kell jelentkeznünk egy érvényes felhasználói névvel és jelszóval. Ha ez sikeresen megtörtént, akkor az adott felhasználó e-mail fiókjához hozzáférhetünk és egy STAT parancs küldésével az Exchange válaszként megküldi azt az információt, hogy hány új e-mail van és ezek összesen hány bájtnyi adatot takarnak. Feladatunk végén megszakítjuk a kapcsolatot az Exchange-el.
Nézzük miként történik ez a gyakorlatban. Először is nyissuk meg a 110-es TCP portot a TcpClient osztály Connect függvényének hívásával. E függvény két paramétert vár: az első a mail szerverünk neve, vagy IP címe kell hogy legyen, a második a TCP port száma, mely alapértelmezett esetben 110.
    private void button1_Click(object sender, System.EventArgs e)
    {
      TcpClient tc = new TcpClient();
      tc.Connect(textBox1.Text, Convert.ToInt32(textBox2.Text));
Ha a port megnyitása sikeres, akkor a GetStream függvény hívásával kaphatunk egy NetworkStream osztályt, melyet felhasználva létrehozhatunk egy StreamReader osztályt. E két Stream osztályra a kommunikációhoz lesz szükségünk. A NetworkStream osztályt használva tudunk majd adatokat küldeni, míg a StreamReader segítségével az adatokat olvasni.
      ns = tc.GetStream();
      StreamReader sr = new StreamReader(ns);
A TCP port megnyitása után rögtön olvashatjuk is a rendelkezésre álló adatot, melyből megtudhatjuk, hogy a művelet sikeres volt-e, vagy sem. Ha sikeres volt, akkor a visszakapott sztringből megtudhatjuk, hogy milyen mail szerver áll rendelkezésre, annak is melyik verziója.
      listBox1.Items.Add("connect: " + sr.ReadLine());
Következő lépés lesz a felhasználói bejelentkezés, melynél először a felhasználói nevet kell elküldenünk. Ezt egy „USER loginname” formájú sztringként kell elküldeni, ahol a loginname sztring értelemszerűen az adott felhasználói név lesz. Fontos, hogy minden elküldendő sztringet egy "\r\n" sorvége jellel zárjunk. Az így létrejött sztringet át kell alakítanunk ASCII karaktereket tartalmazó tömbbé, mivel a NetworkStream osztály Write függvénye, mellyel az adatok elküldését végezzük, ilyen formájú adatot vár.
      s = "USER " + textBox3.Text + "\r\n";
      ba = Encoding.ASCII.GetBytes(s.ToCharArray());
      ns.Write(ba, 0, ba.Length);
Az adatküldés után végezzünk egy olvasást, melyből megtudhatjuk, hogy milyen eredménnyel járt az adatküldésünk.
      listBox1.Items.Add("user: " + sr.ReadLine());
Most következik a felhasználói jelszó elküldése. Ez egy „PASS password” formátumú sztring elküldését jelenti, ahol a password helyére az adott felhasználó jelszava kerül. Az adatküldés folyamata, majd az eredmény visszaolvasása ugyanúgy történik.
      s = "PASS " + textBox4.Text + "\r\n";
      ba = Encoding.ASCII.GetBytes(s.ToCharArray());
      ns.Write(ba, 0, ba.Length);
      listBox1.Items.Add("password: " +sr.ReadLine());
Ha a bejelentkezés is sikeres volt, akkor jöhet a „STAT” parancs elküldése, amelyre válaszként megkapjuk a számunkra szükséges információt.
      s = "STAT\r\n";
      ba = Encoding.ASCII.GetBytes(s.ToCharArray());
      ns.Write(ba, 0, ba.Length);
Ez az információ a következőképpen nézhet ki: „+OK 10 2503”. A visszakapott sztring három részből áll, melyet szóköz választ el egymástól. Az első rész tájékoztat bennünket arról, hogy a művelet sikeres volt. A második részben lévő szám azt mondja meg, hogy hány új e-mail van, végül a harmadik paraméter az új e-mail-ek összméretét adja bájtban.
A kapott sztring értelmezése egyszerűbb, ha készítünk egy sztringeket tartalmazó tömböt, melynek minden eleme egy-egy paramétert tárol a fenti sztringből. Ezt egyszerűen elkészíthetjük a String osztály Split függvényével, mellyel felbonthatunk egy sztringet egy karakter alapján több sztringre. Ennek eredménye az lesz, hogy a tömb első eleme a +OK feliratot tartalmazza. A második eleme a 10-es számot és a harmadik a 2503 számot, persze sztringként.
      s = sr.ReadLine();
      listBox1.Items.Add("stat: " + s);
      string[] detail = s.Split(new char[] {' '});
A kommunikáció lezárásaként végül egy QUIT parancsot küldünk és zárjuk a két Stream-et is.
      s = "QUIT\r\n";
      ba = Encoding.ASCII.GetBytes(s.ToCharArray());
      ns.Write(ba, 0, ba.Length);
      ...
      ns.Close();
      tc.Close();    
    }

Könyv
Ez a cikk megtalálható ebben a könyvben: C# Software Offline 2002 évkönyv 182. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |