| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204 | 
							- using MailKit;
 
- using MimeKit;
 
- namespace InABox.Mail
 
- {
 
-     public class IMAPMailSummary : ICoreMailSummary
 
-     {
 
-         private IMAPMailSummary()
 
-         {
 
-         }
 
-         public IMAPMailSummary(IMailFolder folder, IMessageSummary summary)
 
-         {
 
-             Folder = folder;
 
-             Summary = summary;
 
-         }
 
-         public IMailFolder Folder { get; }
 
-         public IMessageSummary Summary { get; }
 
-         public string ID => Summary.UniqueId.ToString();
 
-         public DateTime Date => Summary.Envelope.Date.HasValue ? Summary.Envelope.Date.Value.LocalDateTime : DateTime.MinValue;
 
-         public string From
 
-         {
 
-             get => Summary.Envelope.From.Any() ? ((MailboxAddress)Summary.Envelope.From.First()).Address : "";
 
-             set
 
-             {
 
-                 Summary.Envelope.From.Clear();
 
-                 Summary.Envelope.From.Add(MailboxAddress.Parse(value));
 
-             }
 
-         }
 
-         public string Subject
 
-         {
 
-             get => Summary.Envelope.Subject;
 
-             set => Summary.Envelope.Subject = value;
 
-         }
 
-         public IEnumerable<string> To
 
-         {
 
-             get { return Summary.Envelope.To.Select(x => ((MailboxAddress)x).Address); }
 
-             set
 
-             {
 
-                 Summary.Envelope.To.Clear();
 
-                 Summary.Envelope.To.AddRange(value.Select(x => MailboxAddress.Parse(x)));
 
-             }
 
-         }
 
-     }
 
-     public class IMAPMailMessage : ICoreMailMessage
 
-     {
 
-         private Tuple<string, byte[]>[] _attachments = { };
 
-         private string _body = "";
 
-         private bool _ishtml;
 
-         private IMAPMailMessage()
 
-         {
 
-         }
 
-         public IMAPMailMessage(IMailFolder folder, UniqueId uniqueid, MimeMessage message)
 
-         {
 
-             Folder = folder;
 
-             UniqueID = uniqueid;
 
-             Message = message;
 
-             Summary = null;
 
-             _body = message.HtmlBody;
 
-         }
 
-         public IMAPMailMessage(IMailFolder folder, UniqueId uniqueid, IMessageSummary summary)
 
-         {
 
-             Folder = folder;
 
-             UniqueID = uniqueid;
 
-             Message = null;
 
-             Summary = summary;
 
-         }
 
-         public IMailFolder Folder { get; set; }
 
-         public UniqueId UniqueID { get; private set; }
 
-         public MimeMessage Message { get; }
 
-         public IMessageSummary Summary { get; }
 
-         public void Save()
 
-         {
 
-             if (UniqueID != UniqueId.MinValue)
 
-                 Folder.SetFlags(UniqueID, MessageFlags.Deleted, true);
 
-             UniqueID = Folder.Append(Message).Value;
 
-             Folder.SetFlags(UniqueID, MessageFlags.Seen, true);
 
-         }
 
-         public string ID
 
-         {
 
-             get => Message.MessageId;
 
-             set => Message.MessageId = value;
 
-         }
 
-         public DateTime Date
 
-         {
 
-             get => Message.Date.DateTime;
 
-             set => Message.Date = new DateTimeOffset(value);
 
-         }
 
-         public string From
 
-         {
 
-             get => (Message.From.First() as MailboxAddress).Address;
 
-             set
 
-             {
 
-                 Message.From.Clear();
 
-                 Message.From.Add(InternetAddress.Parse(value));
 
-             }
 
-         }
 
-         public IEnumerable<string> To
 
-         {
 
-             get { return Message.To.Select(x => (x as MailboxAddress).Address); }
 
-             set
 
-             {
 
-                 Message.To.Clear();
 
-                 Message.To.AddRange(value.Select(x => InternetAddress.Parse(x)));
 
-             }
 
-         }
 
-         public IEnumerable<string> CC
 
-         {
 
-             get { return Message.Cc.Select(x => (x as MailboxAddress).Address); }
 
-             set
 
-             {
 
-                 Message.Cc.Clear();
 
-                 Message.Cc.AddRange(value.Select(x => InternetAddress.Parse(x)));
 
-             }
 
-         }
 
-         public IEnumerable<string> BCC
 
-         {
 
-             get { return Message.Bcc.Select(x => (x as MailboxAddress).Address); }
 
-             set
 
-             {
 
-                 Message.Bcc.Clear();
 
-                 Message.Bcc.AddRange(value.Select(x => InternetAddress.Parse(x)));
 
-             }
 
-         }
 
-         public string Subject
 
-         {
 
-             get => Message.Subject;
 
-             set => Message.Subject = value;
 
-         }
 
-         public IEnumerable<Tuple<string, byte[]>> Attachments
 
-         {
 
-             get => _attachments;
 
-             set
 
-             {
 
-                 _attachments = value.ToArray();
 
-                 UpdateMessage();
 
-             }
 
-         }
 
-         public string Body
 
-         {
 
-             get => _body;
 
-             set
 
-             {
 
-                 _body = value;
 
-                 UpdateMessage();
 
-             }
 
-         }
 
-         public bool IsHTML
 
-         {
 
-             get => _ishtml;
 
-             set
 
-             {
 
-                 _ishtml = value;
 
-                 UpdateMessage();
 
-             }
 
-         }
 
-         public void Move(IMailFolder to)
 
-         {
 
-             if (UniqueID == UniqueId.MinValue)
 
-                 UniqueID = to.Append(Message).Value;
 
-             else
 
-                 UniqueID = Folder.MoveTo(UniqueID, to).Value;
 
-             Folder = to;
 
-         }
 
-         private void UpdateMessage()
 
-         {
 
-             var builder = new BodyBuilder();
 
-             if (_ishtml)
 
-                 builder.HtmlBody = _body;
 
-             else
 
-                 builder.TextBody = _body;
 
-             if (_attachments != null)
 
-                 foreach (var attachment in _attachments)
 
-                     builder.Attachments.Add(attachment.Item1, attachment.Item2);
 
-             Message.Body = builder.ToMessageBody();
 
-         }
 
-     }
 
- }
 
 
  |