Powered By Achely's Blog
.net开发技术文章
Sending Digital PostCards with ASP and the free component ASPEmail from Persits software.
By Joao Vieira
Powered By Achely's Blog
What is a Digital Postcard?
A digital postcard is a image a net surfer picks out, along with an accompanying personal message. The net surfer "sends" the postcard by supplying a friend's email address. A link is then emailed to the address supplied. The link takes the receiver of the digital postcard to the site which displays the image and contains the personal message.
zhangyongjun.com开发网
Powered By Achely's BlogFirst you must create a database to house the information for the postcards. (I use a DataBase to put the PostCards information so that when a person gets the mail with the post card only have to click on the link and the page apears, goin to DB to get the Data. So here it is the structure of my DataBase (you can make your own, with more information if you intend to.
Postal
ID_POSTAL Autonumber
.net开发技术文章passw integer
javascript技巧尽在快乐开发
postal Text
nameto Text
namefrom Text
emailfrom Text
devjoy.cn技术文档emailto Text
Message Text
Data Text
For the digital postcard system to work, you will need a number of images for the postcards. In my example I have six unique postcards, and 12 images for the postcards: a thumbnail and normal size image for each postcard. I also use images for buttons, the main ones being View, Send, and Repeat.
Concerning the code, I want to warn you that I am not going to be going deep into the HTML aspect; I will concentrate on the ASP. If you have any questions about this article, please contact me.
You will have to make an HTML form. I used the POST method, because I don't like to see all ofthe information submitted in the address link box. (Related Article! Passing Data Between ASP Pages)
快乐开发技术文档FILE: makin.html
This file contains the form where we get all of the information from the user. This information will be used to make the digital postcard.
<form
devjoy.cn技术文档
name="postalsent"
method="post"
action="view.asp?fromn=seeit"
target="_self"
快乐开发技术文档>
.....
devjoy.cn技术文档
<td width="24" valign="bottom">
<font face="Arial">
<input type="radio" value="postal1" name ="R1">
</font>
</td>
<td width="140">
<font face="Arial">
<IMG border=2 height=86 src="images/postal1.gif" width=134>
</font>
</td>
一起娱乐网01716.com
<td width="12" valign="bottom">
<font face=3D"Arial">
<input type="radio" value="postal2" name ="R1">
</font>
</td>
<td width="151">
Powered By Achely's Blog <font face="Arial">
<IMG border=2 height=87 src="images/postal2.gif" width=134>
快乐开发技术文档 </font>
zhangyongjun.com开发网 </td>
javascript技巧尽在快乐开发
</tr>
<tr>
<td width="24" valign="bottom">
<font face="Arial">
<input type="radio" value="postal3" name="R1">
</font>
devjoy.cn技术文档
</td>
<td width="140">
.net开发技术文章
<font face="Arial">
<IMG border=2 height=88 src="images/postal3.gif" width=135>
</font>
</td>
<td width="12" valign="bottom">
<font face="Arial">
一起娱乐网01716.com
<input type="radio" value="postal4" name="R1">
javascript技巧尽在快乐开发
......
Powered By Achely's Blog
devjoy.cn技术文档
快乐开发技术文档
<INPUT name="nameto" size=18 style="LEFT: 1px; TOP: 2px">
快乐开发技术文档
<input name="emailto" size="18">
<input name="namefrom" size="18">
<input name="emailfrom" size="18">
<TEXTAREA cols=18 name=message rows=2></TEXTAREA>
<input type="image" name="bseeit" src="images/seesentbotton.gif"
border=0 height=51 width=110>
javascript技巧尽在快乐开发
<td width="32%">
Powered By Achely's Blog
<a href="makin.htm">
<img border=0 height=53 src="images/resetbotton.gif" width=41>
zhangyongjun.com开发网
</a>
</td>
......
As you see in this example I use an image for Submit Button, and another image for reset button, at the reset button I made a reload of the page (refresh) that really cleans all the fields.
At action="view.asp?fromn=seeit" I use fromn to know if view.asp is being accessed from the creation phase or from the person that wants to view the digital postcard that was sent to them. I chose to set fromn to Seeit if we are still in the creation phase, and out if we are wanting to view the postcard.
In the file makin.html all we want to do is to send the information collected in the above FORM. The fields that i'm using are the ones named above: R1, nameto, mailto, namefrom, emailfrom.
zhangyongjun.com开发网FILE: view.asp
This the the important part, here we will see if there is a person previewing the card before sending it, or a person viewing card already sent. We will take all the information sent by the POST form of the previous file.
<%
devjoy.cn技术文档
Dim fromn
Dim ident
Dim psw
快乐开发技术文档' erring tells us if the card already
' exists. By default, we assum it does.
Dim erring
' I normaly use 0 and 1 for boolean,
' cause it is quicker
erring = 0
' Receiving the information
' from the link that led to this file;
' this one tell us
' what kind of access we're doing
fromn = Request.QueryString("fromn")
' here we take the ID from the post card,
' for us to know wich card we want to see.
' All this information will be compared with
' the one in the database.
ident = Request.QueryString("ident")
' This is the password
' We do not want a person that knows there exists a
' postcard with ID 13 tries to see one with ID 12.
' We will generate a random number for the password
psw = Request.QueryString("psw")
if fromn = "seeit" then
' If we just want to see the preview
Powered By Achely's Blog ' I have created sessions to keep the information,
快乐开发技术文档
' so that I can view the data at any step
session("postal") = Request.form("R1")
.net开发技术文章 session("namefrom") = Request.form("namefrom")
javascript技巧尽在快乐开发 session("emailfrom") = Request.form("emailfrom")
session("nameto") = Request.form("nameto")
session("emailto") = Request.form("emailto")
session("message") = Request.form("message")
else
'Someone is wanting to see an already sent card
devjoy.cn技术文档
'Open the DB connection
Set Conn = Server.CreateObject("ADODB.Connection")
.net开发技术文章
' The DSN you made for the database
conn.open "DSN=postal;"
'Create a recordset
Set rs = Server.CreateObject("ADODB.Recordset")
一起娱乐网01716.com
javascript技巧尽在快乐开发
' This is asimple SQL statement that see if the ID and
Powered By Achely's Blog
' password are connected in the DB
devjoy.cn技术文档
SQLStmt = "SELECT * FROM postal WHERE ID_POSTAL = " & _
CInt(ident) & " AND passw = " & CInt(psw)
快乐开发技术文档
' Execute the SQL statementz
快乐开发技术文档
rs.Open SQLstmt, Conn, 1, 2
if rs.EOF then
'Post card doesn't exist or invalid password!
erring = 1
else
'Postcard does exist. Populate the session
javascript技巧尽在快乐开发
'variables with the database info.
Powered By Achely's Blog
session("postal") = rs("postal")
session("namefrom") = rs("namefrom")
zhangyongjun.com开发网
session("emailfrom") = rs("emailfrom")
session("nameto") = rs("nameto")
session("emailto") = rs("emailto")
session("message") = rs("message")
'if fromn have "seeit we will show =
end if
end if
%>
<html>
zhangyongjun.com开发网<body
marginheight="0"
marginwidth="0"
topmargin="0"
leftmargin="0"
devjoy.cn技术文档
background="images/something.gif"
bgcolor="#002400"
text="#FCC403"
>
快乐开发技术文档<%
' At this time we will see if there has been an error
' We also want to make sure the form data is valid.
if erring <> 1 and (fromn="seeit" or fromn="out") and
session("postal") <> "" then
' if everything is correct we show the information
%>
<div align="left">
<table border="0" width="580" cellspacing="0" cellpadding="0">
<tr>
<td width="50%" valign="top" align="left"><br>
<br>
<img src="images/<%=session("postal")%>.jpg" hspace="5"
border="2" WIDTH="354" HEIGHT="231">
</td>
<td width="50%">
<table border="0" cellspacing="3" width="100%" cellpadding="3"
bordercolor="#000000" height="202">
<tr>
<td width="100%" height="109">
<p align="left">
<font face="Arial"><br>
<small>From:</small>
<strong><%=session("namefrom")%></strong>
<br>
<small>Email:</small><small><strong>
<%=session("emailfrom")%></strong></small>
Powered By Achely's Blog <br>
快乐开发技术文档
<small>To:</small><strong><small>
<%=session("nameto")%></small></strong>
.net开发技术文章 <br>
javascript技巧尽在快乐开发 <small>Email:</small><small><strong>
<%=session("emailto")%></strong></small>
</font>
</td>
</tr>
<tr>
devjoy.cn技术文档
<td width="100%">
<font face="Arial">
<small>Message:</small><br>
.net开发技术文章
<font size="2"><strong>
<%=session("message")%></strong>
</font>
</font>
</td>
</tr>
一起娱乐网01716.com
<tr>
javascript技巧尽在快乐开发
<td width="100%" align="center" valign="middle" height="29">
Powered By Achely's Blog
<%
devjoy.cn技术文档
'if fromn == "seeit" we will show the
'buttons "to send" and "to retry"
快乐开发技术文档
if fromn="seeit" then
%>
快乐开发技术文档
<p align="left"><br>
<a href="javascript:history.back()">
<img src="images/rebuildbotton.gif" width="60"
height="53" border="0">
</a>
<a href="enviado.asp">
<img src="images/sendbotton.gif" width="41"
javascript技巧尽在快乐开发
height="53" border="0">
Powered By Achely's Blog
</a>
</td>
zhangyongjun.com开发网
</tr>
</table>
</td>
</tr>
</table>
</div>
<%
' Someone is viewing a card already made
' Show the reply button
zhangyongjun.com开发网 else
%>
<br><br><br>
<a href="makin.htm" target="_self" >
<img border="0" height="72" src="images/replybotton.gif"
devjoy.cn技术文档
width="176">
</a>
<%
end if
快乐开发技术文档' This else will only be reached if there is no card
' (i.e. the password was incorrect) We need to show
' an error message.
else
%>
<br><br>
<center>
<img src="images/error.gif" width="322" height="53"
border="0">
</center>
<br>
<%
end if
快乐开发技术文档
' This is where i remove all the postcards
' in the DB with more than 30 days old.
' I do not want to make a huge DB, so I clean
' it just to have the messages of the last 30 days.
快乐开发技术文档
' You can now ask.. "-So, why did you put this code here?"
' My response is:
' "- Because this is the place where you fill the DB,
' so if you are going to put another record
javascript技巧尽在快乐开发
' at the DB, lets clean some old stuff."
' That being said, let's clean the db! :)
Powered By Achely's Blog' Here we will get the system date (yes, the server date)
javascript技巧尽在快乐开发d = now()
.net开发技术文章' We will decrease 30 days at the date we have
d = DateAdd("d",-30,d)
一起娱乐网01716.comSet Conn = Server.CreateObject("ADODB.Connection")
快乐开发技术文档conn.open "DSN=postal;"
快乐开发技术文档Set rs = Server.CreateObject("ADODB.Recordset")
zhangyongjun.com开发网' Run a SQL query that will remove all out of date records
SQLStmt = "DELETE FROM postal WHERE data < #" & d & "#" '
'Run the query
rs.Open SQLstmt,Conn,1,2
%>
快乐开发技术文档
</body>
一起娱乐网01716.com</html>
FILE: enviado.asp
zhangyongjun.com开发网At this time, we will validate all the information that it is supposed to sent as well as the data that we
will put in the DB. If everything is well we will send the information to the receiver by e-mail. I will
explain later how to get the free e-mail component, how to register it at the server, and how to use it.
<%
' This is the variable that I use to the ID
' of the post card
Dim identifier
一起娱乐网01716.com
' goby is anotther boolean to
' see if there is an error in the data
Powered By Achely's Blog
Dim goby
goby = 1 'lets start it with True
Powered By Achely's Blog
%>
<html>
zhangyongjun.com开发网
<body
devjoy.cn技术文档
marginheight="0"
devjoy.cn技术文档 marginwidth="0"
一起娱乐网01716.com
topmargin="0"
一起娱乐网01716.com
leftmargin="0"
background="images/something.gif"
bgcolor="#002400"
快乐开发技术文档
text="#FCC403"
>
<font face=3D"Arial">
一起娱乐网01716.com<small><strong>
<%
' Let's validate the name; the length of the
' name must be at least 2 characters long
if len(session("nameto")) < 2 then
' So if there is any problem there will be an error
goby = 0
end if
快乐开发技术文档
if len(session("namefrom")) < 2 then
goby = 0
end if
javascript技巧尽在快乐开发
' Validate the e-mail, I have written
' an arthicle about this, take a look at it
If Len(session("emailfrom")) <= 5 Then
Powered By Achely's Blog goby = 0
javascript技巧尽在快乐开发Else
.net开发技术文章 If InStr(1, session("emailfrom"), "@", 1) < 2 Then
goby = 0
Else
If InStr(1,session("emailfrom"), ".", 1) < 4 Then
一起娱乐网01716.com goby = 0
快乐开发技术文档 End If
End If
快乐开发技术文档End If
zhangyongjun.com开发网If Len(session("emailto")) <= 5 Then
goby = 0
Else
If InStr(1, session("emailto"), "@", 1) < 2 Then
goby = 0
Else
If InStr(1,session("emailto"), ".", 1) < 4 Then
快乐开发技术文档
goby = 0
一起娱乐网01716.com End If
End If
End If
zhangyongjun.com开发网' Make sure the message is less than 500 characters.
If len(session("message")) >= 500 Then
goby = 0
End If
' If there are errors, then let the user know
' And make him/her correct the data
if goby = 0 then %>
<br><br><br><br><br>
Powered By Achely's Blog
<center>
.net开发技术文章
<img src="images/error.gif" width="322"
height="53" border="0">
Powered By Achely's Blog
</center>
<br>
<%
end if
zhangyongjun.com开发网
Powered By Achely's Blog
' There are no errors. Put the data in the DB
' and send the link to the receiver via email.
If goby = 1 then
快乐开发技术文档
Set Conn = Server.CreateObject("ADODB.Connection")
conn.open"DSN=postal;"
.net开发技术文章zhangyongjun.com开发网
Set rs = Server.CreateObject("ADODB.Recordset")
'We need to insert a record into the database
SQLStmt = "INSERT INTO Postcard (" & _
"passw, postal, nameto, namefrom, " & _
zhangyongjun.com开发网
"emailfrom, emailto, message, data) " & _
"VALUES ("
' We need a random number for our password, so
' use randomize/rnd to make a random number.
randomize()
passw = Int((9999-1)*Rnd + 1)
zhangyongjun.com开发网
SQLStmt = SQLStmt & passw & ",'" & session("postal") & _
"','" & session("nameto") & "','" & _
session("namefrom") & "','" & _
session("emailfrom") & "','" & _
devjoy.cn技术文档
session("emailto") & "','" & _
session("message") & "','" & session("data") & "')"
' Write information to database
一起娱乐网01716.com rs.Open SQLStmt, Conn
javascript技巧尽在快乐开发 ' Now you will see how to use the Free Persits
' E-Mail component
' First, Create the Mail object
Set Mail = Server.CreateObject("Persits.MailSender")
' Put the mail server you are using
Mail.Host = "mail.mailserver.com"
' Send the information of the
' person that is sending the e-mail
一起娱乐网01716.com
Mail.From = session("emailfrom")
zhangyongjun.com开发网 ' Who you're sending the email to.
快乐开发技术文档
Mail.FromName = session("namefrom")
.net开发技术文章 ' Put the email to send to, as well as the name of the person
Mail.AddAddress session("emailto"), session("nameto")
' Subject of the email
Mail.Subject = "Digital PostCard to " & session("nameto")
' Print the body of the email
快乐开发技术文档
enviar = "Let me inform you that " & session("namefrom") & _
一起娱乐网01716.com Chr(13) & Chr(10) & _
"have sent you a digital card. To see " & _
"it follow the link :" & _
Chr(13) & Chr(10) & Chr(13) & Chr(10) & _
zhangyongjun.com开发网 "http://www.???????.com/view.asp?fromn=out&" & _
"ident=" & identifier & _
javascript技巧尽在快乐开发
"&psw=" & passw & " " & Chr(13) & Chr(10) & _
" your card is available till the day " & _
Powered By Achely's Blog
formatDateTime(d,2) & _
.net开发技术文章
Chr(13) & Chr(10) & Chr(13) & Chr(10) & _
Chr(13) & Chr(10) & _
Powered By Achely's Blog
" Thanks"
Mail.Body = enviar
zhangyongjun.com开发网
'Just skip if there are any errors...
Powered By Achely's Blog
On Error resume Next
' This will send the email
Mail.Send
.net开发技术文章
' Display an error message if there was an error
zhangyongjun.com开发网
If Err <> 0 Then %>
.net开发技术文章
<img src="images/error.gif" width="322" height="53"
border="0">
<%
'Comment out this code if you want to see
'the error number
'Response.Write "<br><br>" & "Error found : " & _
Err.description & "<br><br>"
Response.Write "<center><p>SERVER SIDE ERROR, " & _
"contact site webmaster.</p></center>"
goby = 0
zhangyongjun.com开发网
Else
Response.Write "<br><br><br><center><p>POSTCARD WAS SENT " & _
"NO PROBLEMS...<br>"
End if
End if
devjoy.cn技术文档
' I think that you have seen that I use the JavaScript history.back
' and go. I use it so when the user come back he don't
' loose any information already entered into the form.
快乐开发技术文档
%>
<center>
<a href="javascript:history.go('-2')">
<img src="../images/rebuiltbutton.gif" width="60"
height="53" border="0">
</a>
</center>
</strong></small></font>
</body>
</html>
zhangyongjun.com开发网Get the E-Mail free component:http://www.aspemail.com/
Let me explain how to set it up. Put the component wherever you want, I usually put the components I use
in the directory C:\Inetpub\components\. Then register it (after you put it in the directory you want) by
typing:
devjoy.cn技术文档
regsvr32 AspEmail.dll
from the command line. That's all! Remember, the email code won't work unless you register the component!
If you have any questions, please contact me:http://www.4guysfromrolla.com/webtech/joao.shtml