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

6561 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 érjük el a 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 port-on 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 port-ot 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 Sub button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles button1.Click
    Dim tc As 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()
    Dim sr As 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 + ControlChars.Cr + ControlChars.Lf
    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 + ControlChars.Cr + ControlChars.Lf
    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" + ControlChars.Cr + ControlChars.Lf
    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 elem a 10-es számot és a harmadik a 2503-as számot, persze sztringként.
    s = sr.ReadLine()
    listBox1.Items.Add(("stat: " + s))
    Dim detail As String() = s.Split(New Char() {" "c})
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" + ControlChars.Cr + ControlChars.Lf
    ba = Encoding.ASCII.GetBytes(s.ToCharArray())
    ns.Write(ba, 0, ba.Length)
    listBox1.Items.Add(("quit: " + sr.ReadLine()))
    listBox1.Items.Add("--------------")
    listBox1.Items.Add(("New mail count: " + detail(1)))
    listBox1.Items.Add(("Total size: " + detail(2)))
    listBox1.Items.Add("--------------")
    ns.Close()
    tc.Close()
  End Sub

Cikksorozat

#IDKategóriaCikk címeSorozat
4397Windows.NET Framework konfigurálása az operációs rendszerben1. rész
4446Windows.NET Framework konfigurációs snap-in2. rész


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 |