CoreMailer.cs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. using System;
  2. using System.Collections.Generic;
  3. namespace InABox.Mail
  4. {
  5. public abstract class CoreMailer<TFolderType, TSummaryType, TMessageType> : ICoreMailer, IDisposable where TFolderType : ICoreMailFolder
  6. where TSummaryType : ICoreMailSummary
  7. where TMessageType : ICoreMailMessage
  8. {
  9. #region Public Properties
  10. public string MailboxHost { get; set; }
  11. public int MailboxPort { get; set; }
  12. public string MailboxDomain { get; set; }
  13. public string MailboxUserName { get; set; }
  14. public string MailboxPassword { get; set; }
  15. public string SMTPHost { get; set; }
  16. public int SMTPPort { get; set; }
  17. public string SMTPDomain { get; set; }
  18. public string SMTPUserName { get; set; }
  19. public string SMTPPassword { get; set; }
  20. #endregion
  21. #region Public Methods
  22. public bool Connect()
  23. {
  24. return DoConnect();
  25. }
  26. public bool IsConnected => GetIsConnected();
  27. public ICoreMailMessage CreateMessage()
  28. {
  29. return DoCreateMessage();
  30. }
  31. public ICoreMailFolder FindFolder(ICoreMailFolder folder, string name)
  32. {
  33. return DoFindFolder((TFolderType)folder, name);
  34. }
  35. public ICoreMailFolder Inbox => GetInbox();
  36. public ICoreMailFolder SentItems => GetSentItems();
  37. public IEnumerable<ICoreMailMessage> GetMessages(ICoreMailFolder folder)
  38. {
  39. return DoGetMessages((TFolderType)folder) as IEnumerable<ICoreMailMessage>;
  40. }
  41. public ICoreMailMessage GetMessage(ICoreMailFolder folder, string id)
  42. {
  43. return DoGetMessage((TFolderType)folder, id);
  44. }
  45. public IEnumerable<ICoreMailSummary> ListMessages(ICoreMailFolder folder, int min = 0, int max = int.MaxValue)
  46. {
  47. return DoListMessages((TFolderType)folder, min, max) as IEnumerable<ICoreMailSummary>;
  48. }
  49. public bool MoveMessage(ICoreMailMessage message, ICoreMailFolder to)
  50. {
  51. return DoMoveMessage((TMessageType)message, (TFolderType)to);
  52. }
  53. public bool SendMessage(ICoreMailMessage message)
  54. {
  55. return DoSendMessage((TMessageType)message);
  56. }
  57. public bool SaveDraft(ICoreMailMessage message)
  58. {
  59. return DoSaveDraft((TMessageType)message);
  60. }
  61. #endregion
  62. #region Setup / Teardown
  63. public CoreMailer()
  64. {
  65. Initialize();
  66. }
  67. protected abstract void Initialize();
  68. public abstract void Dispose();
  69. #endregion
  70. #region Protected/Abstract Methods
  71. protected abstract bool DoConnect();
  72. protected abstract bool GetIsConnected();
  73. protected abstract TFolderType DoFindFolder(TFolderType folder, string name);
  74. protected abstract TFolderType GetInbox();
  75. protected abstract TFolderType GetSentItems();
  76. protected abstract TMessageType DoGetMessage(TFolderType folder, string id);
  77. protected abstract IEnumerable<TMessageType> DoGetMessages(TFolderType folder);
  78. protected abstract IEnumerable<TSummaryType> DoListMessages(TFolderType folder, int min = 0, int max = int.MaxValue);
  79. protected abstract TMessageType DoCreateMessage();
  80. protected abstract bool DoMoveMessage(TMessageType message, TFolderType to);
  81. protected abstract bool DoSendMessage(TMessageType message);
  82. protected abstract bool DoSaveDraft(TMessageType message);
  83. #endregion
  84. }
  85. }