questo è il codice che ho utilizzato io, vedi se riesci ad adattarlo alle tue esigenze
Codice PHP:
Set rs = Server.CreateObject("ADODB.Recordset")
rs.ActiveConnection = MM_conn_STRING
Set rsUpd = Server.CreateObject("ADODB.Recordset")
rsUpd.ActiveConnection = MM_conn_STRING
'estraggo i primi 100 utenti ai quali non ho ancora inviato la email
rs.Source = "SELECT TOP 100 * FROM utenti WHERE mail_inviata = 'No' "
rs.Open()
'se non ci sono utenti con il flag mail_inviata = No significa che ho inviato tutte le mail
e rimando alla pagina di conferma
if (rs.Eof and rs.BoF) then
'imposto tutti gli utenti con il flag a No per il prossimo invio
rsUpd.source = "update utenti set mail_inviata = 'No' "
rsUpd.open()
rs.close
set rs = nothing
response.redirect("conferma_invio_email.asp")
end if
'il recordset non è vuoto, ci sono ancora email da inviare
invioDa = "email@email.it"
DIM iMsg, Flds, iConf
Set iMsg = CreateObject("CDO.Message")
Set iConf = CreateObject("CDO.Configuration")
Set Flds = iConf.Fields
Flds(cdoSendUsingMethod) = cdoSendUsingPort
Flds(cdoSMTPServer) = "smtp.aruba.it"
Flds(cdoSMTPServerPort) = 25
Flds(cdoSMTPAuthenticate) = cdoAnonymous ' 0
Flds.Update
do while not rs.eof
if rs("email") <> "" then 'controllo presenza email nel datanase
With iMsg
Set .Configuration = iConf
.To = replace(rs("email"),",",".")
.From = "email@sito.it"
.Sender = "email@sito.it"
.Subject = "Oggetto email"
.TextBody = "Corpo email"
.Send
End With
'contatore delle email inviate
session(mail_inviate) = session(mail_inviate) = +1
end if 'fine controllo esistenza email nel database
rsUpd.source = "update utenti set mail_inviata = 'Si' where id = " & rs("id") & ""
rsUpd.open()
rs.movenext
loop
rs.close
Set rs = Nothing
'rimando a questa stessa pagina per l'invio di un'altra tranche di 100 email
response.Redirect("invio_email.asp")
ti ho commentato il codice in modo che dovresti riuscire a capirlo senza grossi problemi.
Il concetto è questo:
nel database utenti c'è un flag che indica se è stata inviata la mail.
All'inizio tutti sono con il flag impostato a No.
Prendo i primi 100 utenti con il flag a No, verifico che il campo email sia valido, invio la mail, imposto il flag mail_inviata su Si
Ricarico la pagina, prendo altri 100 utenti e cosi via fino a che il recordset è vuoto,
per cui tutti gli utenti hanno il flag su Si e pertanto ho inviato a tutti la mia email,
imposto a tutti lo stesso flag su No per essere pronto al prossimo invio e quindi rimando l'utente alla pagina di conferma dell'invio delle mail.
E' presente una variabile di sessione delle email inviate session("email_inviate")
che può essere letto nella pagina di conferma invio delle mail per indicare il numero di mail inviate e capire a naso se tutto è andato bene.
Spero ti sia chiaro, cmq sono qui per eventuali chiarimenti.
ciao
luca