[Risolto] Invio mail a blocchi

  • Creatore Discussione Creatore Discussione djjunior
  • Data di inizio Data di inizio
Purtroppo sono su server condiviso su aruba, ho provato a modificare il timeout ma sicuramente c'è qualche limitazione.
Aspetto una tua genialata, grazie 1000
G.
 
Sto provando a paginare quello che mi hai detto in questo modo:
Codice:
<%
perpag=3
periodos = "allegati"


offset=request.QueryString("offset")
if offset="" then
offset=1
end if

tot=0
cicli=0
maxtemp=(perpag*offset)-perpag
perpagtemp=perpag*offset


set fs = Server.CreateObject("Scripting.FileSystemObject")
set fo = fs.GetFolder("d:\inetpub\webs\miositoit\public\test\" & periodos & "\")
set fe = fo.files

'conteggio totali

for each y in fe
tot=tot+1
Next


for each y in fe

if cicli >= maxtemp and cicli < perpagtemp then
extfile = left(split(y.Name,".pdf")(0),14)
nomefile = y.Name

Dim strPath

	strPath = "D:\inetpub\webs\miositoit\mdb-database\prova.mdb"
	strConnect = "DRIVER={Microsoft Access Driver (*.mdb)};" & "DBQ=" & strPath


	Set conn = Server.CreateObject("ADODB.Connection")
	Set rst = Server.CreateObject("ADODB.Recordset")
		conn.open  strConnect
		criterio = "SELECT * FROM user WHERE codice_cliente = '" & extfile & "' AND attivo = 'SI'"
		rst.Open criterio, conn, adOpenKeyset


%>
<table width="400" cellpadding="2" cellspacing="2" border="1">
<tr>
<td colspan="2">SIMULAZIONE EMAIL:</td>
</tr>
<tr>
<td>Nome:</td>
<td><%=rst.fields("nome")%></td>
</tr>
<tr>
<td>Cognome:</td>
<td><%=rst.fields("cognome")%></td>
</tr>
<tr>
<td>Cod. Cliente:</td>
<td><%=rst.fields("codice_cliente")%></td>
</tr>
<tr>
<td>E-mail:</td>
<td><%=rst.fields("email")%></td>
</tr>
<tr>
<td>Allegato:</td>
<td><%=nomefile%></td>
</tr>
</table>


<%

end if

cicli=cicli+1

Next

avanti=offset+1
indietro=offset-1

if indietro < 1 then
indietro=1
end if

%>
<body>
<%if offset>1 then%><a href="?offset=<%=indietro%>">Indietro</a><%end if%><%if (offset*perpag) < tot then%> <a href="?offset=<%=avanti%>">Avanti</a><%end if%>
</body>
Puoi vederlo in azione qui:
http://www.studiofotografare.it/public/test/list2.asp
Ma dopo il 13° risultato ho l'errore:
ADODB.Field error '80020009'

Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record.

/public/test/list2.asp, line 0
Come mai, altrimenti era perfetto....
Grazie
 
prova aggiungendo questa condizione:
Codice:
'Visualizzo se presenti record
	If NOT Rst.EOF Then

' stampo i risultati
%>
<table width="400" cellpadding="2" cellspacing="2" border="1">
<tr>
...
</tr>
</table>
<%

End If

%>
 
Si funzionerebbe alla grande.... se deve prendere tutti i risultati senza condizioni, ma se metto un' ulteriore condizione nella query tipo qui ho aggiunto FATTURA = 'SI':
Codice:
criterio = "SELECT * FROM user WHERE codice_cliente = '" & extfile & "' AND attivo = 'SI' [B]AND fattura = 'SI'[/B]"
Salta i risultati cui ho impostato FATTURA su NO,come puoi vedere dal link, invece non dovrebbe proprio considerarli, potresti controllare lo script , c'è qualcosa nel ciclo che crea questo problema?
I records impostati su SI sono 13 mentre quelli impostati su NO sono 7
Grazie ancora...
 
Ultima modifica:
Non complicarti la vita, lascia la query senza condizioni.
Estrai i valori attivo e fattura e valorizza due variabili.
Metti una condizione sulla spedizione, del tipo:

If attivo = "SI" AND fattura = "SI" Then

codice spedisci

Else

codice visualizza tipo simulazione

End If

...questo ti permette di visualizzare senza problemi il ciclo completo e di vedere ad occhio quello che fa il sistema.
 
Ciao PAOLO,
purtroppo prima non ho potuto scriverti.... comunque se vedi questo mio post ti segnalo che non va bene neanche impostando le condizioni if che mi hai indicato al tuo ultimo post, perchè nn fa la paginazione corretta, perchè la paginazione la fa su questa parte di codice:

Codice:
set fs = Server.CreateObject("Scripting.FileSystemObject")
set fo = fs.GetFolder("d:\inetpub\webs\miositoit\public\test\" & periodos & "\")
set fe = fo.files

for each y in fe
tot=tot+1
Next

for each y in fe

if cicli >= maxtemp and cicli < perpagtemp then
extfile = left(split(y.Name,".pdf")(0),14)
nomefile = y.Name

E cioè su tutti i file presenti nella cartella "allegati", mentre si dovrebbe modificare lo script in modo che faccia la paginazione sui dati effettivamente estratti dal db con le condizioni che mi necessitano (attivo=si - fattura=si ect)
Scusami per l'insistenza, fatti venire una genialata su come mandare quste benedette mail in blocchi.
Aiutami tu..... Ti ringrazio di tutto.
Non so proprio cosa fare speriamo anche in qualcuno che legga questo post che puòl aiutarmi.
Grazie
 
Scusami, ero in ferie, lunedì torno operativo.
Mi mandi l'ultimo file da te compilato?
Gli do un'occhio e vedrai che dopo le email volanooooooooooooooo
 
Grazie... grazie
ecco "l'ultimo" che dalla seconda pagina però non mi stampa a video i records:
Codice:
<%
perpag=3

periodos = "allegati"

offset=request.QueryString("offset")
if offset="" then
offset=1
end if

tot=0
cicli=0
maxtemp=(perpag*offset)-perpag
perpagtemp=perpag*offset


    
    set fs = Server.CreateObject("Scripting.FileSystemObject")
    set fo = fs.GetFolder("d:\inetpub\webs\miositoit\public\test\" & periodos & "\")
    set fe = fo.files
      
    for each y in fe
    extfile = left(split(y.Name,".pdf")(0),14)
    nomefile = y.Name
    
    if cicli >= maxtemp and cicli < perpagtemp then
    
    Dim strPath
    strPath = "D:\inetpub\webs\miositoit\mdb-database\prova.mdb"
    strConnect = "DRIVER={Microsoft Access Driver (*.mdb)};" & "DBQ=" & strPath

    Set conn = Server.CreateObject("ADODB.Connection")
    Set rst = Server.CreateObject("ADODB.Recordset")
    conn.open  strConnect
            
    criterio = "SELECT * FROM user WHERE codice_cliente = '" & extfile & "' AND attivo = 'SI' AND allegato = 'SI'"
    rst.Open criterio, conn, adOpenKeyset

    if Not rst.eof then

    While rst.EOF = False And cicli < perpag

%>
<table width="400" cellpadding="2" cellspacing="2" border="1">
<tr>
<td colspan="2">RECORD: <%=progressivo+1%> (<%=rst.fields("bollettaweb")%> - <%=rst.fields("attivo")%>)</td>
</tr>
<tr>
<td>Nome:</td>
<td><%=rst.fields("nome")%></td>
</tr>
<tr>
<td>Cognome:</td>
<td><%=rst.fields("cognome")%></td>
</tr>
<tr>
<td>Cod. Cliente:</td>
<td><%=rst.fields("codice_cliente")%></td>
</tr>
<tr>
<td>E-mail:</td>
<td><%=rst.fields("email")%></td>
</tr>
<tr>
<td>Allegato:</td>
<td><%=nomefile%></td>
</tr>
</table>
<% 

Progressivo = Progressivo +1
rst.MoveNext
  cicli=cicli+1
             Wend                
    else
end if
        end if 
    tot=tot+1 
    
     avanti=offset+1    
     
     
  Next  
    

%>
<body>
<%if (offset*perpag) < tot then%> <a href="?offset=<%=avanti%>">Avanti</a><%else%>Invio Terminato<%end if%>
</body>
Per visualizzarlo in funzione:
http://www.studiofotografare.it/public/test/list.asp
Aspetto tue... sto letteralmente uscendo fuori di testa.
Grazieeee
 
il campo ALLEGATO sarebbe campo BOLLETTAWEB (avevo sbagliato a scriverlo) ed è SI/NO
I campi db delle condizioni sarebbero ATTIVO (SI/NO) e BOLLETTAWEB (SI/NO)
Grazie
 
Ti invio per email i file.

Ho rielaborato completamente la successione degli eventi per poter soddisfare la tua richiesta.
Il file è composto da 4 step:
. lo step 1 si occupa di inserire in una tabella del db gli ID degli utenti presenti nella cartella "allegato"
Codice:
' ---------------------------------------------------------------------------------
' STEP 1 	
	If step = 1 Then

	periodos = "allegati"

	' conto numero file	
		set fs = Server.CreateObject("Scripting.FileSystemObject")
	'	set fo = fs.GetFolder("C:\inetpub\my-site\caprioli.info\fitness\script\blocchi\" & periodos & "\")
		set fo = fs.GetFolder("D:\inetpub\webs\caprioliinfo\fitness\script\blocchi\" & periodos & "\") 
		set fe = fo.files
		  
			conto_file = 0
			conto_numero_email = 0
			for each y in fe
		
				extfile = left(split(y.Name,".pdf")(0),14)
				conto_file = conto_file + 1
				
				' conto i file che rispondono ai requisiti richiesti
					Set conn = Server.CreateObject("ADODB.Connection")
    				Set rst = Server.CreateObject("ADODB.Recordset")
    					conn.open  strConnect
						criterio = "SELECT * FROM user WHERE codice_cliente = '" & extfile & "' "'AND attivo = 'SI' AND BOLLETTAWEB = 'SI'"
    					rst.Open criterio, conn, adOpenKeyset

						If Not rst.eof then
							While rst.EOF = False
							
								ATTIVO = rst.fields("attivo")
								BOLLETTAWEB = rst.fields("BOLLETTAWEB")
								ID_USER = rst.fields("id")
								
									If ATTIVO = "SI" AND BOLLETTAWEB = "SI" Then
										conto_numero_email = conto_numero_email + 1
										' response.Write conto_numero_email &"<br>"
	
											' AGGIORNO DATA BASE	
											Set Rs = server.CreateObject ("ADODB.Connection")
												Rs.Open (strConnect)
												QuerySQL =  "INSERT INTO Predispongo_email (" &_
												"sessione, id_user) VALUES (" &_
												"'"&Chiave_Univoca&"', '"&ID_USER&"');"
												Rs.Execute QuerySQL
											Set Rs = Nothing
											' FINE		
										
									End If 
							
							rst.MoveNext
             				Wend       
						End If         
				' fine
				
		 
	 		Next  
 	' fine   
	
	Response.Redirect("mail.asp?step=2&key="&Chiave_Univoca&"")
	
' ---------------------------------------------------------------------------------
. lo step 2 si occupa di notificarti che cosa vuoi fare, proseguire con l'invio o eliminare tutto per ricominciare di nuovo;
Codice:
' STEP 2 	
	ElseIf step = 2 Then

			Set objRs = Server.CreateObject("ADODB.Recordset")
				strSQL = "SELECT COUNT(ID) AS cont FROM Predispongo_email WHERE " &_
						 "sessione = '"&Request.QueryString("key")&"'"
				objRs.Open strSQL, strConnect
				email_predisposte = objRs("cont")
				objRs.Close
			Set objRs = Nothing ' chiudo il recordset

%>
<table width="500" cellpadding="2" cellspacing="2" border="0" align="center" style="font-family:Verdana; font-size:10px">
<tr>
<td colspan="2" align="center"><p style="font-size:12px;">Il sistema ha predisposto l'invio di nr. <%=email_predisposte%> email.</p></td>
</tr>
<tr>
<td align="center" bgcolor="#CCCCCC" width="50%"><p><a href="mail.asp?key=<%=Chiave_Univoca%>&step=4">[PROCEDI ALL'INVIO]</a></p></td>
<td align="center" bgcolor="#FF6633" width="50%"><p><a href="mail.asp?key=<%=Chiave_Univoca%>&step=3">[ANNULLA E DISTRUGGI TUTTO]</a></p></td>
</tr>
</table>
<%

' ---------------------------------------------------------------------------------
. lo step 3 si occupa di distruggere le voci inserite nel db in caso di rinuncia oppure al termine dell'invio e-mail;
Codice:
' STEP 3 	
	ElseIf step = 3 Then
	
	Set conn = Server.CreateObject("ADODB.Connection")
	Set rst = Server.CreateObject("ADODB.Recordset")
		conn.open  strConnect
		criterio = "SELECT * FROM Predispongo_email WHERE sessione = '"&Chiave_Univoca&"'"
		rst.Open criterio, conn, adOpenKeyset
			If Not (rst.bof and rst.eof) then 
			For x = 1 To rst.PageSize
				If rst.Eof then exit for 

					id = (rst.Fields.Item("id").Value)
					
						' elimino il campo relativo al file nel DB
							Set DoDelete = Server.CreateObject("ADODB.Command")
								DoDelete.ActiveConnection = strConnect
								DoDelete.CommandText = "DELETE FROM Predispongo_email WHERE id = "&id
								DoDelete.CommandType = 1
								DoDelete.CommandTimeout = 0
								DoDelete.Prepared = true
								DoDelete.Execute() 
							Set DoDelete = Nothing 
						' fine

				rst.MoveNext 
				Next 
		'	Else
			'La query non ritorna dati
			End If

' chiudo e distruggo tutto
		rst.Close
		conn.Close
	Set rst = nothing
	Set conn = nothing

		Response.Write("Operazione terminata con successo, puoi chiudere il browser!<br />")

' ---------------------------------------------------------------------------------
.lo step 4 infine si occupa dell'invio vero e proprio delle email con il pulsante avanti, terminato il ciclo ti invita a distruggere le info presenti nella tabella predisponi_email.

Codice:
' STEP 4 	
	ElseIf step = 4 Then


Select Case Request.QueryString("dir")
  Case ""
    v_pagina_corrente = 1
  Case "next"
    v_pagina_corrente= cdbl(Request.QueryString("pag")) + 1
  Case "prev"
    v_pagina_corrente= cdbl(Request.QueryString("pag")) - 1
End Select 


   		adOpenKeyset = 1
		v_record_pagina = 2 'Numero di record da visualizzare su ogni pagina


	Set conn = Server.CreateObject("ADODB.Connection")
	Set rst = Server.CreateObject("ADODB.Recordset")
		conn.open  strConnect
		criterio = "SELECT * FROM Predispongo_email WHERE sessione = '"&Chiave_Univoca&"' ;"
		rst.Open criterio, conn, adOpenKeyset

'Se la query ritorna dati, visualizzo la pagina
	If Not (rst.bof and rst.eof) then 

		rst.PageSize = cint(v_record_pagina)
		rst.AbsolutePage = Cdbl(v_pagina_corrente)

'Ciclo sui record della pagina
	For x = 1 To rst.PageSize

'Esco alla fine della pagina, se è l'ultima e contiene meno record delle altre
	If rst.Eof then exit for 

		id = (rst.Fields.Item("id").Value)

%>
<%=id%><br />
---------------------<br />
Qui inserisco il codice invio email<br />
al destinatario estrapolato dal DB<br />
---------------------<br />
<% 

    rst.MoveNext 

    Next 

'Qui semplicemente creo la barra di navigazione.
        If rst.EOF and rst.BOF then 
			%>&nbsp;<%
			Else
			If Cdbl(v_pagina_corrente) > 1 Then 
			%>&nbsp;<% 
			Else
			%>&nbsp;<% 
			End If
        	If Cdbl(v_pagina_corrente) < rst.PageCount Then 
			%><a href='mail.asp?dir=next&pag=<%= v_pagina_corrente %>&key=<%=Chiave_Univoca%>&step=4'><font size='2' face='Verdana'>Avanti</font></a><%
			Else 
			%><a href='mail.asp?key=<%=Chiave_Univoca%>&step=3'><font size='2' face='Verdana'>CHIUDI E DISTRUGGI TUTTO</font></a><% 
			End If	
        End If
' fine barra di navigazione

	Else
'La query non ritorna dati
	%><p>Nessun record da visualizzare.</p><%
	End If

' chiudo e distruggo tutto
		rst.Close
		conn.Close
	Set rst = nothing
	Set conn = nothing



	End If

%>

link prova: http://www.caprioli.info/fitness/script/blocchi/mail.asp

Ora sta a te ampliare funzionalità a questa idea, puoi fare di tutto, mantenere la cronologia delle email inviate o cancellarle al termine, effettuare il log data/ip invio email e tante altri gadjet.

Buon lavoro.
 

Discussioni simili