Mass Email Async

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Configuration;
  4. using System.Linq;
  5. using System.Net.Mail;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8.  
  9. public class EmailSender
  10. {
  11. readonly string _clientAddress;
  12. public EmailSender(string client)
  13. {
  14. _clientAddress = client;
  15. }
  16. public void SendEmails(List<MailMessage> message)
  17. {
  18. var totalMessages = message.Count;
  19. var tasks = new List<Task>();
  20. foreach (var item in message)
  21. {
  22. tasks.Add(SendMailAsync(item));
  23. }
  24. while (tasks.Count > 0)
  25. {
  26. var idx = Task.WaitAny(tasks.ToArray());
  27. tasks.RemoveAt(idx);
  28. }
  29. }
  30. async Task SendMailAsync(MailMessage message)
  31. {
  32. await Task.Run(() =>
  33. {
  34. SendEmail(message);
  35. });
  36. }
  37. public void SendEmail(MailMessage message, int tryCount = 0)
  38. {
  39. try
  40. {
  41. using (var client = new SmtpClient(_clientAddress))
  42. {
  43. client.Send(message);
  44. }
  45. }
  46. catch(Exception)
  47. {
  48. if (tryCount > 3)
  49. throw;
  50. SendEmail(message, tryCount++);
  51. }
  52. }
  53.  
  54.  
  55. }