ASP (5)

5. Wysy│anie i odbieranie poczty e-mail.

Aby m≤c odbieraµ i wysy│aµ pocztΩ elektroniczn▒ poprzez wykorzystanie obiektu CDONTS nale┐y zainstalowaµ na serwerze WWW us│ugΩ SMTP z pakietu Option Pack dla Windows NT 4.0 Server oraz MS Exchange Server.

5.1 Wysy│anie poczty elektronicznej.

Przyk│adowy prosty program wysy│aj▒cy e-maila wygl▒da nastΩpuj▒co:

1:
2:
3:
4:
5:
6:
<% @LANGUAGE = VBScript %>
<%
Option Explicit
Dim MojaPoczta
Set MojaPoczta = Server.CreateObject(CDONTS.NewMail)
MojaPoczta.Send "webmaster@domena.pl", "administrator@domena.pl", _
7: "Moja pierwsza poczta", "Pozdrowienia od webmastera.", 0
8:
9:
Set MojaPoczta = Nothing
%>

Linie 1-4 s▒ ju┐ znane, gdy┐ zawarte tam komendy by│y wcze╢niej omawione. W linii 5 zosta│ stworzony obiekt MojaPoczta. Obiekt NewMail jest czΩ╢ci▒ CDONTS (Collaboration Data Object for Windows NT Server) i pozwala w prosty spos≤b wysy│aµ pocztΩ ze strony internetowej przy u┐yciu metody Send. Wygl▒da to nastΩpuj▒co:

MojaPoczta.Send Aders_OdKogo, Adres_DoKogo, Temat, Tre╢µ, Priorytet

Wszystkie parametry s▒ chyba zrozumia│e, mo┐e tylko ostatni, tj. Priorytet, kt≤ry przyjmuje nastΩpuj▒ce warto╢ci:

0 - dla niskiego priorytetu wiadomo╢ci
1 - dla normalnego priorytetu wiadomo╢ci
2 - dla wysokiego priorytetu wiadomo╢ci

Nale┐y zauwa┐yµ, ┐e w linii 8 obiekt MojaPoczta zosta│ usuniΩty (zdeaktywowany) poprzez wykonanie komendy:

Set MojaPoczta = Nothing

Powodem tego jest fakt, i┐ obiekt MojaPoczta mo┐e byµ u┐yty do wys│ania tylko jednej wiadomo╢ci. Po wys│aniu (metoda Send), automatycznie staje siΩ zupe│nie bezu┐yteczny. Zabezpieczaj▒c siΩ przed pojawieniem siΩ jakichkolwiek b│Ωd≤w, powinno siΩ ustawiaµ warto╢µ takiego obiektu na warto╢µ Nothing, czyli zwolniµ jego zasoby na serwerze.

Komenda:

MojaPoczta.Send Aders_OdKogo, Adres_DoKogo, Temat, Tre╢µ, Priorytet

mo┐e przyj▒µ tak┐e inn▒ postaµ:

MojaPoczta.From Aders_OdKogo
MojaPoczta.To Adres_DoKogo
MojaPoczta.Subject Temat
MojaPoczta.Body Tre╢µ
MojaPoczta.Importance Priorytet
MojaPoczta.Send

Opr≤cz wy┐ej wymienionych metod obiekt MojaPoczta mo┐e mieµ jeszcze nastΩpuj▒ce:

MojaPoczta.Bcc - okre╢la osoby, kt≤re jeszcze otrzymaj▒ t▒ wiadomo╢µ; adresy powinny byµ oddzielone ╢rednikiem (;)
MojaPoczta.BodyFormat - okre╢la czy wiadomo╢µ w formacie zwyk│ago tekstu (warto╢µ 1), czy w formacie HTML (warto╢µ 0)
MojaPoczta.MailFormat - okre╢la format poczty, tzn. czy jest to wiadomo╢µ tekstowa (warto╢µ 1), czy wiadomo╢µ formatu MIME (warto╢µ 0); je╢li do wiadomo╢ci do│▒czony jest jaki╢ plik to formatem poczty powinien mieµ warto╢µ 0 (format MIME)
MojaPoczta.AttachFile - okre╢la za│▒czone pliki

W celu lepszego zrozumienia poni┐ej zosta│ przedstawiony trochΩ bardziej rozbudowany przyk│ad:

<% @LANGUAGE = VBScript %>
<%
Option Explicit
Dim objPoczta, htmlText, wsOsoby
Set objPoczta = Server.CreateObject("CDONTS.NewMail")

htmlText = "<!DOCTYPE HTML PUBLIC "" -//W3C//DTD HTML 4.0 Transitional//EN"">"
htmlText = htmlText & "<html>"
htmlText = htmlText & "<head>"
htmlText = htmlText & "<title>Moja strona uruchomiona!</title>"
htmlText = htmlText & "<body bgcolor=#ffffff>"
htmlText = htmlText & "<center>"
htmlText = htmlText & "<p>Strona ""Moja pierwsza "
htmlText = htmlText & "strona"" zosta│a uruchomiona pod adresem "
htmlText = htmlText & "<a href=""http://www.domena.pl"">"
htmlText = htmlText & "http://www.domena.pl</a>.</p>"
htmlText = htmlText & "<img src=""logo.gif"">"
htmlText = htmlText & "</center>"
htmlText = htmlText & "</body>"
htmlText = htmlText & "</html>"

wsOsoby = Array("uzytkownik1@domena.pl", "uzytkownik2@domena.pl")

objPoczta.From = "webmaster@domena.pl"
objPoczta.To = "administrator@domena.pl"
objPoczta.Bcc = Join(wsOsoby, ";")
objPoczta.Subject = "Strona uruchomiona!"
objPoczta.BodyFormat = 0
objPoczta.MailFormat = 0

objPoczta.Body = htmlText
objPoczta.AttachFile Server.MapPath("logo.gif")

objPoczta.Send
Set objPoczta = Nothing
%>

My╢lΩ, ┐e nie trzeba omawiaµ tego programu, gdy┐ wcze╢niej wszystkie komendy by│y ju┐ omawiane, mo┐e poza funkcj▒ join(tablica, ci▒gOdzielaj▒cy), kt≤ra w przyk│adzie wygl▒da nastΩpuj▒co:

Join(wsOsoby, ";")

i zwraca │a±cuch zawieraj▒cy wszystkie elementy tablicy wsOsoby oddzielone znakiem ╢rednika (;).

5.2 Odbieranie poczty elektronicznej.

W celu odebrania poczty elektronicznej na stronie WWW nale┐y pos│u┐yµ siΩ obiektem Session z CDONTS. Korzystaj▒c z CDONTS mo┐na bezpo╢rednio utworzyµ tylko dwa obiekty, tj. NewMail oraz Session. Obiekt NewMail zosta│ ju┐ om≤wiony podczas wysy│ania poczty. Teraz om≤wiony zostanie obiekt Session. Poni┐ej znajduje siΩ program, kt≤ry przedstawia spos≤b odbierania poczty poprzez stronΩ WWW, dla przyk│adu niech bΩdzie to poczta u┐ytkownika webmaster:

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
<% @LANGUAGE = VBScript %>
<% Option Explicit %>
<HTML>
<HEAD>
<TITLE>Odbieranie poczty</TITLE>
</HEAD>
<BODY BGCOLOR=#FFFFFF>
<%
Dim cdoSesja, poczta, wiadomosci, wiadomosc, wiadId, i
Set cdoSesja = Server.CreateObject("CDONTS.Session")
cdoSesja.LogonSMTP "webmaster", "webmaster@domena.pl"
Set poczta = cdoSesja.Inbox
Set wiadomosci = poczta.Messages

wiadId = Trim(Request.QueryString("WiadId"))
if ("" = wiadId Or Not IsNumeric(wiadId)) Then
17: For Each wiadomosc In wiadomosci
18:
19:
20:
21:
22:
23:
24:
i = i + 1
Response.Write "<a href="""
Response.Write Request.ServerVariables("SCRIPT_NAME")
Response.Write "?WiadId=" & i & """>" & wiadomosc.Subject
Response.Write "</a>"
Response.Write " wys│ane przez " & wiadomosc.Sender
Response.Write "<BR>"
25: Next
26: Else
27:
28:
29:
30:
Set wiadomosc = wiadomosci(wiadId)
Response.Write "<B>Temat:</B> " & wiadomosc.Subject & "<BR>"
Response.Write "<B>Nadawca:</B> " & wiadomosc.Sender & "<BR>"
Response.Write "<B>Tre╢µ:</B> " & wiadomosc.Text & "<BR>"
31:
32:
33:
34:
35:
End If
cdoSesja.Logoff

%>
</BODY>
</HTML>

Powy┐sza strona (przyk│ad) umo┐liwia wy╢wietlenie poczty przychodz▒cej w formie listy oraz wy╢wietlenie zawarto╢ci zaznaczonej (wybranej z listy) wiadomo╢ci. Poczta nale┐y do u┐ytkownika webmaster, lecz zanim bΩdzie mo┐na j▒ odebraµ, trzeba siΩ zalogowaµ. Jest to zrobione nastΩpuj▒co:

Set cdoSesja = Server.CreateObject("CDONTS.Session")
cdoSesja.LogonSMTP "webmaster", "webmaster@domena.pl"

Nale┐y zauwa┐yµ, ┐e jest to rozwi▒zanie ma│o bezpieczne, dlatego te┐ jest mo┐liwe do zrealizowania tylko lokalnie. NastΩpnym krokiem jest otwarcie folderu Inbox oraz pobranie zbioru Messages (wiadomo╢ci):

Set poczta = cdoSesja.Inbox
Set wiadomosci = poczta.Messages

Poniewa┐ oba elementy s▒ obiektami, nale┐y u┐yµ komendy Set w celu przypisania ich do zmiennych lokalnych. Teraz nale┐a│oby pobraµ wszystkie wiadomo╢ci znajduj▒ce siΩ w skrzynce (Inbox) u┐ytkownika webmaster. W pierwszej czΩ╢ci jest pobierana i wy╢wietlana lista wszystkich wiadomo╢ci (linie 17-25). Warunkiem wykonania tej operacji jest brak warto╢ci parametru wiadId (linia 16), czyli nie zosta│a wybrana ┐adna konkretna wiadomo╢µ. Zmienna wiadId w naszym przyk│adzie jest identyfikatorem wybranej wiadomo╢ci. Do odebrania informacji na temat wszystkich wiadomo╢ci u┐yta zosta│a pΩtla For ... Each. W pΩtli generowane s▒ odsy│acze zawieraj▒ce temat wiadomo╢ci i jego nadawcΩ. W momencie klikniΩcia na odsy│aczu, warunek w instrukcji If (linia 17) przyjmie warto╢µ FALSE i zostan▒ wykonane rozkazy w liniach 27-30, kt≤re spowoduj▒ wy╢wietlenie wybranej wiadomo╢ci z wiΩksz▒ ilo╢ci▒ szczeg≤│≤w, tj. temat, nadawca, tre╢µ wiadomo╢ci. Linia:

Set wiadomosc = wiadomosci(wiadId)

tworzy obiekt odnosz▒cy siΩ do jednej tylko wiadomo╢ci (wybranej wiadomo╢ci). W linii 32, tj:

cdoSesja.Logoff

nastΩpuje wylogowanie siΩ z us│ugi SMTP i zako±czenie obs│ugi poczty przychodz▒cej.

Kurs pochodzi z serwisu Programowanie wg Stelmika republika.pl/stelmik