EmailStore.cs 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using Comal.Classes;
  4. using InABox.Core;
  5. using InABox.Mail;
  6. namespace Comal.Stores
  7. {
  8. internal class EmailStore : BaseStore<Email>
  9. {
  10. protected override void BeforeSave(Email entity)
  11. {
  12. base.BeforeSave(entity);
  13. var user = FindSubStore<User>().Query(
  14. new Filter<User>(x => x.UserID).IsEqualTo(UserID),
  15. Columns.None<User>().Add(x => x.EmailHost)
  16. .Add(x => x.EmailDomain)
  17. .Add(x => x.EmailUserID)
  18. .Add(x => x.EmailPassword))
  19. .ToObjects<User>().FirstOrDefault();
  20. if (user != null)
  21. {
  22. var mailer = new ExchangeMailer
  23. {
  24. MailboxHost = user.EmailHost, MailboxDomain = user.EmailDomain, MailboxUserName = user.EmailUserID,
  25. MailboxPassword = user.EmailPassword
  26. };
  27. if (mailer.Connect())
  28. {
  29. var msg = mailer.CreateMessage();
  30. msg.To = entity.To;
  31. msg.CC = entity.CC;
  32. msg.BCC = entity.BCC;
  33. msg.Subject = entity.Subject;
  34. msg.Body = entity.Message;
  35. var bOK = mailer.SendMessage(msg);
  36. //if (!bOK)
  37. // entity.History.Add(new EntityHistory() { User = UserID, Timestamp = DateTime.Now, Note = "Unable to Send Email" });
  38. //else
  39. // entity.History.Add(new EntityHistory() { User = UserID, Timestamp = DateTime.Now, Note = "Email Sent Successfully" });
  40. }
  41. //entity.History.Add(new EntityHistory() { User = UserID, Timestamp = DateTime.Now, Note = "Unable to Connect to Exchange Mail Server" });
  42. }
  43. }
  44. protected override void OnSave(Email entity, ref string auditnote)
  45. {
  46. // Actually, we don't want save these - (1) there's simply too many of them, (2) we're not using them (3) if we're really keen, we can trawl the logs
  47. //base.OnSave(entity);
  48. }
  49. protected override void OnSave(Email[] entities, ref string auditnote)
  50. {
  51. //base.OnSave(entities);
  52. }
  53. }
  54. }