Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: Newsletter

  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2002
    Messaggi
    336

    Newsletter

    Ciao, sto usando questo codice per creare l'invio di una newsletter:

    codice:
    <%
    	sqlNewsletter="select * from tabNewsletter where pubblicato=true and inviato=false"
    	aprirs rsNewsletter, sqlNewsletter
    		
    	If Not rsNewsletter.EOF then
    		sqlEmail="select email from tabContatti"		
    		aprirs rsEmail, sqlEmail
    			
    		perpage = 10
    		
    		If Request.QueryString("p") = "" then
    			p = 1
    		else
    			p=cint("0"&Request.QueryString("p"))
    		End if
    		
    		If rsEmail.recordcount>0 then		
    			rsEmail.PageSize = perpage
    			rsEmail.AbsolutePage = p
    		end if
    		totpag = rsEmail.PageCount
    			
    			
    		For i = 1 to perpage
    			If Not rsEmail.EOF then
    				inviaEmail "mittente@mittente.it",rsEmail("email"),"","oggetto","body"
    				rsEmail.MoveNext
    			end if
    		next
    		if p<totpag then
    			response.redirect("newsletter.asp?p="&p+1)
    		else
    			rsEmail.close
    			set rsEmail=nothing
    		end if
    	
    		sqlUpdCnt="update tabNewsletter set inviato=true where idNewsletter=" & rsNewsletter("idNewsletter")
    		cn.execute sqlUpdCnt
    		response.redirect("newsletter.asp")		
    	end if
    	rsNewsletter.close
    	set rsNewsletter=Nothing
    %>
    Il tutto funziona, solo che se supero le 100 email (quindi 10 volte il redirect) mi da errore.
    Il problema è che l'errore è generico, in pratica mi da "impossibile visualizzare pagina:

    codice:
    Internet Explorer: impossibile visualizzare la pagina Web 
       
       Cause più probabili:
    Nessuna connessione a Internet. 
    Si sono verificati problemi relativi al sito Web. 
    È possibile che nell'indirizzo sia presente un errore di digitazione. 
     
       Possibili operazioni: 
         Diagnostica problemi di connessione  
     
         Ulteriori informazioni 
    
    Le cause del problema possono essere diverse, ad esempio: 
    
    La connessione a Internet è stata interrotta. 
    Il sito Web non è attualmente disponibile. 
    Il DNS (Domain Name Server) non è raggiungibile. 
    Il DNS (Domain Name Server) non dispone di un elenco per il dominio del sito Web. 
    Se si tratta di un indirizzo HTTPS (protetto), scegliere Opzioni Internet dal menu Strumenti, fare clic su Avanzate e verificare che i protocolli SSL e TLS siano abilitati nella sezione Protezione. 
    
    Per utenti non in linea
    
    È tuttavia possibile visualizzare i feed sottoscritti e alcune pagine Web visualizzate di recente.
    Per visualizzare i feed sottoscritti 
    
    Fare clic sul pulsante Centro Preferiti , quindi su Feed e infine sul feed da visualizzare. 
    
    Per visualizzare le pagine Web visitate di recente (è possibile che non tutte le pagine vengano visualizzate) 
    
    Scegliere Strumenti , quindi Non in linea. 
    Fare clic sul pulsante Centro Preferiti , quindi su Cronologia e infine sulla pagina da visualizzare.
    Fino a 100 email mi funziona correttamente, più di 100 mi crasha così.

    Devo impostare qualche proprietà a me sconosciuta di iis?

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2002
    Messaggi
    336
    Nessuno che mi sappia dire come mai dà quell'errore?

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2002
    Messaggi
    336
    Ciao, ho riscritto il codice in modo che sia il più semplice possibile per facilitare chi mi volesse aiutare:

    codice:
    <%
    	Const adOpenKeyset = 1
    	
    	Dim cn : Set cn = Server.CreateObject("ADODB.Connection")
    	Dim strConn, strLogin, strPassword
    	strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " & server.MapPath("db.mdb") &"  ;Persist Security Info=False"
    	cn.open strConn
    
    	dim rsNewsletter,sqlNewsletter
    
    	Set rsNewsletter = Server.CreateObject("ADODB.Recordset")
    	rsNewsletter.CursorLocation = 2
    	sqlNewsletter="select * from tabNewsletter where inviato=false"
    	rsNewsletter.Open sqlNewsletter, cn, adOpenKeyset
    	
    	If Not rsNewsletter.EOF then
    		
    		dim rsEmail,sqlEmail
    
    		Set rsEmail = Server.CreateObject("ADODB.Recordset")
    		rsEmail.CursorLocation = 2
    		sqlEmail="select email from tabContatti"		
    		rsEmail.Open sqlEmail, cn, adOpenKeyset
    		
    		perpage = 10
    		
    		If Request.QueryString("p") = "" then
    			p = 1
    		else
    			p=cint("0"&Request.QueryString("p"))
    		End if
    		
    		If rsEmail.recordcount>0 then		
    			rsEmail.PageSize = perpage
    			rsEmail.AbsolutePage = p
    		end if
    		totpag = rsEmail.PageCount
    			
    			
    		For i = 1 to perpage
    			If Not rsEmail.EOF then
    				'codice che invia le email
    				rsEmail.MoveNext
    			end if
    		next
    		if p<totpag then
    			response.redirect("newsletter.asp?p="&p+1)
    		else
    			rsEmail.close
    			set rsEmail=nothing
    		end if
    	
    		sqlUpdCnt="update tabNewsletter set inviato=true where idNewsletter=" & rsNewsletter("idNewsletter")
    		cn.execute sqlUpdCnt
    		response.redirect("newsletter.asp")		
    	end if
    	rsNewsletter.close
    	set rsNewsletter=Nothing
                 response.write "finito"
    %>
    Allego anche uno zip contenente la pagina asp e l'mdb per testare lo script.
    Se qualcuno mi può fare il favore di provarlo la cosa è molto semplice.

    Basta copiare in una cartella web i due file e aprire da localhost la pagina newsletter.asp

    Così comè non dovrebbe funzionare dando un errore generico, ma, togliendo 10 delle finte email contenute nella tabella tabContatti del database, dovrebbe funzionare correttamente e settare a "true" il campo "inviato" della tabella tabNewsletter.

    Perchè da' problema se oltrepassa i 10 cicli?

  4. #4
    Dalle opzioni avanzate di explorer devi togliere la spunta dalla voce Mostra messaggi di errore http brevi.

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2002
    Messaggi
    336
    Quello è già a posto, il problema è che non mi da' un errore normale tipo:

    codice:
    Tipo di errore:
    Errore di run-time di Microsoft VBScript (0x800A01A8)
    Necessario oggetto: ''
    /newsletter/newsletter.asp, line 12
    mi restituisce proprio quello che ho indicato qualche post sopra...

  6. #6
    Moderatore di ASP e MS Server L'avatar di Roby_72
    Registrato dal
    Aug 2001
    Messaggi
    19,559
    Prima di effettuare il redirect devi comunque chiudere gli oggetti (recordset e connection) aperti.

    Roby

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2002
    Messaggi
    336
    grazie della risposta, l'ho modificato così, ma ancora da' lo stesso problema:

    edit:
    scusa, avevo dimenticato la connessione, ora provo

    codice:
    <%
    	Const adOpenKeyset = 1
    	
    	Dim cn : Set cn = Server.CreateObject("ADODB.Connection")
    	Dim strConn, strLogin, strPassword
    	strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " & server.MapPath("db.mdb") &"  ;Persist Security Info=False"
    	cn.open strConn
    
    	dim rsNewsletter,sqlNewsletter
    
    	Set rsNewsletter = Server.CreateObject("ADODB.Recordset")
    	rsNewsletter.CursorLocation = 2
    	sqlNewsletter="select * from tabNewsletter where inviato=false"
    	rsNewsletter.Open sqlNewsletter, cn, adOpenKeyset
    	
    	If Not rsNewsletter.EOF then
    		
    		dim rsEmail,sqlEmail
    
    		Set rsEmail = Server.CreateObject("ADODB.Recordset")
    		rsEmail.CursorLocation = 2
    		sqlEmail="select email from tabContatti"		
    		rsEmail.Open sqlEmail, cn, adOpenKeyset
    		
    		perpage = 10
    		
    		If Request.QueryString("p") = "" then
    			p = 1
    		else
    			p=cint("0"&Request.QueryString("p"))
    		End if
    		
    		If rsEmail.recordcount>0 then		
    			rsEmail.PageSize = perpage
    			rsEmail.AbsolutePage = p
    		end if
    		totpag = rsEmail.PageCount
    			
    			
    		For i = 1 to perpage
    			If Not rsEmail.EOF then
    				'codice che invia le email
    				rsEmail.MoveNext
    			end if
    		next
    		
    		rsEmail.close
    		set rsEmail=nothing
    		
    		if p<totpag then
    			rsNewsletter.close
    			set rsNewsletter=Nothing
    			response.redirect("newsletter.asp?p="&p+1)
    		end if 
    		
    		sqlUpdCnt="update tabNewsletter set inviato=true where idNewsletter=" & rsNewsletter("idNewsletter")
    		cn.execute sqlUpdCnt
    		
    		rsNewsletter.close
    		set rsNewsletter=Nothing
    		 		
                      response.redirect("newsletter.asp")		
    	end if
    	rsNewsletter.close
    	set rsNewsletter=Nothing
    	response.write "finito"
    %>

  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2002
    Messaggi
    336
    Niente da fare, ora il codice è questo, ma il problema persiste...

    codice:
    <%
    	Const adOpenKeyset = 1
    	
    	Dim cn : Set cn = Server.CreateObject("ADODB.Connection")
    	Dim strConn, strLogin, strPassword
    	strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " & server.MapPath("db.mdb") &"  ;Persist Security Info=False"
    	cn.open strConn
    
    	dim rsNewsletter,sqlNewsletter
    
    	Set rsNewsletter = Server.CreateObject("ADODB.Recordset")
    	rsNewsletter.CursorLocation = 2
    	sqlNewsletter="select * from tabNewsletter where inviato=false"
    	rsNewsletter.Open sqlNewsletter, cn, adOpenKeyset
    	
    	If Not rsNewsletter.EOF then
    		
    		dim rsEmail,sqlEmail
    
    		Set rsEmail = Server.CreateObject("ADODB.Recordset")
    		rsEmail.CursorLocation = 2
    		sqlEmail="select email from tabContatti"		
    		rsEmail.Open sqlEmail, cn, adOpenKeyset
    		
    		perpage = 10
    		
    		If Request.QueryString("p") = "" then
    			p = 1
    		else
    			p=cint("0"&Request.QueryString("p"))
    		End if
    		
    		If rsEmail.recordcount>0 then		
    			rsEmail.PageSize = perpage
    			rsEmail.AbsolutePage = p
    		end if
    		totpag = rsEmail.PageCount
    			
    			
    		For i = 1 to perpage
    			If Not rsEmail.EOF then
    				'codice che invia le email
    				rsEmail.MoveNext
    			end if
    		next
    		
    		rsEmail.close
    		set rsEmail=nothing
    		
    		if p<totpag then
    			rsNewsletter.close
    			set rsNewsletter=Nothing
    			cn.close
    			set cn=nothing
    			response.redirect("newsletter.asp?p="&p+1)
    		end if 
    		
    		sqlUpdCnt="update tabNewsletter set inviato=true where idNewsletter=" & rsNewsletter("idNewsletter")
    		cn.execute sqlUpdCnt
    		
    		rsNewsletter.close
    		set rsNewsletter=Nothing
    		cn.close
    		set cn=nothing 		
                       response.redirect("newsletter.asp")		
    	end if
    	rsNewsletter.close
    	set rsNewsletter=Nothing
    	cn.close
    	set cn=nothing 
    	response.write "finito"
    %>

  9. #9
    Utente di HTML.it
    Registrato dal
    Apr 2002
    Messaggi
    336
    Scusate i post consecutivi, ma semplificando lo script al massimo credo di avere individuato il punto dove da' problemi:

    codice:
    <%	
    	If Request.QueryString("p") = "" then
    		p = 0
    	else
    		p=cint(Request.QueryString("p"))
    	End if
    		
    	totpag = 11
    
    	if p<totpag then
    
    		response.redirect("newsletter.asp?p="&p+1)
    	end if
    	
    	response.write "finito"
    %>
    Non è quindi un problema di connessioni al database, ma del redirect.
    Se metto 11 come parametro totpag, cioè gli dico che deve fare 11 redirect da' il famoso errore generico, se invece metto 10 funziona correttamente.

    C'è quindi un limite di 10 volte sui redirect consecutivi??

  10. #10
    Ciao Jumpychan, un pò di tempo fa ho letto a questo link come spezzare l'invio di news letter in blocchi da 50, prova a vedere se puo esserti utile.

    Ps non ho letto il tuo codice e sicuramente non so aiutarti su quello.


    http://www.aspcenter.net/articoli/173.asp

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 © 2026 vBulletin Solutions, Inc. All rights reserved.