Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    89

    asp.net problemi con invio mail

    Forse il titolo di questo post non è proprio chiaro.
    La mia esigenza è questa, ho una applicazione web realizzata in Vb.net su provider aruba, in questa applicazione gestisco l'invio di una news letters.
    Per l'invio della news letter uso un form in cui l'utente scrive in un testo il contenuto da scrivere nella mail che sarà poi la news letters e sempre nel form dispone gli eventuali allegati poi classico button per la conferma di invio news letters.
    Per la creazione ed invio della mail uso la system.web.MailMessage, e tutto ok sia nella costruzione della mail con il suo testo ed eventuali allegati e la lista delle mail di destinazione che pongo. Il probrema è la lentezza ovvero accade che al click sul button di invio si resta in attesa per diversi minuti e da l'idea all'utente che qualcosa non funzioni. Quindi l'utente esce dalla pagina e spesso riprova a eseguire la funzione. Risultato vengono generate e inviate diverse news letters con scocciatura dei riceventi.
    Altro dato forse utile la lista delle mail a cui si invia la news letters è di circa 400 nominativi.

    E' possibile fare in modo che al click sul button invia, l'esecuzione dell'invio mail venga eseguita in background senza tenere impegnato l'utente che vede il form restare in attesa di esecuzione?
    sperando di essere stata chiara
    grazie

    Stefy

  2. #2
    Utente di HTML.it L'avatar di rsdpzed
    Registrato dal
    Aug 2001
    Messaggi
    764
    Un modo mooolto veloce per evitare almeno che si inviino piu di una volta le email potrebbe essere:

    codice:
    //nella funzione che manda le email...
    if (!DBFlag.IsBusy)
    {
        new Thread(() => 
            {
                DBFlag.IsBusy = true;
                //codice per inviare le email
                DBFlag.IsBusy = false;
            }).Start();
    }
    IsBusy è un semplice flag, il problema è che non puoi usare Session o application dentro il thred in backgraund per memorizzare il flag. La soluzione (un po' spartana) è salvare questo flag da qualche parte tipo il database o un file txt e wrappare tutto in una classe che nell'esempio su ho chiamato DBFlag.

    codice:
    public class DBFlag
    {
        public static bool IsBusy
        {
            get { //codice che legge il flag dal db o file di testo }
            set { //codice che scrive il flag nel db o file di testo }
        }
    }
    EDIT:
    ho scritto degli snippets in c# spero si capisca uguale

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    89
    grazie per l'idea di usare il thread

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