Questo è un codice che ho usato recentemente,
ovviamente adattalo ai tuoi scopi ma credo sia un buon punto di partenza.
In pratica controlla un flag nel database (campo mail_inviata) per prendere i
primi 50 utenti a cui non è stata inviata la mail e gli manda le mail.
Se richiami la pagina asp ogni cinque minuti, mandi tutte le mail in blocchi di 100.
Se hai il limite di 300 mail l'ora, programmi sei chiamate, poi fai attendere un'ora e
fai le altre chiamate e cosi via.
La pianificazione delle chiamate della pagina la puoi fare con webcron in modo
da automatizzare tutta la procedura.
luca
Codice PHP:
Set rs = Server.CreateObject("ADODB.Recordset")
rs.ActiveConnection = str_conn 'stringa di connessione al database
rs.Source = "SELECT TOP 50 * FROM utenti WHERE mail_inviata = 'No' and email <> '' "
rs.Open()
if not (rs.Eof and rs.BoF) then
Set rsUpd = Server.CreateObject("ADODB.Recordset")
rsUpd.ActiveConnection = str_conn
invioDa = "tua_email@tuamail.com"
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" 'da cambiare con il server del tuo provider
Flds(cdoSMTPServerPort) = 25
Flds(cdoSMTPAuthenticate) = cdoAnonymous ' 0
Flds.Update
email=0
do while not rs.eof
if rs("email") <> "" then 'controllo presenza email nel datanase per evitare blocchi dello script
With iMsg
Set .Configuration = iConf
.To = rs("email")
.From = invioDa
.Sender = invioDa
.Subject = "Titolo email"
.TextBody = "corpo email""
.Send
End With
rsUpd.source = "update utenti set mail_inviata = 'Si' where id = " & rs("id") & ""
rsUpd.open()
email = email + 1
end if 'fine controllo esistenza email nel database
rs.movenext
loop
rs.close
Set rs = Nothing
response.write("Sono state inviate " & email &" con successo")
else
response.write("Nessuna email inviata")
end if