Articoli Referenze Script FAQ Downloads ASP E-Commerce con ASP Menu Javascript Area Aziende Cocktail Registrazione domini



Inviare cartoline elettroniche con ASP

Home + Articoli + Email + Articolo # 164
Autore: Luca Ruggiero

Concesso in esclusiva a Mr.Webmaster. Vietata la riproduzione.


Uno dei servizi Web più diffusi nel mondo dell'intrattenimento e della comunicazione nella rete delle reti è l'invio ad amici e spasimanti di cartoline elettroniche, dette anche e-cards, ovvero una riproduzione (almeno dal punto di vista funzionale) di una normale cartolina cartacea, composta da una fotografia e da un messaggio associato.

Mentre nelle normali cartoline cartacee si specifica l'indirizzo di casa del destinatario, in una cartolina elettronica è sufficiente specificare l'indirizzo email del destinatario.

La mail che verrà inoltrata al destinatario riporterà un link verso il nostro sito in cui verrà materialmente mostrata la cartolina ed l messaggio: dati ovviamente contenuti su di un database.

Vediamo quindi come sviluppare un servizio di invio di cartoline elettroniche utilizzando ASP.

Struttura dell'applicazione

Un'applicazione per l'invio di cartoline elettroniche può essere sviluppata in maniera più o meno complessa, mettendo a disposizione più o meno strumenti ed utility.

Un'applicazione complessa potrebbe prevedere la registrazione di un utente chiedendogli più o meno dati, anche se, in realtà, basterebbe il nome, l'indirizzo email ed una password. A questo punto sarebbe necessario prevedere un login ed un logout.

Altre varie utility per un'applicazione del genere si concentrano per lo più sulla possibilità offerta al mittente di specificare colori di sfondo e del testo, il font, la dimensione del testo, etc... Inoltre si potrebbero prevedere una serie di categorie in cui indicizzare a tema le varie cartoline (amore, amicizia, divertenti, etc...).

La nostra applicazione è di dimensioni più modesta, non prevede la registrazione degli utenti ne le categorie in cui inserire più o meno cartoline; non prevede stilizzazione del testo del messaggio o altre utility particolari, ma nonostante questo (con qualche ritocco stilistico) è già pronta per essere messa in produzione.

Allo scopo utilizzeremo una serie di file ed una cartella in cui inserire le immagini. Create quindi sul vostro server Web personale la cartella cartoline ed al suo interno inserite la cartella immagini in cui inserirete almeno due foto con estensione .jpg.

Di seguito l'elenco dei file che utilizzeremo con relativa spiegazione:
  • database.mdb - è il file MS Access che utilizzeremo come database; ne esamineremo la struttura più avanti;
  • config.asp - è il file di configurazione dell'applicazione in cui inseriremo alcune intestazioni comuni a tutti i file ASP dell'applicazione e la stringa di connessione al database;
  • index.asp - è il file iniziale dell'applicazione; il suo scopo è quello di mostrare tutte le cartoline e di permettere di cliccarci per sceglierne una; al click viene effettuato il reload della pagina con una querystring associata a questo punto verrà mostrata la cartolina scelta ed il form in cui inserire i dati richiesti ed il messaggio;
  • invia.asp - il suo nome è abbastanza esplicativo: verifica la correttezza dei dati inseriti, effettua la registrazione sul database ed invia la mail all'indirizzo del destinatario;
  • leggi.asp - è il file che mostra la cartolina: il destinatario riceverà via email il link completo e sarà sufficiente cliccare o copiarlo nella barra degli indirizzi del proprio browser.
Struttura del database

All'interno della cartella cartoline che abbiamo creato sul nostro server Web personale, creiamo adesso il file MS Access database.mdb che conterrà la sola tabella cartoline composta dai seguenti campi:
  • id - Contatore
  • immagine - Numerico
  • nome_mittente - Testo (20)
  • email_mittente - Testo (50)
  • nome_destinatario - Testo (20)
  • email_destinatario - Testo (50)
  • messaggio - Memo
I nomi dei campi sono abbastanza esplicativi in merito alla funzione che hanno da svolgere.

Dedico un'unica nota al campi immagine che è numerico: le foto devono essere nominate come 1.jpg, 2.jpg e cosi via; in detto campo verrà inserito il numero corrispondente al nome dell'immagine e la costruzione del percorso dell'immagine a video verrà costruito dinamicamente.

Il file di configurazione: config.asp

All'interno della cartella cartoline inseriremo tutti i file ASP dell'applicazione; iniziamo dal file di configurazione (config.asp) che includeremo con le SSI in tutti i file ASP di visualizzazione; Ecco il codice:
<%
    Option Explicit
    On Error Resume Next
    Response.Buffer = True
    Dim str_cn
    str_cn = "driver={Microsoft Access Driver (*.mdb)};dbq=" _
             & Server.MapPath("database.mdb")
%>
Attenzione: trattandosi di un file che verrà incluso con le SSI in altri file ASP, non dovremo specificare la definizione del linguaggio di scripting utilizzato.

Come già detto in precedenza,lo scopo di questo file è di definire alcune intestazioni comuni a tutti i file ASP dell'applicazione e la stringa di connessione al database: in questo modo avremo una matrice unica da modificare in caso cambiassimo il percorso del file sul server oppure se volessimo rinominarlo (scelta da adottare).

Mostrare le cartoline ed il form di invio: index.asp

Come già accennato in precedenza, il file iniziale dell'applicazione, index.asp ha il compito di mostrare le tutte cartoline a disposizione; ad ogni cartolina è associato un link con una querystring che riporta l'utente alla pagina stessa; il valore della querystring è il nome del file immagine associato senza l'estensione .jpg.

Il codice è molto semplice e somiglia a quello di un file HTML statico se non per la condizione impostata secondo la quale: se la querystring non è definita vengono mostrate tutte le cartoline, altrimenti viene mostrata la cartolina scelta ed il modulo d'invio:
<%@LANGUAGE = VBScript%>
<!--#include file="config.asp"-->
<%
    Dim id
    id = Request.QueryString("id")
%>
<html>
<head>
<title>Inviare cartoline elettroniche con ASP</title>
</head>
<body>

<h1 align="center">Inviare cartoline elettroniche con ASP</h1>

<p align="center">

<%If id = "" Then%>

<a href="index.asp?id=1"><img src="immagini/1.jpg" border="0"></a>
<a href="index.asp?id=2"><img src="immagini/2.jpg" border="0"></a>
<a href="index.asp?id=3"><img src="immagini/3.jpg" border="0"></a>
<br><br>
<a href="index.asp?id=4"><img src="immagini/4.jpg" border="0"></a>
<a href="index.asp?id=5"><img src="immagini/5.jpg" border="0"></a>
<a href="index.asp?id=6"><img src="immagini/6.jpg" border="0"></a>
<br><br>
<a href="index.asp?id=7"><img src="immagini/7.jpg" border="0"></a>
<a href="index.asp?id=8"><img src="immagini/8.jpg" border="0"></a>
<a href="index.asp?id=9"><img src="immagini/9.jpg" border="0"></a>
<br><br>

<%Else%>

Hai scelto la cartolina # <%=id%><br><br>
<img src="immagini/<%=id%>.jpg"><br><br>
<form method="post" action="invia.asp">
<input type="hidden" name="immagine" value="<%=id%>">
Nome mittente<br>
<input type="text" name="nome_mittente" maxlength="20"><br>
Email mittente<br>
<input type="text" name="email_mittente" maxlength="50"><br>
Nome destinatario<br>
<input type="text" name="nome_destinatario" maxlength="20"><br>
Email destinatario<br>
<input type="text" name="email_destinatario" maxlength="50"><br><br>
Messaggio<br>
<textarea name="messaggio" rows="5" cols="30"></textarea><br><br>
<input type="submit" value="   Invia   ">
</form>
<a href="index.asp">Cambia Cartolina</a>

<%End If%>

</p>

</body>
</html>
Attenzione: il campo immagine viene valorizzato dinamicamente da una casella di testo nascosta a cui viene passato il valore della querystring.

Potete provare a dinamizzare la lettura delle immagini utilizzando il File System Object e leggere le varie immagini all'interno dell'omonima cartella, stamparle a video e costruire dinamicamente il link.

Provate a lanciare il file index.asp all'indirizzo
http://localhost/cartoline/index.asp
Naturalmente potete prevedere un controllo sui campi con Javascript lato client, per quanto il file invia.asp (spiegato a breve) già effettua un potente controllo lato server.

Registrazione ed invio della cartolina: invia.asp

Siamo arrivati alla parte più complicata nonchè cuore dello script, il file invia.asp il cui scopo è quello di:
  • recuperare i dati dal form;
  • verificare la correttezza dei dati inseriti;
  • a condizioni soddisfatte effettua la registrazione sul database ed invia la mail al destinatario.
Molto più semplice a dirsi che a farsi, dato che ci sono diverse operazioni di controllo che vanno effettuate per lo mezzo (come direbbe il nostro Sommo Poeta).

Il codice, riportato di seguito, è abbondantemente commentato e spiega in maniera esaustiva tutte le fasi salienti:
<%@LANGUAGE = VBScript%>
<!--#include file="config.asp"-->
<%
    ' SPECIFICA L'INDIRIZZO DEL TUO SITO ED IL PERCORSO
    ' DEL FILE leggi.asp PER LA VISUALIZZAZIONE DELLA CARTOLINA
    ' DA PARTE DEL DESTINATARIO
    Dim sito
    sito = "http://www.tuosito.ext/cartoline/leggi.asp?id="

    ' SPECIFICA L'INDIRIZZO EMAIL DEL TUO SITO DA CUI VERRA'
    ' INVIATA LA CARTOLINA
    Dim tua_mail
    tua_mail = "cartoline@tuosito.ext"
%>
<html>
<head>
<title>Inviare cartoline elettroniche con ASP</title>
</head>
<body>

<p align="center">
<%
' DICHIARO LE VARIABILI CHE RECUPERO DAL FORM
Dim immagine
Dim nome_mittente
Dim email_mittente
Dim nome_destinatario
Dim email_destinatario
Dim messaggio, messaggio2

' RECUPERO MATERIALMENTE LE VARIABILI DAL FORM
immagine = Request.Form("immagine")
nome_mittente = Request.Form("nome_mittente")
email_mittente = Request.Form("email_mittente")
nome_destinatario = Request.Form("nome_destinatario")
email_destinatario = Request.Form("email_destinatario")
messaggio = Request.Form("messaggio")
messaggio2 = Replace(Server.HTMLEncode(messaggio), vbCrLf, "<br>")

' ESPRESSIONE REGOLARE PER VERIFICARE L'INDIRIZZO EMAIL
Dim re, p
Set re = New RegExp
p = ""
p = p & "^[\w\-\.]*[\w\.]\@[\w\.]"
p = p & "*[\w\-\.]+[\w\-]+[\w]\.+[\w]+[\w $]"
re.Pattern = p

' VERIFICO LA VALIDITA' DEI CAMPI E, A CONDIZIONI
' SODDISFATTE, EFFETTUO LA REGISTRAZIONE ED INVIO LA MAIL
If IsNumeric(immagine) = False Or immagine < 1 Then
    Response.Write "Specificare l'immagine"
ElseIf Len(Trim(nome_mittente)) = 0 Then
    Response.Write "Inserisci il tuo nome"
ElseIf re.Test(email_mittente) = False Then
    Response.Write "Specifica il tuo indirizzo email"
ElseIf Len(Trim(nome_destinatario)) = 0 Then
    Response.Write "Inserisci il nome del destinatario"
ElseIf re.Test(email_destinatario) = False Then
    Response.Write "Specifica l'indirizzo email del destinatario"
ElseIf Len(Trim(messaggio)) = 0 Then
    Response.Write "Inserisci il messaggio"
Else
    ' EFFETTUO LA REGISTRAZIONE
    Dim cn, rs
    Set cn = Server.CreateObject("ADODB.Connection")
    Set rs = Server.CreateObject("ADODB.Recordset")
    cn.Open str_cn
    rs.Open "cartoline", cn, 3, 3
    rs.AddNew
    rs("immagine") = immagine
    rs("nome_mittente") = Server.HTMLEncode(nome_mittente)
    rs("email_mittente") = email_mittente
    rs("nome_destinatario") = Server.HTMLEncode(nome_destinatario)
    rs("email_destinatario") = email_destinatario
    rs("messaggio") = messaggio2
    rs.Update
    rs.Close

    ' RECUPERO L'ID DELLA CARTOLINA CORRENTE
    Dim SQL, ID, mostra_id
    SQL = "SELECT TOP 1 id FROM cartoline WHERE " _
        & "email_mittente = '" & email_mittente & "' " _
        & "ORDER BY id DESC"
    Set mostra_id = cn.Execute(SQL)
    ID = mostra_id("id")
    Set mostra_id = Nothing

    cn.Close
    Set rs = Nothing
    Set cn = Nothing

    ' COSTRUISCO IL CORPO DELLA MAIL
    Dim corpo
    corpo = ""
    corpo = corpo & "Ciao " & nome_destinatario & ", "
    corpo = corpo & nome_mittente & " ti ha mandato questa "
    corpo = corpo & "cartolina elettronica " & vbCrLf & vbCrLf
    corpo = corpo & sito & ID

    ' INVIO LA MAIL AL DESTINATARIO
    Dim email
    Set email = Server.CreateObject("CDO.Message")
    With email
    .To = email_destinatario
    .From = tua_mail
    .Subject = nome_mittente & " ti ha inviato una cartolina"
    .TextBody = corpo
    .Send
    End With
    Set email = Nothing

    Response.Write "Cartolina inviata con successo!"
End If

' SVUOTO L'OGGETTO PER IL CONTROLLO DELL'INDIRIZZO EMAIL
Set re = Nothing
%>
    <br><br>
    <a href="javascript:window.history.back()">Indietro</a>
</p>

</body>
</html>
Lettura della singola cartolina: leggi.asp

Siamo arrivati alla fase conclusiva di questo semplice e divertente script, la lettura della cartolina. Si tratta di nulla di più e nulla di meno di una query parametrizzata (da una querystring) sul database con relativa stampa a video dei dati.

Il codice è semplicissimo e non ha bisogno di commenti per chiunque abbia anche solo un minimo di dimestichezza con ASP:
<%@LANGUAGE = VBScript%>
<!--#include file="config.asp"-->
<%
    Dim id
    id = Request.QueryString("id")
    If IsNumeric(id) = False Then
        Response.End
    End If
%>
<html>
<head>
<title>Inviare cartoline elettroniche con ASP</title>
</head>
<body>

<%
    Dim cn, rs
    Set cn = Server.CreateObject("ADODB.Connection")
    Set rs = Server.CreateObject("ADODB.Recordset")
    cn.Open str_cn
    rs.Open "SELECT * FROM cartoline WHERE id = " & id, cn, 1
    If rs.EOF Then
        Response.Write "Nessuna cartolina"
    Else
%>
<h1 align="center">
A: <%=rs("nome_destinatario")%> -
Da: <a href="mailto:<%=rs("email_mittente")%>">
<%=rs("nome_mittente")%></a>
</h1>
<table align="center" width="350">
<tr><td>
<p align="center"><img src="immagini/<%=rs("immagine")%>.jpg"></p>
<p style="background: #FFFFCC;"><%=rs("messaggio")%></p>
<p align="center"></p>
</td></tr>
</table>
<p align="center"><a href="index.asp">Invia una cartolina</a></p>
<%
    End If
    rs.Close
    cn.Close
    Set rs = Nothing
    Set cn = Nothing
%>

</body>
</html>
Conclusioni e spunti

Come già detto nella fase introduttiva di questo ricco Articolo, questo script, per quanto non complesso e non particolarmente ricco di utility, è funzionale al punto giusto per essere messo in produzione.

Potete tranquillamente stilizzarlo a vostro piacimento ed arricchirlo di utility e features.

C'è una sola operazione da compiere di vitale importanza: operazione che volutamente non ho compiuto per dare a voi lo spunto per mettere alla prova le vostre competenze in ASP.

E' necessario, in qualsiasi modo, ampliare il database ed aggiungere il campo password in modo da impedire la visualizzazione di cartoline inviate ad altri utenti.

La prima cartolina inviata avrà ID = 1 e sarà visualizzabile ad un indirizzo del genere:
http://www.tuosito.ext/cartoline/leggi.asp?id=1
Inserendo il campo password l'indirizzo finale, ricevuto via email da destinatario, sarà qualcosa del genere:
http://www.tuosito.ext/cartoline/leggi.asp?id=1&pass=MiaPassword
Scegliete voi il sistema di generazione della password che può essere lasciata a discrezione dell'utente aggiungendo una casella di testo al modulo, oppure (scelta consigliata) potete generare casualmente una password stesso con ASP (VBScript).

Ricordate di modificare di conseguenza l'applicazione in tutti i punti in cui è necessario per ospitare questa importante opzione aggiuntiva.

© 2008 ASP Center di Luca Ruggiero - P. IVA 05564851219 - Disclaimer | Privacy | Pubblicità | Supportaci | Staff | Contatti
  Appunti PHP | Giornale Webmaster | Mr.Webmaster | Download | DevSpy.com | ASPCode.it | ClaudioGarau.it | Webmaster Facile | Come Faccio | AlVerde.net | CodiceFacile.it | I Programmatori | By Luciani | VoiceXML Italian User Group | Giochi | Extro Web Site | Morpheus Web | AG Web Solutions | Net-Free | PC Sicuro | PC Self | Tutorial Web | Dablones