API
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. using UnivateProperties_API.Helpers;
  2. using System;
  3. using System.ComponentModel.DataAnnotations.Schema;
  4. using System.Net.Mail;
  5. using System.Text;
  6. namespace UnivateProperties_API.Model.Communication
  7. {
  8. public class Email : BaseEntity
  9. {
  10. #region Constructor
  11. public Email()
  12. {
  13. }
  14. public Email(int senderId)
  15. {
  16. SenderId = senderId;
  17. }
  18. public Email(int senderId, string toAddress, string toDisplay, string cc, string bcc, string subject, string body, bool isHtml = true)
  19. {
  20. SenderId = senderId;
  21. To = toAddress;
  22. ToDisplay = toDisplay;
  23. BCC = bcc;
  24. CC = cc;
  25. IsBodyHtml = isHtml;
  26. Body = body;
  27. Subject = subject;
  28. }
  29. #endregion Constructor
  30. #region Properties
  31. [ForeignKey("Sender")]
  32. public int SenderId { get; set; }
  33. public string Comment { get; set; }
  34. public string Subject { get; set; }
  35. public bool IsBodyHtml { get; set; }
  36. public string CC { get; set; }
  37. public string BCC { get; set; }
  38. public string Body { get; set; }
  39. public string To { get; set; }
  40. public string ToDisplay { get; set; }
  41. public virtual SMTPAccount Sender { get; set; }
  42. #endregion
  43. #region Methods
  44. public virtual void GetSMTPAccount()
  45. {
  46. if (SenderId > 0)
  47. {
  48. }
  49. }
  50. public virtual bool SendMail()
  51. {
  52. try
  53. {
  54. if (MyCommon.IsValidEmail(To))
  55. {
  56. if (Sender != null && Sender.SMTPHost != null)
  57. {
  58. using (SmtpClient smtp = new SmtpClient(Sender.SMTPHost.Host))
  59. {
  60. MailMessage mail = GetMailMessage();
  61. smtp.UseDefaultCredentials = Sender.SMTPHost.NeedsAuthorize;
  62. smtp.Credentials = Sender.SMTPHost.GetNetworkCredential();
  63. smtp.EnableSsl = Sender.SMTPHost.UseSSL;
  64. smtp.Send(mail);
  65. Comment = "Send";
  66. return true;
  67. };
  68. }
  69. else Comment = "NoSender";
  70. }
  71. }
  72. catch (SmtpFailedRecipientException ex)
  73. {
  74. SmtpStatusCode statusCode = ex.StatusCode;
  75. if (statusCode == SmtpStatusCode.MailboxBusy ||
  76. statusCode == SmtpStatusCode.MailboxUnavailable ||
  77. statusCode == SmtpStatusCode.TransactionFailed)
  78. {
  79. Comment = $"SmtpFailedRecipientException - Msg - {ex.Message} Stack - {ex.StackTrace}";
  80. //TODO: Return correct error message
  81. return false;
  82. }
  83. else
  84. {
  85. Comment = $"SmtpFailedRecipientException - Msg - {ex.Message} Stack - {ex.StackTrace}";
  86. //TODO: Return correct error message
  87. return false;
  88. }
  89. }
  90. catch (Exception ex)
  91. {
  92. Comment = $"Exception - Msg - {ex.Message} Stack - {ex.StackTrace}";
  93. //TODO: Return correct error message
  94. return false;
  95. }
  96. return true;
  97. }
  98. private MailMessage GetMailMessage()
  99. {
  100. MailMessage mail = new MailMessage();
  101. mail.To.Add(new MailAddress(To, ToDisplay));
  102. if (!string.IsNullOrEmpty(CC))
  103. {
  104. foreach (var item in CC.Split(';'))
  105. {
  106. mail.CC.Add(item);
  107. }
  108. }
  109. if (!string.IsNullOrEmpty(BCC))
  110. {
  111. foreach (var item in BCC.Split(';'))
  112. {
  113. mail.Bcc.Add(item);
  114. }
  115. }
  116. mail.Subject = Subject;
  117. mail.Body = Body;
  118. mail.IsBodyHtml = IsBodyHtml;
  119. if (IsBodyHtml)
  120. {
  121. mail.BodyEncoding = Encoding.ASCII;
  122. }
  123. else mail.BodyEncoding = Encoding.UTF8;
  124. mail.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure;
  125. mail.Sender = new MailAddress(Sender.Address, Sender.DisplayName);
  126. mail.From = mail.Sender;
  127. return mail;
  128. }
  129. #endregion Methods
  130. }
  131. }