public static async Task<bool> SendAsync(ListaSpesaDto listaSpesa) { SmtpClient client = null; bool result = false; try { EmailDto message = await CreateBody(listaSpesa); // Credentials: var credentialUserName = ConfigurationManager.AppSettings["emailFrom"]; var sentFrom = ConfigurationManager.AppSettings["emailFrom"]; var pwd = ConfigurationManager.AppSettings["emailPassword"]; int port = Convert.ToInt32(ConfigurationManager.AppSettings["smtpPort"]); // Configure the client: client = new SmtpClient(ConfigurationManager.AppSettings["smtpClient"]) { Port = port, DeliveryMethod = SmtpDeliveryMethod.Network, UseDefaultCredentials = false, EnableSsl = Convert.ToBoolean(ConfigurationManager.AppSettings["smtpEnableSSL"]), Credentials = new NetworkCredential(credentialUserName, pwd) }; AlternateView av = AlternateView.CreateAlternateViewFromString(message.Body, null, MediaTypeNames.Text.Html); // Create the message: MailMessage mail = new MailMessage() { IsBodyHtml = true, Priority = MailPriority.High, From = new MailAddress(ConfigurationManager.AppSettings["emailFrom"], "WishDays"), Subject = message.Subject }; mail.AlternateViews.Add(av); (await GetAddresses(message.Destination)).ToList().ForEach(m => { mail.To.Add(m); }); mail.From = new MailAddress(sentFrom); mail.Subject = message.Subject; // Send: await client.SendMailAsync(mail); result = true; } catch (Exception ex) { Console.Write(ex); } finally { client.Dispose(); } return result; }
public static async Task<EmailDto> CreateBody(ListaSpesaDto listaSpesa) { StringBuilder bodyMail = new StringBuilder(); // Caricare il testo della mail e riempire i dati string mailText = File.ReadAllText(HttpContext.Current.Server.MapPath("~/Service/mailTemplate.html")); mailText = mailText.Replace("{USER}", await CreateUserRows(listaSpesa)); mailText = mailText.Replace("{VOCE}", await CreateVociRows(listaSpesa)); return new EmailDto() { Body = mailText, Destination = listaSpesa.Utenti.Select(x => x.Email).Aggregate((current, next) => String.Concat(current, ";", next)), Subject = String.Format("Invio lista della spesa {0}", listaSpesa.Nome) }; }
private static async Task<string> CreateUserRows(ListaSpesaDto listaSpesa) { return await Task.Run(() => { StringBuilder rows = new StringBuilder(); foreach (Utente u in listaSpesa.Utenti) { rows.AppendFormat("<tr><td>{0}</td></tr>", u.Username); } return rows.ToString(); }); }
private static async Task<string> CreateVociRows(ListaSpesaDto listaSpesa) { return await Task.Run(() => { StringBuilder rows = new StringBuilder(); foreach (VoceDto v in listaSpesa.Voci) { rows.AppendFormat("<tr><td>{0}</td><td>{1}</td></tr>", v.Name, v.Comprata? "Si":"No"); } return rows.ToString(); }); }