nel senso che tu dividi le email per blocchi di 50 (o quanto previsto dalla variabile "quante".
Vengono inviate tutte le email fino al primo loop quindi le prime 20.
Successivamente non viene inviato nulla. Come se quando refresha la pagina con il response.redirect non si legge più il contenuto della variabile "messaggio" restituendo quindi un valore nullo e applicando quindi lo stop previsto dall'istruzione
If messaggio <> "" Then
Session("messaggio") = messaggio
Else
Response.End
End If
Sotto ti elenco quanto scritto:
<%@LANGUAGE = VBScript%>
<%
' Recupero tutte le variabili per l'applicazione
Dim messaggio, pag, cn, rs, quante, tot, i, email
' Recupero il corpo della mail
messaggio = request.form("corpoemail")
' 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 "driver={Microsoft Access Driver (*.mdb)};dbq="& server.MapPath("supporter.mdb")
' Lancio la query
rs.Open "SELECT email FROM users", cn, 1
' Predispongo la paginazione
quante = 20
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 = "
[email protected]"
email.To = rs("email")
email.Subject = "Newsletter del " & Date()
email.HtmlBody = ""&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)
%>