Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    2,630

    Invio email a blocchi di 300 o meno

    Carissimi,
    utilizzo questo script per invio multiplo di e-mail ai miei utenti che sono + di 3000
    Con un invio unico purtroppo si blocca e non li invia a tutti(sono su aruba), come posso impostare che invii email a blocchi di 300 così da inviarle tutte?
    Grazie 1000
    Gino
    codice:
    server.scriptTimeOut = 36000000 ' secondi
    
    dim dove 
    dove="driver={Microsoft Access Driver (*.mdb)};dbq="& server.mappath("../mdb-database/user.mdb") 
    Set rs=Server.CreateObject("ADODB.recordset") 
    dim stmsql 
    stmsql="Select * FROM utenti" 
    rs.Open stmsql,dove  
    do while not rs.EOF 
    Set objMail = CreateObject("CDO.Message")
    
    Set objConfig = Server.CreateObject("CDO.Configuration")
    
    With objConfig
         
    .Fields("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.miosito.it" 
    
    .Fields("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
    
    .Fields("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
    
    .Fields("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60
    
    .Fields.Update
    
    End With
    
      danome="MIOSITO" 
      damail="<info@miosito.it>"
      dachi=chr(34) & danome & chr(34) & damail
      nomesocio = rs.Fields("Nome")
      cognomesocio = rs.Fields("Cognome")
      emailsocio = rs.Fields("email")
      achi= chr(34) & nomesocio & VbCrLf & cognomesocio & chr(34) & emailsocio
      oggetto= request.Form("oggetto")
      testo= request.Form("messaggio")
    
    
    Set objMail.Configuration = objConfig
    
    objMail.From = dachi
    
    objMail.To = achi 
    
    objMail.Subject = oggetto
    
    objMail.Fields("urn:schemas:httpmail:importance").Value = 2
    
    objMail.Fields.Update()
    
    objMail.TEXTBody = testo
    
    objMail.Send()
    
    Set objMail = Nothing
    
    rs.MoveNext 
    loop 
    rs.close 
    Set rs = nothing

  2. #2
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Ma.... forse basta una ricerca?
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    2,630
    ciao andrea,
    avevo fatto una ricerca e relative prove ma non ci sono riuscito, puoi aiutarmi?
    Grazie
    G.

  4. #4
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Originariamente inviato da djjunior
    ciao andrea,
    avevo fatto una ricerca e relative prove ma non ci sono riuscito, puoi aiutarmi?
    Grazie
    G.
    Strano che sul forum non ci sia qualcosa di funzionante essendo una problematica molto sentita, comunque inizia col postare le prove e capire dove sei arrivato e dove ti sei bloccato.
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  5. #5
    Utente di HTML.it L'avatar di lucalicc
    Registrato dal
    Sep 2002
    Messaggi
    6,926
    guarda qui
    luca
    www.intheweb.it - Internet solutions

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    2,630
    grazie lucalicc
    ho visto che era un tuo post, potresti gentilmente postarmi il codice che tu hai utilizzato che provo ad adattarlo al mio?
    Grazie 1000
    G

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    2,630
    lucalicc era possibile visionare il tuo codice per poterlo adattare al mio?
    Grazie
    G.

  8. #8
    Utente di HTML.it L'avatar di lucalicc
    Registrato dal
    Sep 2002
    Messaggi
    6,926
    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.BoFthen 

    '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 è vuotoci sono ancora email da inviare
    invioDa 
    =  "email@email.it"
    DIM iMsgFldsiConf
    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
    www.intheweb.it - Internet solutions

  9. #9
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    2,630
    Grazie 1000 Lucalicc,
    questo script va bene per l'invio a TUTTE le mail presenti nel db e fino a qui tutto bene, solo che il mio scopo è ben altro, cioè implementare questo script a questo punto al tuo e non saprei proprio come farlo:
    codice:
    <%
    Set Conn = Server.CreateObject("ADODB.Connection")
    Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & server.MapPath("../../mdb-database/user.mdb")
    sql = "SELECT * FROM utenti "
    if request.querystring("categoria") = "001" then
    dat = "[001] <> 'SI' "
    end if
    if request.querystring("categoria") = "002" then
    dat = "[002] <> 'SI' "
    end if
    if request.querystring("categoria") = "003" then
    dat = "[003] <> 'SI' "
    end if
    if request.querystring("categoria") = "004" then
    dat = "[004] <> 'SI' "
    end if
    if request.querystring("categoria") = "005" then
    dat = "[005] <> 'SI' "
    end if
    if request.querystring("categoria") = "006" then
    dat = "[006] <> 'SI' "
    end if
    if request.querystring("categoria") = "007" then
    dat = "[007] <> 'SI' "
    end if
    if request.querystring("categoria") = "008" then
    dat = "[008] <> 'SI' "
    end if
    if request.querystring("categoria") = "009" then
    dat = "[009] <> 'SI' "
    end if
    if request.querystring("categoria") = "010" then
    dat = "[010] <> 'SI' "
    end if
    sql = sql &" WHERE "& dat &" order by id "
    Set rs = Server.CreateObject("ADODB.Recordset")
    rs.Open sql, Conn, 3, 3 
    %>
    <%
    If rs.EOF Then
    Else 
    lista = ""
    %>
    
    <%
    rs.MoveFirst
    	Do Until rs.EOF
    
    lista=lista&rs.fields("email")&";"
    
    		rs.MoveNext 
    	Loop
    %>
    <%
    end if
    %>
    In pratica questo script funziona (come avrai capito) recuperando dal querystring il numero di categoria, si accerta che sia in SI e deve estrapolarmi le e-mail di utenti che hanno come categoria il numero recuperato e a queste e-mail devo mandare il messaggio non ha tutto, quindi il numero di e-mail può variare, potresti aiutare ad implementarlo al tuo?
    Grazie 1000
    G.

  10. #10
    ma
    questo
    codice:
    ...
    sql = "SELECT * FROM utenti "
    if request.querystring("categoria") = "001" then
    dat = "[001] <> 'SI' "
    end if
    if request.querystring("categoria") = "002" then
    dat = "[002] <> 'SI' "
    end if
    if request.querystring("categoria") = "003" then
    dat = "[003] <> 'SI' "
    end if
    if request.querystring("categoria") = "004" then
    dat = "[004] <> 'SI' "
    end if
    if request.querystring("categoria") = "005" then
    dat = "[005] <> 'SI' "
    end if
    if request.querystring("categoria") = "006" then
    dat = "[006] <> 'SI' "
    end if
    if request.querystring("categoria") = "007" then
    dat = "[007] <> 'SI' "
    end if
    if request.querystring("categoria") = "008" then
    dat = "[008] <> 'SI' "
    end if
    if request.querystring("categoria") = "009" then
    dat = "[009] <> 'SI' "
    end if
    if request.querystring("categoria") = "010" then
    dat = "[010] <> 'SI' "
    end if
    sql = sql &" WHERE "& dat &" order by id "
    ...
    non puoi farlo diventare
    cosi?
    codice:
    ...
    categoria=request.querystring("categoria")
    sql = "SELECT * FROM utenti WHERE ["&categoria&"] <> 'SI' order by id "
    ...
    recuperi i campi per generare ed inviare l'email e poi le invii

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.