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();
- }
- }
- }
|