Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
ASP.NET 2.0 / 3.5 / 4.0
Invio Email in modo Asyncrono
venerdì 06 luglio 2012 - 16.56
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
mchieffi
Profilo
| Newbie
2
messaggi | Data Invio:
ven 6 lug 2012 - 16:56
Lo scopo è di mandare una email di notifica a circa 300 utenti recuperati da un DB
1 problema metodo sincrono:
all'inizio recuperavo tutti i destinatari li accorpavo ad un unica email e la mandavo; questa da un problema di time-out
2 problema metodo sincrono:
ho risolto il 1 problema mandando l'email singolarmente ad ogni utente; questo provoca per 279 persone un'attesa di circa 2 min
A questo punto ho deciso di mandare l'email col metodo asincrono, ma ora ho questo errore:
{"Le operazioni asincrone non sono consentite in questo contesto. Per poter avviare un'operazione asincrona, una pagina deve avere l'attributo Async impostato su true e tale operazione può essere avviata in una pagina solo prima dell'evento PreRenderComplete."}
Cercando su internet la soluzione al problema è semplicissima basta dichiarare nella pagina ASPX:
<%@ Page Async="true" %>
Ovviamente la mia pagina di partenza è addannuncio.ASCX che non mi permette di aggiungere il suffisso @page
Suggerimenti????
Ti metto la routine di invio emali sotto
public static bool sendEmailnotifica(string to, string obj, string html, int priorita)
{
string from = ConfigurationManager.AppSettings["em_email"];
string from_name = ConfigurationManager.AppSettings["em_from_name"];
string smtp_server = ConfigurationManager.AppSettings["em_smtp_server"];
string username = ConfigurationManager.AppSettings["em_user_name"];
string password = ConfigurationManager.AppSettings["em_password"];
string immagine = HttpContext.Current.Server.MapPath("/srchome/img/logo.jpg");
// Command line argument must the the SMTP host.
SmtpClient client = new SmtpClient(smtp_server);
//mail che funziona senza logo interno
MailMessage Msg = new MailMessage();
//Imposto oggetto
Msg.Subject = obj;
//Imposta il mittente
Msg.From = new MailAddress(from, from_name);
//Imposto contenuto
Msg.Body = html;
//in HTML
Msg.IsBodyHtml = true;
AlternateView avHtml = AlternateView.CreateAlternateViewFromString(html, null, MediaTypeNames.Text.Html);
// Creiamo un oggetto LinkedResource per ogni immagine da
//inserire nell'email
LinkedResource pic1 = new LinkedResource(immagine, MediaTypeNames.Image.Jpeg);
pic1.ContentId = "Im1";
avHtml.LinkedResources.Add(pic1);
// Creiamo una vista alternativa per i client che non
//supportano la visualizzazione di contenuto HTML
//string testoAlternativo = "Non possibile visualizzare il contenuto HTML contenuto nel messaggio.";
//AlternateView avText = AlternateView.CreateAlternateViewFromString(testoAlternativo, null, MediaTypeNames.Text.Plain);
// Utilizziamo MailMessage.AlternateViews al posto di
//MailMessage.Body
//MailMessage m = new MailMessage();
Msg.AlternateViews.Add(avHtml);
//Msg.AlternateViews.Add(avText);
//Imposto il Server Smtp
SmtpClient Smtp = new SmtpClient(smtp_server);
//Possiamo impostare differenti metodi di spedizione.
//Imposta consegna diretta.
Smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
//Alcuni Server SMTP richiedono l'accesso autenticato
NetworkCredential oCredential = new
NetworkCredential(username, password);
Smtp.UseDefaultCredentials = false;
Smtp.Credentials = new System.Net.NetworkCredential(username, password);
// Set the method that is called back when the send operation ends.
client.SendCompleted += new SendCompletedEventHandler(SendCompletedCallback);
string userState = "test message1";
//La propriet .To una collezione di destinatari,
//quindi possiamo addizionare quanti destinatari vogliamo.
string[] destinatari = to.Split(',');
if (destinatari.Length > 0)
{
for (int i = 0; i < destinatari.Length; i++)
{
if (destinatari[i] != "" && destinatari[i] != null)
{
//Msg.Bcc.Add(new MailAddress(destinatari[i], destinatari[i]));
Msg.Bcc.Add(new MailAddress("mchieffi@westsud.com", "mchieffi@westsud.com"));
//Spediamo la mail
Smtp.SendAsync(Msg, null);
//Smtp.Send(Msg);
Msg.Bcc.Clear();
}
}
}
return true;
}
Marco
Torna su
Stanze Forum
Elenco Threads
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 !