einsteinmc2 Posted February 9, 2010 Report Share Posted February 9, 2010 Salve a tutti, ho bisogno che qualcuno mi dia una mano con un problemino in ASP .Ho un ciclo che manda 400 mail, adesso la cosa che voglio fare è usare la funzione "sleep" per fermare il ciclo per 5 secondi tra ogni mail, ma il tutto non funziona, ho cercato in rete però sembra che ci siano problemi con questa funzione, qualcuno di voi sarebbe cosi gentile da darmi info???Grazie a tutti. Link to comment Share on other sites More sharing options...
frenz10 Posted February 10, 2010 Report Share Posted February 10, 2010 premetto che sono bianco di asp. credo che sia problema di logica di programmazione ma poi potrei sbagliarmi....Non potresi aggirare il problema inizializzando un'ulteriore variabile di "attesa" da inserire dentro un ciclo for?esempio in linguaggio c ma implementabile ovunque:for (indice=1;indice<=totale && attesa=valore;indice++) { mandamail(); }indice++; Link to comment Share on other sites More sharing options...
frenz10 Posted February 10, 2010 Report Share Posted February 10, 2010 ovviamente ....non considerare quell'ulteriore incremento finale indice++....ho mischiato la for con la while.... perdonamiquindi più correttamentefor (indice=1;indice<=totale && attesa=valore;indice++){mandamail();} Link to comment Share on other sites More sharing options...
einsteinmc2 Posted February 10, 2010 Author Report Share Posted February 10, 2010 (edited) Frenz allora giusto per essere più dettagliato nella cosa, ti posto la sezione di codice dovrei modificare..... 'Send email (CDOSYS version). if mailComp = "CDOSYS" then arrayemail = split(strEmail, ",") indice = 0 max = UBOUND(arrayemail) WHILE NOT i> MAX set cdoMessage = Server.CreateObject("CDO.Message") set cdoConfig = Server.CreateObject("CDO.Configuration") cdoConfig.Fields("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 cdoConfig.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserver") = smtpServer cdoConfig.Fields.Update set cdoMessage.Configuration = cdoConfig cdoMessage.From = fromAddr cdoMessage.To = arrayemail(i) cdoMessage.Subject = subject If Request.Form("version") = "html" Then cdoMessage.HtmlBody = strEmailMsg Else cdoMessage.TextBody = strEmailMsg End If on error resume next cdoMessage.Send if Err.Number <> 0 then SendMail = "Email send failed: " & Err.Description & "." end if set cdoMessage = Nothing set cdoConfig = Nothing i = i + 1 WEND END IF Come vedi adesso devo trovare un modo che subito èrima o subito dopo l'incremento della variabile i mi stoppi il tutto per n secondi.La funzione sleep da problemi in ASP, HO provato ma non funge Edited February 10, 2010 by einsteinmc2 Link to comment Share on other sites More sharing options...
frenz10 Posted February 10, 2010 Report Share Posted February 10, 2010 ok.... da quel che ho ho capito dal codice (ripeto essere totalmente niubbo di asp) ti hai un array nel quale è contenuto l'elenco delle mail.Per inviare a tutti usi la while... e da un punto di vista logico fai la seguenti:"finchè l'indice è minore del massimo valore dell'array"{ invia}incremento di una unitàgiusto?Ora come ti dicevo prima, il controllo non deve essere solamente sul valore massimo dell'array ma dalla concatenazione di due condizioni: l'indice massimo e l'attesa tra un invio e l'altro. Ad esempio: supponiamo che come ti dicevo prima che io debba avviare una funzione (inviamail()) ciclicamente e attendendo per un valore di 5.In c farei così:int c = 5; //inizializzo la dimensione massima (nel tuo caso è la dim dell'array)for(c=1;i<=5 && sleep(5000); i++){inviamail();{quindi l'incremente di un'unità che a te corrisponde all'invio della mail all'elemento successivo dell'array avviene in corrispondenza della condizione di non superamento della dimensione massima dell'array stesso ma dopo aver atteso 5000ms (5secondi).Se in asp la sleep non funziona come in c (e questo dovresti dirmelo tu) basta che inizializzi un ulteriore contatore che appunto conti il tempo che vuoi aspettare prima dell'invio di una nuova mail e mettere questo contatore come ulteriore condizione nella for.spero di essere il più chiaro possibile Link to comment Share on other sites More sharing options...
frenz10 Posted February 10, 2010 Report Share Posted February 10, 2010 e scusami se ho scritto grammaticalmente male ma nella foga capita... poi rileggendo ci si mette le mani nei capelli Link to comment Share on other sites More sharing options...
einsteinmc2 Posted February 10, 2010 Author Report Share Posted February 10, 2010 Sei stato abbastanza chiaro, il problema è il seguente che essendo ASP un linguaggio complitao lato server come dire ha problemi con questa funzione, a dirtela tutta non so benissimo cosa c'è che non va....Però io comunque devo trovare una soluzione, ti praticamente mi consigli di sostirutire al WHILE il FOR come me lo hai scritto tu???Vogliamo fare una prova, non si sa mai! Link to comment Share on other sites More sharing options...
frenz10 Posted February 10, 2010 Report Share Posted February 10, 2010 so benissimo che è un linguaggio per il web lato server.... non lo conosco ... perchè il massimo che mi è capitato di fare è l'autenticazione di utenti utilizzando db mysql e php.Siccome però le istruzioni iterative sono praticamente "standard" in tutti i linguaggi (procedurali, object oriented, web based) se non per qualche piccola variazione a livello di struttura, ma la logica è perfettamente identica..... se questa cosa funziona in c (ed io in passato ho fatto una cosa simile) non vedo perchè non debba funzionare nel linguaggio XXXXXX.speriamo ti vada bene.... Link to comment Share on other sites More sharing options...
einsteinmc2 Posted February 10, 2010 Author Report Share Posted February 10, 2010 niente da fare, l'ho esplicitato sotto forma di FOR in ASPFOR contatore = inizio TO fine'eseguo il codiceNEXTma niente non va, non funge! Link to comment Share on other sites More sharing options...
frenz10 Posted February 10, 2010 Report Share Posted February 10, 2010 scusami ma il for lo fai usando una sola condizione?lo devi fare con due condizioni contemporaneamentecercando ho trovato come si usacaso 1) una sola condizioneDim iFor i=1 to 10Response.Write i & "<br>"Next Il codice precedente stampa i tenendo conto del solo indice idovresti invece usare due for "annidati"for attesa=1 to 5 // contatore di attesafor i=1 to 10 //scandaglia gli elementi dell'arrayResponse.Write i & "<br>"Next Next Link to comment Share on other sites More sharing options...
frenz10 Posted February 10, 2010 Report Share Posted February 10, 2010 (edited) ora non sono sicuro della correttezza sintattica del precedente codicema di sicuro dei usare due for annidatimi riporto sempre al c for (attesa=0;attesa<=5;attesa++){ for(counter=1;counter<=MAX;counter++){ inviamail(); } } Edited February 10, 2010 by frenz10 Link to comment Share on other sites More sharing options...
frenz10 Posted February 10, 2010 Report Share Posted February 10, 2010 niente di nuovo? Link to comment Share on other sites More sharing options...
frenz10 Posted February 10, 2010 Report Share Posted February 10, 2010 l'ultimo estratto di codice che ti ho scritto non da il risultato che vorremmo....in realtà dovresti cercare di ricreare in asp la seguente for(counter=1;counter<=5 && attesa=5; i++) { inviamail(); } // la mail viene inviata se l'array non è stato ripercorso fino alla fine e se si è atteso //per un tempo pari a 5 Link to comment Share on other sites More sharing options...
einsteinmc2 Posted February 14, 2010 Author Report Share Posted February 14, 2010 Carissimo frenz grazie dell'aiuto ma ho risolto con un bel lampo di genio e una funzione di ASP....Ti posto il codice: StartTime = Timer() EndTime = Timer() WaitTime = EndTime - StartTime do while WaitTime < 3 EndTime = Timer() WaitTime = EndTime - StartTime loop Adesso l'invio l'ho settato ogni 3 secondi, che ne dici??? Bella idea??? Link to comment Share on other sites More sharing options...
frenz10 Posted February 14, 2010 Report Share Posted February 14, 2010 Ottimo! suppongo che poi la variabile WaitTime venga utilizzata come parametro di attesa nel ciclo di invio delle mai no? (for o while che sia)....in passato una cosa del genere l'ho utilizzata nello sviluppo di un analizzatore di traffico in cui oltre all'analisi dei pacchetti per protocollo andava misurato il tempo di sniffing e lo feci in C con la libreria <time.h> utilizzando una chiamata a time() per lo start ed un'altra per il finishing time e facendo in fine la differenza..... Link to comment Share on other sites More sharing options...
einsteinmc2 Posted February 14, 2010 Author Report Share Posted February 14, 2010 Si, non ti ho postato tutto il codice, ma praticamente tutto il corpo dell'invio mail sta prima di questo pezzo, io mando ma prima mail e poi arriva questo controllo, dopodiche setti i secondi (nel mio caso 3) entra nel loop cicla e non appena le condizioni che ho impostato sono vere esce dal while, risale sopra e manda la n-esima mail....Detto ancora più semplicemente, questa funzionè un loop che è inserito nel loop dell'invio mail....L'unico problema che dopo avere fatto questa modifica, l'esecuzione diciamo dell'intero ciclo di invio durava (secondi di attesa*numero di mail) quindi nel mio caso 500 mail * 3 sec= circa 1500 secondi.....Ho scoperto che i server Win IIS hanno di default un massimo di tempo di esecuzione 90 secondi quindi non riuscivo a mandare tutte le mail....Menomale che ho trovato un metodo che si chiama Server.ScriptTimeout = xxxx cun cui puoi settare a tuo piacimento la scadenza della pagina.....Ora tutto funziona alla meraviglia, però sto ASP del cavolo, sto amministrado un lavoro che non è mio e quindi mi devo adattare......Spero che con queste poche righe qualcuno che avrà gli stessi miei problemi non perde la notti che ho perso io per trovare le risposte. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now