Articoli Referenze Script FAQ Downloads Menu Javascript Ricette Cocktail Corsi online Registrazione domini Area Aziende



Inviare una Newsletter con paginazione in ASP

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

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


L'invio di una Newsletter in ASP comporta non pochi problemi, specialmente per siti con un database di utenti ricco ed a maggior ragione se il database in questione è MS Access.

Vediamo cosa succede quando inviamo una Newsletter: ci connettiamo al database, estraiamo le centinaia o migliaia di record presenti, li memorizziamo nel campo nascosto del CDOSYS ed inviamo un'unica mail.

Nascono tre problemi regolandosi in questo modo:
  1. il database può andare in crach;
  2. lo script può andare in timeout;
  3. le email non arrivano a destinazione perchè si imballa il server SMTP.
Dicono dalle mie parti: "hai detto niente"!

L'unico sistema professionale per utilizzare ASP e, volendo, anche un database MS Access ed essere sicuri (mai al 100%) di non incorrere in nessuno dei tre problemi discussi in precedenza, è quello di utilizzare il sistema della paginazione con ADO nell'estrazione degli indirizzi email degli utenti e per l'invio della mail.

Vediamo un semplice esempio. Si crei il file newsletter.asp e lo si corredi del seguente codice, corredato da opportuni commenti:
<%@LANGUAGE = VBScript%>
<%
    ' Recupero tutte le variabili per l'applicazione
    Dim messaggio, pag, cn, rs, quante, tot, i, email

    ' Recupero il corpo della mail
    messaggio = "Corpo della mail da recuperare da un form..."

    ' Recupero e controllo il numero di pagina corrente
    pag = Request.QueryString("pag")
    If IsNumeric(pag) = False Or pag < 1 Then pag = 1

    ' Memorizzo il messaggio in una sessione per disporne
    If messaggio <> "" Then
        Session("messaggio") = messaggio
    Else
        Response.End
    End If

    ' Mi connetto al database
    Set cn = Server.CreateObject("ADODB.Connection")
    Set rs = Server.CreateObject("ADODB.Recordset")
    cn.Open ' QUI LA STRINGA DI CONNESSIONE

    ' Lancio la query
    rs.Open "SELECT email FROM newsletter", cn, 1

    ' Predispongo la paginazione
    quante = 50
    rs.CacheSize = quante
    rs.PageSize = quante
    rs.AbsolutePage = pag
    tot = CInt(rs.PageCount)
    i = 0

    ' Invio le mail una alla volta a blocchi da 50
    Do While Not rs.EOF
        Set email = Server.CreateObject("CDO.Message")
        email.From = "news@miosito.ext"
        email.To = rs("email")
        email.Subject = "Newsletter del " & Date()
        email.TextBody = Session("messaggio")
        email.Send
        Set email = Nothing
        i = i + 1
        If i = quante Then Exit Do
        rs.MoveNext
    Loop

    ' Un po di pulizia
    rs.Close
    Set rs = Nothing
    cn.Close
    Set cn = Nothing

    ' Mi sposto al blocco della pagina successiva
    If CInt(pag) < CInt(tot) Then
        Response.redirect "newsletter.asp?pag=" & CInt(pag) + 1
    End If

    ' Monitorizzo il numero di pagina corrente
    Response.write ("Pagina corrente: " & pag)
%>
I commenti di per se sono abbastanza esplicativi relativamente al sistema immaginato, ma per chiarezza ritengo opportuno esplodere alcuni passaggi e capirli meglio.

Il file newsletter.asp si limita ad eseguire l'invio della mail, ma la variabile messaggio in realtà dovrà essere valorizzata dai dati recuperati da una textarea di un form HTML, residente evidentemente in un altro file ASP.

Memorizziamo il messaggio in una variabile di sessione allo scopo di non perderne il valore man mano che lo script si sposterà automaticamente alla pagina successiva.

Utilizziamo il ciclo Do al posto del While allo scopo di poter disporre del comando di interruzione Exit.

Lo scopo dello script è quello di risparmiare le risorse del sistema server in uso, oltre a quello di accertarsi di raggiungere il massimo numero di utenti possibile: il successo di questo proposito è dato dal fatto che lo script appena presentato invia una mail alla volta a blocchi di 50 (quanto stabilito nella variabile quante e si consiglia di non aumentare il numero) dopo di che ci si sposterà alla pagina successiva dove viene inviato un nuovo blocco di email, fino alla fine dei record presenti nel database.

© 2008 ASP Center di Luca Ruggiero - P. IVA 05564851219 - Utenti online: 28 - Disclaimer | 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