| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 | using System;using System.Collections.Generic;namespace InABox.Mail{    public abstract class CoreMailer<TFolderType, TSummaryType, TMessageType> : ICoreMailer, IDisposable where TFolderType : ICoreMailFolder        where TSummaryType : ICoreMailSummary        where TMessageType : ICoreMailMessage    {        #region Public Properties        public string MailboxHost { get; set; }        public int MailboxPort { get; set; }        public string MailboxDomain { get; set; }        public string MailboxUserName { get; set; }        public string MailboxPassword { get; set; }        public string SMTPHost { get; set; }        public int SMTPPort { get; set; }        public string SMTPDomain { get; set; }        public string SMTPUserName { get; set; }        public string SMTPPassword { get; set; }        #endregion        #region Public Methods        public bool Connect()        {            return DoConnect();        }        public bool IsConnected => GetIsConnected();        public ICoreMailMessage CreateMessage()        {            return DoCreateMessage();        }        public ICoreMailFolder FindFolder(ICoreMailFolder folder, string name)        {            return DoFindFolder((TFolderType)folder, name);        }        public ICoreMailFolder Inbox => GetInbox();        public ICoreMailFolder SentItems => GetSentItems();        public IEnumerable<ICoreMailMessage> GetMessages(ICoreMailFolder folder)        {            return DoGetMessages((TFolderType)folder) as IEnumerable<ICoreMailMessage>;        }        public ICoreMailMessage GetMessage(ICoreMailFolder folder, string id)        {            return DoGetMessage((TFolderType)folder, id);        }        public IEnumerable<ICoreMailSummary> ListMessages(ICoreMailFolder folder, int min = 0, int max = int.MaxValue)        {            return DoListMessages((TFolderType)folder, min, max) as IEnumerable<ICoreMailSummary>;        }        public bool MoveMessage(ICoreMailMessage message, ICoreMailFolder to)        {            return DoMoveMessage((TMessageType)message, (TFolderType)to);        }        public bool SendMessage(ICoreMailMessage message)        {            return DoSendMessage((TMessageType)message);        }        public bool SaveDraft(ICoreMailMessage message)        {            return DoSaveDraft((TMessageType)message);        }        #endregion        #region Setup / Teardown        public CoreMailer()        {            Initialize();        }        protected abstract void Initialize();        public abstract void Dispose();        #endregion        #region Protected/Abstract Methods        protected abstract bool DoConnect();        protected abstract bool GetIsConnected();        protected abstract TFolderType DoFindFolder(TFolderType folder, string name);        protected abstract TFolderType GetInbox();        protected abstract TFolderType GetSentItems();        protected abstract TMessageType DoGetMessage(TFolderType folder, string id);        protected abstract IEnumerable<TMessageType> DoGetMessages(TFolderType folder);        protected abstract IEnumerable<TSummaryType> DoListMessages(TFolderType folder, int min = 0, int max = int.MaxValue);        protected abstract TMessageType DoCreateMessage();        protected abstract bool DoMoveMessage(TMessageType message, TFolderType to);        protected abstract bool DoSendMessage(TMessageType message);        protected abstract bool DoSaveDraft(TMessageType message);        #endregion    }}
 |