Exemple #1
0
        public void RemoveDraft(string id)
        {
            if (string.IsNullOrEmpty(id))
            {
                return;
            }
            //Get exist
            var existMail = DraftList.FirstOrDefault(item =>
            {
                return(item.ID == id);
            });

            if (existMail == null)
            {
                return;
            }
            //Delete Attachments
            string folder  = DraftFolder.CombinePath(id);
            var    dirInfo = new DirectoryInfo(folder);

            if (dirInfo.Exists)
            {
                dirInfo.Delete(true);
            }
            //Delete Mail Content
            DraftList.Remove(existMail);
            SerializeAssistant.Serialize(draftBinPath, DraftList);
            System.Diagnostics.Debug.WriteLine("Remove " + existMail.ID);
        }
Exemple #2
0
        private void DiscardDraft()
        {
            IsDraft = false;
            if (string.IsNullOrEmpty(MailMessage.ID))
            {
                return;
            }
            string folder  = DraftFolder.CombinePath(MailMessage.ID);
            var    dirInfo = new DirectoryInfo(folder);

            if (dirInfo.Exists)
            {
                try
                {
                    dirInfo.Delete(true);
                }
                catch (Exception e)
                {
                    System.Diagnostics.Debug.WriteLine(e.Message);
                }
            }
            MainVm.RemoveDraft(MailMessage.ID);
            MailMessage.ID = null;

            Messenger.Default.Send(new DisplayMessage("Discard draft.", DisplayType.Toast));
            Messenger.Default.Send(new NavigationMessage(), Tokens.Draft);
        }
Exemple #3
0
 public void UpdateDraft(string recipient, string subj, string message)
 {
     DraftFolder.Click();
     DraftToUpdate.Click();
     Text.Clear();
     Text.SendKeys(message);
     Subject.Clear();
     Subject.SendKeys(subj);
 }
Exemple #4
0
 public void CreateDraft(string recipient, string subj, string message)
 {
     DraftFolder.Click();
     Compose.Click();
     Recipients.SendKeys(recipient);
     Subject.SendKeys(subj);
     Text.SendKeys(message);
     Close.Click();
 }
Exemple #5
0
        public string EnsureDraftCacheFolder(string messageid)
        {
            string path = DraftFolder.CombinePath(messageid);

            if (!Directory.Exists(path))
            {
                Directory.CreateDirectory(path);
            }
            return(path);
        }
Exemple #6
0
        protected override void Init()
        {
            //Ensure local path created.
            DataFolder   = AppDomain.CurrentDomain.BaseDirectory + "Data";
            DraftFolder  = DataFolder + "\\Draft";
            InboxFolder  = DataFolder + "\\Inbox";
            draftBinPath = DraftFolder.CombinePath("Draft.bin");
            UserBinPath  = DataFolder.CombinePath("User.bin");
            EnsureCreateFolder(DataFolder);
            EnsureCreateFolder(DraftFolder);
            EnsureCreateFolder(InboxFolder);
            EnsureCreateFile(UserBinPath);
            //Get stored data
            userAssistant = new UserAssistant(UserBinPath);
            var obj = SerializeAssistant.Deserialize(draftBinPath);

            if (null != obj)
            {
                BindingList <MailBase> drafts = null;
                drafts = obj as BindingList <MailBase>;
                if (drafts != null)
                {
                    DraftList = drafts;
                }
            }
            UpdateSettings(UseImap);
            //Init commands.
            LoginCommand = new RelayCommand <object>(Login, o =>
            {
                return(!(IsLogined || string.IsNullOrEmpty(UserAddress) || IsRequesting));
            });
            LoginIfAutoCommand          = new RelayCommand <object>(CheckAutoLogin, o => !IsLogined);
            LogoutCommand               = new RelayCommand(Logout, () => IsLogined);
            GetInboxMailCommand         = new RelayCommand(GetInboxMail, () => IsLogined && !IsRequesting);
            ReplyCommand                = new RelayCommand <object>(ReplyMailFrom);
            ForwardCommand              = new RelayCommand <object>(ForwardTo);
            AddNewDraftCommand          = new RelayCommand <object>(NavigateNewDraft);
            DeleteDraftCommand          = new RelayCommand <object>(DeleteDraft);
            SaveAttachmentCommand       = new RelayCommand <object>(SaveAttachmentAs);
            DeleteOutboxMailCommand     = new RelayCommand <object>(DeleteOutboxMail);
            DeleteInboxMailCommand      = new RelayCommand <object>(DeleteInboxMail, o => !IsRequesting);
            ForgetUserCommand           = new RelayCommand <object>(RemoveLocalUserActon, o => IsLogined);
            RemoveUserFromRecentCommand = new RelayCommand <object>(RemoveUserFromRecentAction);
            NavigationInMainCommand     = new RelayCommand <object>(Navigate);
        }
Exemple #7
0
        private void DeleteAttachment(object o)
        {
            //Validate basic info
            if (null == o)
            {
                return;
            }
            var fileName = o as string;

            if (null == fileName)
            {
                return;
            }
            if (!MailMessage.Attachments.Contains(fileName))
            {
                return;
            }
            if (string.IsNullOrEmpty(MailMessage.ID))
            {
                return;
            }
            //Check file
            string folder = DraftFolder.CombinePath(MailMessage.ID);
            string path   = folder.CombinePath(fileName);

            if (File.Exists(path))
            {
                try
                {
                    File.Delete(path);
                    MailMessage.Attachments.Remove(fileName);
                }
                catch (Exception e)
                {
                    Messenger.Default.Send(new DisplayMessage(e.Message, DisplayType.Toast));
                }
            }
        }
Exemple #8
0
        private async void SendMail(object o)
        {
            if (!MainVm.IsLogined)
            {
                Messenger.Default.Send(new DisplayMessage("Require Login.", "Please Login First!"));
                return;
            }
            //Addresses Validation
            var error = string.Empty;
            var msg   = new MailMessage();

            //Ensure To
            if (!AddAddresses(MailMessage.ToAddresses, msg.To, ref error))
            {
                if (!string.IsNullOrEmpty(error))
                {
                    Messenger.Default.Send(new DisplayMessage("Check recipients",
                                                              error));
                    return;
                }
                else if (!IsCCOrBccEnabled)
                {
                    return;
                }
            }
            //Ensure CC or Bcc
            if (IsCCOrBccEnabled &&
                ((!string.IsNullOrEmpty(MailMessage.CCAddresses) &&
                  !AddAddresses(MailMessage.CCAddresses, msg.CC, ref error)) ||
                 (!string.IsNullOrEmpty(MailMessage.BccAddresses) &&
                  !AddAddresses(MailMessage.BccAddresses, msg.Bcc, ref error))))
            {
                Messenger.Default.Send(new DisplayMessage("Check recipients",
                                                          error));
                return;
            }
            //Ensure valid recipients
            if (msg.To.Count == 0 && msg.CC.Count == 0 && msg.Bcc.Count == 0)
            {
                Messenger.Default.Send(new DisplayMessage("No valid recipients",
                                                          "Please input recipients"));
                return;
            }
            //Get Document to send
            var doc = o as FlowDocument;

            if (doc == null)
            {
                Messenger.Default.Send(new DisplayMessage("Check input", "Error body."));
                return;
            }
            string bodyHtml = doc.ToHtmlString();

            //Initilize mail message
            msg.From         = new MailAddress(FromAddress, DisplayName);
            msg.Priority     = Priority;
            msg.Subject      = MailMessage.Subject;
            msg.Body         = bodyHtml;
            msg.BodyEncoding = Encoding;
            msg.IsBodyHtml   = true;
            //Add Attachments
            string folder = DraftFolder.CombinePath(MailMessage.ID);

            if (MailMessage.Attachments.Count > 0)
            {
                string fileCache = null;
                foreach (var attachment in MailMessage.Attachments)
                {
                    fileCache = folder.CombinePath(attachment);
                    if (!File.Exists(fileCache))
                    {
                        continue;
                    }
                    msg.Attachments.Add(new Attachment(fileCache));
                }
            }
            //Initilize SmtpClient
            var client = new SmtpClient();

            client.DeliveryMethod        = SmtpDeliveryMethod.Network;
            client.Host                  = Settings.Host;
            client.Port                  = Settings.Port;
            client.UseDefaultCredentials = false;
            client.Credentials           = new System.Net.NetworkCredential(FromAddress, Password);
            client.EnableSsl             = Settings.EnableSsl;
            await Task.Run(() =>
            {
                MainVm.IsRequesting = true;
                try
                {
                    client.Send(msg);
                    IsDraft = false;
                    Messenger.Default.Send(new NavigationMessage(), Tokens.Draft);
                    Messenger.Default.Send(new DisplayMessage("Send Successful!"));
                }
                catch (Exception e)
                {
                    Messenger.Default.Send(new DisplayMessage("Send Error", e.Message));
                    System.Diagnostics.Debug.WriteLine(e.Message);
                }
                finally
                {
                    if (client != null)
                    {
                        client.Dispose();
                    }
                    MainVm.IsRequesting = false;
                }
            });
        }