Invio mail asincrono la pagina

mercoledì 04 marzo 2009 - 17.44

augusto890 Profilo | Junior Member

Ciao ragazzi, ho sviluppato un applicativo web con framework 3.5 di invio mail di vario tipo. questo deve concedere l'invio anche di 10ine di migliaia di mail...solo che questo metodo puo impiegarci anche varie ore...volevo chiedere...e possibile fare che dopo che lancio l'evento questo se lo processi tutto il server...e il browser rimanga rilasciato? grazie. Luca

rossimarko Profilo | Guru

Ciao Luca,

si certo, però dovrai modificare l'architettura della tua applicazione. Io ti consiglio di farti una coda su database (quindi dalla pagina salvi solo dei record nel db) e poi puoi creare un servizio windows in .net che si occupa dell'invio. In pratica questo servizio non dovrà fare altro che caricare i dati dalla tabella delle mail da inviare e poi fare l'invio vero e proprio
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

augusto890 Profilo | Junior Member

in che senso? riusciresti a essere più chiaro?
grazie per la risposta...

rossimarko Profilo | Guru

I windows service sono delle applicazioni (senza interfaccia utente) che girano in background all'interno di windows.

Qui trovi un esempio di creazione http://www.developer.com/net/csharp/article.php/2173801 ma se cerchi in internet ce ne sono molti altri

Visto che devi inviare molti dati e la pagina potrebbe rimanere in attesa per molto tempo il mio suggerimento era quello di demandare l'invio ad un servizio. In pratica la tua pagina non invia le mail ma salva solamente i dati di invio in una coda su database. Questa coda verrà letta dal tuo servizio che si occuperà di fare l'invio vero e proprio.

Se ad esempio le mail da inviare sono 1000 la tua pagina inserirà i 1000 record e poi segnalerà all'utente il fatto che le mail sono in coda di inviio, il servizio invece ad intervalli regolari (con un timer) andrà a caricare i dati delle mail da inviare da db ed effettuerà l'invio.

PS: la stessa cosa del servizio potrebbe essere fatta da un'applicazione console o windowsforms solo che poi non verrebbe avviata in automatico all'avvio del server (come avviene per i servizi) e necessata del login dell'utente (i servizi girano in background indipendentemente dal fatto che l'utente sia loggato)

Marco
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

augusto890 Profilo | Junior Member

ok, ora è un po più chiaro.
Grazie mille...ci proverò...(più che altro non ne ho mai scritto uno).
un'altra cosina...come faccio a chiamarla dalla pagina asp...e passargli parametri?

Grazie, Luca

rossimarko Profilo | Guru

Dalla pagina devi semplicemente salvare i dati in una tabella.

Nel servizio devi inserire un timer che schedulerai perchè giri ogni xx secondi. Poi all'interno dell'evento del timer chiamerai una funzione che si occuperà di:
- caricare dal database elenco delle mail da inviare
- modificare lo stato del record una volta inviata la mail (così le vecchie mail non vengono ricaricate le volte successive)
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

augusto890 Profilo | Junior Member

Riekkomi ancora...ho provato a usare i windows service...ma purtroppo non ho abbastanza permessi per usarli...
ho però scoperto che è possibile farlo anche con i thread...dici che è fattibile? io ho provato...solo che ha funzionato solo una volta...nn so perche!

qst è la dichiarazione e la chiamata d'inizio.

'evento onlick della pagina Protected Sub invio_Click(ByVal sender As Object, ByVal e As System.EventArgs) Dim thread1 As New Thread(AddressOf invio_mail) thread1.Start() End Sub

Grazie
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5