einsteinmc2 Inserito: 9 febbraio 2010 Segnala Share Inserito: 9 febbraio 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 al commento Condividi su altri siti More sharing options...
frenz10 Inserita: 10 febbraio 2010 Segnala Share Inserita: 10 febbraio 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 al commento Condividi su altri siti More sharing options...
frenz10 Inserita: 10 febbraio 2010 Segnala Share Inserita: 10 febbraio 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 al commento Condividi su altri siti More sharing options...
einsteinmc2 Inserita: 10 febbraio 2010 Autore Segnala Share Inserita: 10 febbraio 2010 (modificato) 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 Modificato: 10 febbraio 2010 da einsteinmc2 Link al commento Condividi su altri siti More sharing options...
frenz10 Inserita: 10 febbraio 2010 Segnala Share Inserita: 10 febbraio 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 al commento Condividi su altri siti More sharing options...
frenz10 Inserita: 10 febbraio 2010 Segnala Share Inserita: 10 febbraio 2010 e scusami se ho scritto grammaticalmente male ma nella foga capita... poi rileggendo ci si mette le mani nei capelli Link al commento Condividi su altri siti More sharing options...
einsteinmc2 Inserita: 10 febbraio 2010 Autore Segnala Share Inserita: 10 febbraio 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 al commento Condividi su altri siti More sharing options...
frenz10 Inserita: 10 febbraio 2010 Segnala Share Inserita: 10 febbraio 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 al commento Condividi su altri siti More sharing options...
einsteinmc2 Inserita: 10 febbraio 2010 Autore Segnala Share Inserita: 10 febbraio 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 al commento Condividi su altri siti More sharing options...
frenz10 Inserita: 10 febbraio 2010 Segnala Share Inserita: 10 febbraio 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 al commento Condividi su altri siti More sharing options...
frenz10 Inserita: 10 febbraio 2010 Segnala Share Inserita: 10 febbraio 2010 (modificato) 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(); } } Modificato: 10 febbraio 2010 da frenz10 Link al commento Condividi su altri siti More sharing options...
frenz10 Inserita: 10 febbraio 2010 Segnala Share Inserita: 10 febbraio 2010 niente di nuovo? Link al commento Condividi su altri siti More sharing options...
frenz10 Inserita: 10 febbraio 2010 Segnala Share Inserita: 10 febbraio 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 al commento Condividi su altri siti More sharing options...
einsteinmc2 Inserita: 14 febbraio 2010 Autore Segnala Share Inserita: 14 febbraio 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 al commento Condividi su altri siti More sharing options...
frenz10 Inserita: 14 febbraio 2010 Segnala Share Inserita: 14 febbraio 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 al commento Condividi su altri siti More sharing options...
einsteinmc2 Inserita: 14 febbraio 2010 Autore Segnala Share Inserita: 14 febbraio 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 al commento Condividi su altri siti More sharing options...
Messaggi consigliati
Crea un account o accedi per commentare
Devi essere un utente per poter lasciare un commento
Crea un account
Registrati per un nuovo account nella nostra comunità. è facile!
Registra un nuovo accountAccedi
Hai già un account? Accedi qui.
Accedi ora