invio newsletter a 50 indirizzi per volta

Discussione in 'Classic ASP' iniziata da aurora.solari, 27 Aprile 2010.

  1. aurora.solari

    aurora.solari Nuovo Utente

    Registrato:
    23 Ottobre 2009
    Messaggi:
    21
    Mi Piace Ricevuti:
    0
    Punteggio:
    0
    buongiorno a tutti!
    ho creato una pagina asp per l'invio di una newsletter agli indirizzi di un database.
    la mailing list ha circa 1200 indirizzi e immagino che non riuscirò ad inviare la mail a tutti allo stesso momento.
    vorrei quindi inviarla a 50indirizzi per volta con una pausa tra un invio e l'altro..

    riporto qui di seguito la mia pagina asp:

    <%@ Language=VBScript %>

    <%
    'Mi collego al db ed estraggo gli indirizzi email
    Dim rs, conn, sql
    Set rs = Server.CreateObject("ADODB.Recordset")
    conn = "driver={Microsoft Access Driver (*.mdb)};dbq="& server.MapPath("/mdb-database/db1.mdb")
    sql = "SELECT Email FROM tabella"
    rs.Open sql, conn

    'Inserisco dentro la variabile bcc tutti i destinatari
    x = 0
    do until rs.eof
    x = x + 1
    if x = 1 then
    bcc = rs("email")
    else
    bcc = bcc & "; " & rs("email")
    end if
    rs.moveNext
    loop
    rs.close
    Set rs = Nothing

    Dim iMsg
    Dim iConf
    Dim Flds
    set iMsg = CreateObject("CDO.Message")
    set iConf = CreateObject("CDO.Configuration")
    Set Flds = iConf.Fields
    Flds("http://schemas.microsoft.com/cdo/configuration/urlgetlatestversion") = True
    Flds.Update

    With iMsg

    Set .Configuration = iConf

    .CreateMHTMLBody "http://www.miosito.it/Newsletter.html"

    .To = "miamail@xxx.it"

    .From = "miamail@xxx.it"
    .BCC = bcc
    .Subject = "Newsletter"
    .Send
    End With

    %>
    <title>Newsletter</title>
    pagina html inviata

    ho trovato uno script che manderebbe 50messaggi per volta ma nn so dove inserirlo nel mio codice.
    qualcuno può aiutarmi?
     
  2. Paolo69

    Paolo69 Moderatore Membro dello Staff MOD

    Registrato:
    18 Febbraio 2010
    Messaggi:
    461
    Mi Piace Ricevuti:
    11
    Punteggio:
    18
    Sesso:
    Maschio
    Occupazione:
    Administrator
    Località:
    Italy
    Home Page:
    ...non ho mai fatto un sistema del genere, domani ci sbircio anch'io.
     
  3. Paolo69

    Paolo69 Moderatore Membro dello Staff MOD

    Registrato:
    18 Febbraio 2010
    Messaggi:
    461
    Mi Piace Ricevuti:
    11
    Punteggio:
    18
    Sesso:
    Maschio
    Occupazione:
    Administrator
    Località:
    Italy
    Home Page:
    lo script che hai trovato e quello indicato nel post?
     
  4. aurora.solari

    aurora.solari Nuovo Utente

    Registrato:
    23 Ottobre 2009
    Messaggi:
    21
    Mi Piace Ricevuti:
    0
    Punteggio:
    0
    no paolo. lo script che ho riportato è quello che uso per inviare la newsletter a tutti gli indirizzi insieme.

    per mandarne 50 alla volta ho trovato questo:

    <%@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)
    %>

    così com'è nn funziona, probabilmente anche perchè io nn devo mandare un messaggio ma una pagina html come ho descritto nel primo post
     
  5. Paolo69

    Paolo69 Moderatore Membro dello Staff MOD

    Registrato:
    18 Febbraio 2010
    Messaggi:
    461
    Mi Piace Ricevuti:
    11
    Punteggio:
    18
    Sesso:
    Maschio
    Occupazione:
    Administrator
    Località:
    Italy
    Home Page:
    ok, lo provo subito
     
  6. Paolo69

    Paolo69 Moderatore Membro dello Staff MOD

    Registrato:
    18 Febbraio 2010
    Messaggi:
    461
    Mi Piace Ricevuti:
    11
    Punteggio:
    18
    Sesso:
    Maschio
    Occupazione:
    Administrator
    Località:
    Italy
    Home Page:
    Allora Aurora, intanto ti posto il codice modificato poi ti spiego come personalizzarlo:

    Codice:
    <%
    ' 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
    strConnect = "driver={Microsoft Access Driver (*.mdb)};dbq=" & server.mappath("NewsPad.mdb") 
    
    Set rs = Server.CreateObject("ADODB.Recordset")
    	rs.ActiveConnection = strConnect
    	rs.Source = "SELECT Email FROM tblNPMembers" 
    	rs.CursorType = 1
    '	rs.CursorLocation = 2
    '	rs.LockType = 1
    	rs.Open()
    
    ' 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
    
    ' QUI METTO IL CODICE PER INVIARE L'EMAIL
    
    ' STAMPO IL VALORE i PER VEDERE SE FUNZIA :)))
    response.Write i&"<br>"
    
    i = i + 1
    If i = quante Then Exit Do
    rs.MoveNext
    Loop
    
    ' Un po di pulizia
    rs.Close
    Set rs = 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)
    %>
    Modifica il nome del tuo DB: ("NewsPad.mdb")
    Modifica il nome della tabella ove vi sono le e-mail: "SELECT Email FROM tblNPMembers"
    Se hai fatto tutto correttamente all'esecuzione del file dovresti trovare un progressivo da 1 a 50 e così vià.

    Devi aggiungere solo il codice per inviare una mail... intanto vedi se funziona questo blocco.
     
    Ultima modifica: 28 Aprile 2010
  7. aurora.solari

    aurora.solari Nuovo Utente

    Registrato:
    23 Ottobre 2009
    Messaggi:
    21
    Mi Piace Ricevuti:
    0
    Punteggio:
    0
    grazie mille paolo!! + tardi lo provo! sei stato gentilissimo:)
     
  8. aurora.solari

    aurora.solari Nuovo Utente

    Registrato:
    23 Ottobre 2009
    Messaggi:
    21
    Mi Piace Ricevuti:
    0
    Punteggio:
    0
    funziona alla perfezione, grazie ancora!
    l'unica cosa che vorrei cambiare è che nella pagina di controllo mi vengono stampati i numeri
    0
    1
    2
    3 ecc ecc
    pag 1
    anzichè i numeri sarebbe possibile far stampare gli indirizzi email a cui è stata inviata la newsletter o è troppo complicato?
     
  9. aurora.solari

    aurora.solari Nuovo Utente

    Registrato:
    23 Ottobre 2009
    Messaggi:
    21
    Mi Piace Ricevuti:
    0
    Punteggio:
    0
    ho parlato troppo presto. in realtà nn funziona. sigh!
    le email vengono inviate correttamente, ma sempre una alla volta.
    ho messo nel campo TO il mio indirizzo email e nel campo CCN 52 indirizzi.
    a me il messaggio arriva 52 volte!
    visto che di email ne avrei 1000 da mandare non vorrei che mi si intasasse la posta!
     
  10. Paolo69

    Paolo69 Moderatore Membro dello Staff MOD

    Registrato:
    18 Febbraio 2010
    Messaggi:
    461
    Mi Piace Ricevuti:
    11
    Punteggio:
    18
    Sesso:
    Maschio
    Occupazione:
    Administrator
    Località:
    Italy
    Home Page:
    ...mmmm, allora, per quanto riguarda i numeri la stringa è questa:
    Codice:
    ' STAMPO IL VALORE i PER VEDERE SE FUNZIA :)))
    response.Write i&"<br>"
    
    era una cosa che ho aggiunto per vedere se il ciclo funzionava, se vuoi visualizzare l'indirizzo e-mail basta modificarlo così:

    Codice:
    ' STAMPO IL VALORE i PER VEDERE SE FUNZIA :)))
    response.Write email&"<br>"
    
    Per il discorso invio singolo o multiplo non ho ben afferrato il problema, in pratica lo script invia una mail, in successione, ad ogni singolo indirizzo inserito nella tabella "email".
    A parer mio questa è la modalità idonea per la privacy e per non sovraccaricare il server SMTP.
    Infatti, non trovo giusto che il destinatario sia in grado di visualizzare 50 indirizzi e-mail nella casella "destinatario" mentre, utilizzando questo sistema, visualizza solo il proprio.

    In caso di necessità sono in MSN dalle 09,00 alle 12,00 virtual_box@hotmail.com
    byeee
     
  11. aurora.solari

    aurora.solari Nuovo Utente

    Registrato:
    23 Ottobre 2009
    Messaggi:
    21
    Mi Piace Ricevuti:
    0
    Punteggio:
    0
    per il problema privacy, io metto gli indirizzi in copia per conoscenza nascosta quindi il destinatario vede solo il mio indirizzo alla voce TO.
    probabilmente può funzionare anche in questo modo, a questo punto metto il destinatario direttamente alla voce TO e non in copia per conoscenza così nn ho neanche il problema di ricevere troppo email nella mia casella!

    grazie mille per l'aiuto!
     
  12. aurora.solari

    aurora.solari Nuovo Utente

    Registrato:
    23 Ottobre 2009
    Messaggi:
    21
    Mi Piace Ricevuti:
    0
    Punteggio:
    0
    c'è un modo per proteggere la pagina del form per l'invio con username e password di modo che solo chi ha l'autorizzazione possa inviare la newsletter?
     
  13. Paolo69

    Paolo69 Moderatore Membro dello Staff MOD

    Registrato:
    18 Febbraio 2010
    Messaggi:
    461
    Mi Piace Ricevuti:
    11
    Punteggio:
    18
    Sesso:
    Maschio
    Occupazione:
    Administrator
    Località:
    Italy
    Home Page:
    certo, potresti optare tra un login con database o senza...
    dimmi quale preferisci.
     
  14. aurora.solari

    aurora.solari Nuovo Utente

    Registrato:
    23 Ottobre 2009
    Messaggi:
    21
    Mi Piace Ricevuti:
    0
    Punteggio:
    0
    mi basta un unico username e password. vorrei che non fosse possibile accedere alla pagina semplicemente digitando l'url sulla barra del browser! spero di essermi spiegata :b
     
  15. aurora.solari

    aurora.solari Nuovo Utente

    Registrato:
    23 Ottobre 2009
    Messaggi:
    21
    Mi Piace Ricevuti:
    0
    Punteggio:
    0
    questa è la mia pagina newsletter.htm


    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <html xmlns="http://www.w3.org/1999/xhtml">
    <script language="JavaScript" type="text/JavaScript">
    <!--
    function MM_validateForm() { //v4.0
    var i,p,q,nm,test,num,min,max,errors='',args=MM_validateForm.arguments;
    for (i=0; i<(args.length-2); i+=3) { test=args[i+2]; val=MM_findObj(args);
    if (val) { nm=val.name; if ((val=val.value)!="") {
    if (test.indexOf('isEmail')!=-1) { p=val.indexOf('@');
    if (p<1 || p==(val.length-1)) errors+='- '+nm+' deve essere valida.\n';
    } else if (test!='R') { num = parseFloat(val);
    if (isNaN(val)) errors+='- '+nm+' must contain a number.\n';
    if (test.indexOf('inRange') != -1) { p=test.indexOf(':');
    min=test.substring(8,p); max=test.substring(p+1);
    if (num<min || max<num) errors+='- '+nm+' must contain a number between '+min+' and '+max+'.\n';
    } } } else if (test.charAt(0) == 'R') errors += '- '+nm+' necessaria.\n'; }
    } if (errors) alert('Inserire email valida:\n'+errors);
    document.MM_returnValue = (errors == '');
    }
    //-->
    </script>

    <head>
    <title></title>
    <style type="text/css">
    .style1
    {
    font-family: Arial;
    }
    </style>
    </head>
    <body>

    <form action="mailing.asp" method="POST" name="form1" onSubmit="MM_validateForm('from','','RisEmail');return document.MM_returnValue">

    <table style="width:50%;" class="style1">
    <tr>
    <td>

    Da</td>
    <td>
    <input type="text" name="from" size="20" /></td>
    </tr>
    <tr>
    <td>
    Oggetto</td>
    <td>
    <input type="text" name="subject" size="20" /></td>
    </tr>
    <tr>
    <td>
    <span lang="it">Pagina da inviare</span></td>
    <td>
    <input type="text" name="newsletter" size="50" /></td>
    </tr>
    <tr>
    <td>
    &nbsp;</td>
    <td>
    <input type="submit" name="Submit" value="Invia" /></td>
    </tr>

    </table> </form>
    </body>
    </html>
     
  16. Paolo69

    Paolo69 Moderatore Membro dello Staff MOD

    Registrato:
    18 Febbraio 2010
    Messaggi:
    461
    Mi Piace Ricevuti:
    11
    Punteggio:
    18
    Sesso:
    Maschio
    Occupazione:
    Administrator
    Località:
    Italy
    Home Page:
    Iniziamo..
    crea una pagina chiamata login.asp
    inserisci al suo interno il seguente codice:
    Codice:
    <%
    ' PRELEVA L'USERNAME E LA PASSWORD INSERITI
    Username = Replace(Request.Form("username"), "'", "''")
    Password = Replace(Request.Form("password"), "'", "''")
    Action   = Request.Form("B1")
    
    ' CONTROLLA INNANZITUTTO SE E' STATO PASSATO UN VALORE
    IF Username <> "" and Password <> "" then
    
    	' QUI TROVI IL NOME UTENTE E PASSWORD DA TE IMPOSTATI
    	UsernameImpostata = "nome"
    	PasswordImpostata = "password"
    	
    		If Username = UsernameImpostata AND Password = PasswordImpostata Then
    			' ok, i dati coincidono continuo
    				Session("Loggato") = True
    				Session("Username") = Username
    		Else
    			' altrimenti 
    				Session("Loggato") = False
    		End IF
    	
    IF Session("Loggato") = True then
    ' nome pagina protetta
    	Response.Redirect "newsletter.asp"
    Else
    %>
    <hr>
    <p align="center"><b><font face="Verdana" size="2">Username/Password non corretti!</font></b></p>
    <hr>
    <%
    End IF
    
    End IF
    %>
    <p>&nbsp;</p>
    <p align="center"><b><font face="Verdana" size="3">Sezioni Riservate - Login</font></b></p>
    <form method="POST" action="login.asp">
      <div align="center">
        <center>
        <table border="0" width="61%" cellspacing="0" cellpadding="0">
          <tr>
            <td width="50%"><font face="Verdana" size="2">Username:</font></td>
            <td width="50%"><input type="text" name="username" size="20"></td>
          </tr>
          <tr>
            <td width="50%"><font face="Verdana" size="2">Password:</font></td>
            <td width="50%"><input type="password" name="password" size="20"></td>
          </tr>
          <tr>
            <td width="100%" colspan="2">
              <p align="center"><input type="submit" value="Login" name="B1"><input type="reset" value="Reimposta" name="B2"></p></td>
          </tr>
        </table>
        </center>
      </div>
    </form>
    <p align="left">&nbsp;</p>
    
    Personalizzazione:
    Inserisci qua il nome/password da te scelti
    Se il login ha successo il sistema ti invia nella pagina da te protetta:
    ...ovviamente newsletter.asp dovrai cambiarlo con il nome file da proteggere.

    -------------------------------------------
    2° fase

    devi inserire in testa alla pagina da proteggere il seguente codice:

    Codice:
    <%
    ' VERIFICHIAMO SE L'UTENTE E' IDENTIFICATO (LOGGATO)
        IF Session("Loggato") = False and Session("Username") = "" then
    ' UTENTE NON LOGGATO
    ' PORTA L'UTENTE NELLA PAGINA LOGIN.ASP
        Response.Redirect "login.asp"
    End IF
    %>
    
    se vuoi a metà pagina inserisci questo:
    Codice:
    <p align="left"><b><font face="Verdana" size="3">Benvenuta e buon lavoro
    <i> <%=Session("Username")%> </i></font></b></p>
    
    :mavieni:
     
  17. aurora.solari

    aurora.solari Nuovo Utente

    Registrato:
    23 Ottobre 2009
    Messaggi:
    21
    Mi Piace Ricevuti:
    0
    Punteggio:
    0
    fantastico!! :)
    mi hai risparmiato uno scervellamento da diventarci pazza :book:
    sei un 0:) :)
     
Sto caricando...

Condividi questa Pagina