MailSender.cs 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. using MailKit;
  2. using MailKit.Net.Smtp;
  3. using Microsoft.Extensions.Options;
  4. using MimeKit;
  5. using MTWorkHR.Core.Email;
  6. using MTWorkHR.Core.Entities;
  7. using MTWorkHR.Core.Global;
  8. //using SendGrid;
  9. //using SendGrid.Helpers.Mail;
  10. using System;
  11. using System.Collections.Generic;
  12. using System.Linq;
  13. using System.Text;
  14. using System.Threading.Tasks;
  15. namespace MTWorkHR.Infrastructure.EmailService
  16. {
  17. public class MailSender : IMailSender
  18. {
  19. public AppSettingsConfiguration _configuration { get; }
  20. public MailSender(AppSettingsConfiguration configuration)
  21. {
  22. _configuration = configuration;
  23. }
  24. //public async Task<bool> SendEmailGrid(EmailMessage email)
  25. //{
  26. // var client = new SendGridClient(_configuration.MailSettings.ApiKey);
  27. // var to = new EmailAddress(email.To);
  28. // var from = new EmailAddress
  29. // {
  30. // Email = _configuration.MailSettings.FromAddress,
  31. // Name = _configuration.MailSettings.FromName
  32. // };
  33. // email.Body = email.Body + " /n" + email.url;
  34. // var message = MailHelper.CreateSingleEmail(from, to, email.Subject, email.Body, email.Body);
  35. // var response = await client.SendEmailAsync(message);
  36. // return response.IsSuccessStatusCode;
  37. //}
  38. public async Task<bool> SendEmail(EmailMessage email)
  39. {
  40. var mailTo = email.To;
  41. var settings = _configuration.MailSettings;
  42. if (settings.FromAddress == null || settings.FromAddress== "" || settings.Password == null || settings.TemplatePath == null || settings.Host == null || settings.Port == 0 || mailTo == null)
  43. return false;
  44. //string FilePath = _configuration.MailSettings.TemplatePath;
  45. //StreamReader str = new StreamReader(FilePath);
  46. //string MailText = str.ReadToEnd();
  47. //str.Close();
  48. //MailText = MailText.Replace("[NotificationType]", email.Subject).Replace("[Info]", email.Body).Replace("[Link]", email.url );
  49. var emailObj = new MimeMessage();
  50. emailObj.From.Add(new MailboxAddress("Zinab Elgendy", _configuration.MailSettings.FromAddress)); // Ensure From matches authenticated email
  51. emailObj.Sender = MailboxAddress.Parse(_configuration.MailSettings.FromAddress);
  52. emailObj.To.Add(MailboxAddress.Parse(mailTo));
  53. emailObj.Subject = email.Subject;
  54. var builder = new BodyBuilder();
  55. email.Body = email.Body +
  56. ( string.IsNullOrEmpty( email.url ) ?"": "Please click on <a href =\"" + email.url + "\">this link</a> or copy the following url and open it : \' " + email.url+"\'");
  57. builder.HtmlBody = email.Body;
  58. emailObj.Body = builder.ToMessageBody();
  59. using var logger = new ProtocolLogger("smtp.log", append: false);
  60. using var smtp = new SmtpClient(logger);
  61. try
  62. {
  63. smtp.Connect(_configuration.MailSettings.Host, _configuration.MailSettings.Port, MailKit.Security.SecureSocketOptions.StartTls);
  64. smtp.Authenticate(_configuration.MailSettings.FromAddress, _configuration.MailSettings.Password);
  65. await smtp.SendAsync(emailObj);
  66. //smtp.Disconnect(true);
  67. }
  68. catch (MailKit.Security.AuthenticationException ex)
  69. {
  70. Console.WriteLine($"Authentication failed: {ex.Message}");
  71. throw;
  72. }
  73. catch (Exception ex)
  74. {
  75. Console.WriteLine($"Error sending email: {ex.Message}");
  76. throw;
  77. }
  78. finally
  79. {
  80. await smtp.DisconnectAsync(true);
  81. }
  82. return true;
  83. }
  84. }
  85. }