2010-06-28 11 views
7

Devo scrivere la domanda per l'invio di newsletter. qual è il modo migliore per inviare newsletter a migliaia di utenti? mia esigenza èInvia newsletter in asp.net a circa 10000 e-mail

  1. Ogni posta è seprately come A:
  2. Ogni posta è unico collegamento Cancellati

IS è bene utilizzare SMTP class mail .net? Sembro aound possono domande in questo modo, ma non riesco a decidere quale approccio dovrei andare? Ci sono molti suggerimenti

  1. multi threaded servizio Windows
  2. Usa Mail Server
  3. Aggiungere Thread.sleep (2000) tra ogni invio.

qualcuno può suggerire un buon modo per imepement questo?

risposta

8

Non consiglierei la pagina web di asp.net da inviare, anche se lo si avvia in un thread in background separato. Penso che correrai il rischio che il server ricicli il tuo processo nel bel mezzo dell'invio, il che significherebbe rovinarlo. Hai davvero bisogno di scrivere una sorta di servizio o applicazione separati per inviare le tue email.

L'opzione più semplice sarebbe quella di creare una semplice e veloce console o un'applicazione di Windows form.

Anche la registrazione è fondamentale proprio come ha detto l'altro poster. Se fallisce, vuoi sapere esattamente cosa è stato spedito e dove è stato interrotto, così quando lo riavvii non invii mail a tutte le persone per cui ha funzionato di nuovo. Vuoi essere in grado di inserire il punto di partenza per l'invio, quindi se è necessario riavviare al numero di posta elettronica # 5000 è possibile.

Le classi nel namespace System.Net.Mail funzioneranno correttamente per l'invio della posta.

Uno dei maggiori problemi sarà trovare un host di posta elettronica che ti consenta di inviare tante e-mail. La maggior parte degli host di posta elettronica ha limitazioni e talvolta cambia a seconda delle condizioni del server, quindi se il server viene utilizzato intensamente, i limiti di posta elettronica saranno più restrittivi e sarà possibile impostare solo 500 email all'ora.

Abbiamo una newsletter che arriva a circa 20000 persone come email separate e abbiamo dovuto giocare con il ritardo tra le e-mail finché non ne abbiamo trovato uno che avrebbe funzionato per il nostro host di posta elettronica. Abbiamo finito con 1,2 secondi tra le email, quindi questo potrebbe essere un buon punto di partenza.

Penso che ci siano host di posta elettronica specializzati in invii in grandi quantità, quindi se si ottiene uno di quelli potrebbe non essere un problema.

Anche se si ospita la propria e-mail questo potrebbe non essere un problema. E se si ospita la propria posta, si avrà la possibilità di eliminare la posta nella directory di prelievo e si potrebbe semplicemente scaricare tutto quanto in esso a proprio piacimento, e lasciare che il servizio di posta elettronica lo ritiri al proprio ritmo.

EDIT: Ecco le impostazioni da aggiungere al file di configurazione per l'impostazione della directory di prelievo

<system.net> 
    <mailSettings> 
     <smtp from="[email protected]" deliveryMethod="SpecifiedPickupDirectory" > 
      <specifiedPickupDirectory pickupDirectoryLocation="Z:\Path\To\Pickup"/> 
     </smtp> 
    </mailSettings> 
</system.net> 
+0

hi cris, grazie per la risposta. abbiamo il nostro server di scambio. Mi chiedo come posso eliminare la posta nella directory di prelievo? –

+0

Nell'elemento mailsettings del file di configurazione è possibile modificare il metodo di consegna. Puoi anche farlo a livello di programmazione. http://msdn.microsoft.com/en-us/library/ms164240.aspx –

+0

Grazie Cris mi darò prova –

1

Ho scritto pagine che inviano e-mail, ma non quasi il volume desiderato. Tuttavia, mi sento di raccomandare il seguente sulla base di codice che ho implementato in passato:

  • utilizzare l'applicazione web di scrivere l'e-mail e tutto il destinatario si rivolge alla tabella di database (s).

  • Un processo al di fuori di ASP.NET invia effettivamente le e-mail. Questo potrebbe essere un file vbs impostato come operazione pianificata o (preferibilmente) un servizio Windows. Il processo prende il testo dell'e-mail, aggiunge il link di annullamento dell'iscrizione e una volta inviato segnala correttamente il record del database come inviato. In questo modo, se l'invio fallisce, può riprovare più tardi (il processo di invio scorre su tutti i record contrassegnati come non inviati).

  • Se è necessario un registro di ciò che è stato inviato e quando, è sufficiente mantenere i record inviati nelle tabelle del database. Altrimenti, elimina i record una volta inviati correttamente.

IMHO l'invio di messaggi di posta elettronica all'interno del processo di lavoro ASP.NET è una cattiva idea, perché non si sa quanto tempo ci vorrà e se l'invio non c'è poco opportunità di riprovare prima che la pagina timeout.

2

Sicuramente non fare questo in ASP.NET. Questo è uno dei maggiori errori commessi dai nuovi sviluppatori web.

Questa deve essere un'app o un servizio di Windows in grado di gestire questo volume.

1

Creare una pagina Web per "Progettare" la newsletter in. Quando si preme Invia, mettere in coda la newsletter da qualche parte (database) e utilizzare un altro programma (servizio Windows, ecc.) Per inviare la lettera in coda. Questo sarà molte volte più efficace e potenzialmente tollerante ai guasti se progettato correttamente.

1

Ho scritto un modulo Newsletter (come parte di un sistema più grande) in ASPNET MVC 2, Entity Framework e utilizzando lo spazio dei nomi System.Net.Mail. È avviato in vista e in realtà viene eseguito solo su un controller con un metodo di supporto per eseguire l'invio. Man mano che ogni e-mail viene inviata, tengo traccia dell'esistenza di un hard bouce (viene generata un'eccezione) e aggiorno il record del database affermando un errore con l'eccezione, altrimenti aggiorno il record affermando il successo. Facciamo anche personalizzazione, quindi abbiamo "tag" che vengono sostituiti da un campo aggiuntivo nel database (memorizzato come XML per la flessibilità). Questo aiuta a gestire una funzione di annullamento dell'iscrizione.

Il mio codice è abbastanza semplice (per favore non scottarmi per l'utilizzo di gestione delle eccezioni come logica di business;) e funziona come un fascino.

Questo è tutto fatto su un VPS a http://maximumasp.com che ospita anche 4 siti con traffico abbastanza decente. Usiamo i loro server SMTP. Abbiamo comunicato loro che avevamo bisogno di questo servizio e non abbiamo avuto problemi di relazione.

Abbiamo avuto 2 GB di RAM sulla macchina che esegue Windows 2008 e stava facendo 6 e-mail/sec. L'abbiamo rilevato fino a 3 GB dato che i siti web ne avevano bisogno e ora il mailout sta facendo circa 20 messaggi al secondo. I nostri mailout variano da 2.000 a 100.000 indirizzi email.

In breve, ASP.NET può essere utilizzato per gestire un mailout e, se si aggiunge un po 'di logica per gestire l'aggiornamento dei record, la preoccupazione di perdere la strada a metà invio viene attenuata. Sì, probabilmente ci sono alcuni modi per farlo. Stiamo esaminando MQMS e il threading, e separandolo dal servizio di Windows per renderlo più stabile e scalabile poichè inseriamo più client e elenchi più grandi, ma per ora funziona bene con un reporting e una gestione degli errori ragionevoli.

+0

FYI abbiamo aumentato la RAM di nuovo a 4 GB (devo amare gli ambienti virtuali) e ora stiamo pompando fuori 35emails/sec. Si sta rivelando una configurazione molto stabile. Puoi navigare lontano dalla pagina e tornare più tardi per visualizzare il rapporto. Abbiamo aggiunto alcune semplici notifiche via email di quando sono state completate anche alcune percentuali di invio. Avevamo in programma di aggiungere code più sofisticate, ma sta gestendo il carico senza intoppi. Non aver paura di utilizzare un server web .NET per gestire grandi mailouts! –