2009-05-31 9 views
5

c'è qualche modo in MVC per far funzionare il SendAsync System.Net.Mail, invece del metodo di blocco di invio?ASP.NET MVC: Invia e-mail utilizzando SendAsync (System.Net.Mail)

Ho provato a utilizzarlo, ma ho premuto l'errore "Pagina che inizia un'operazione asincrona deve avere l'attributo Async", che ovviamente non posso risolvere (o posso?) Perché non esiste una pagina ASPX con una direttiva @Page dove potrei aggiungere l'attributo Async.

aiuto è molto apprezzato :(

risposta

1

Si può prendere in considerazione di mettere l'e-mail in un tabella di database e quindi disporre di un demone che invia messaggi di posta elettronica elaborando la coda.

a) if youre not sending billions of emails you can have a log of what you sent 
b) you can resend if something fails. 

dipende dall'importanza di queste e-mail, ma se sono importanti da un punto di vista aziendale e non devono perdersi, è necessario utilizzare questo approccio.

+0

@downvoter - urm così che cosa se il server di posta è giù o inaccessibile voi? voglio perdere la posta –

+0

+1 - Simon, questo è un principio del suono, che ho praticato con successo, aiuta anche a separare le preoccupazioni e a gestire una singola connessione al server SMTP (personalizziamo la sicurezza delle applicazioni per filtrare le app che sono permesse usare il nostro servizio WCF). – Russell

2

Se si utilizza un servizio di terze parti come Gmail per inviare la posta elettronica e fare affidamento su SendEmail o SendAsync, è possibile impostare il proprio server SMTP che verrà quindi inoltrato su Gmail. Il vantaggio è che SendEmail tornerà molto più veloce e potresti essere in grado di dimenticare l'intera cosa asincrona.

In questo modo se gmail ti rifiuta per qualsiasi motivo l'email sarà ancora nella tua coda locale.

Questo è un modo rapido e sporco per ottenere una configurazione di invio e-mail un po 'affidabile.

Instructions (not personally tested, but i did this years ago*) o see this for Windows 7

* naturalmente mi sono ricordato solo ho fatto questo dopo aver trascorso un lungo periodo di conversione verso ASYNC :-(