Ejemplo n.º 1
0
        public static List <MailMessage> GetMail(MailSecureItem data)
        {
            try
            {
                List <MailMessage> messages = new List <MailMessage>();
                var msgs =
                    ImapClients[data.GetHashCode()].Search(
                        SearchCondition.Unseen()).Reverse();
                messages.AddRange(ImapClients[data.GetHashCode()].GetMessages(msgs.Take(10), FetchOptions.NoAttachments));

                return(messages);
            }
            catch (InvalidOperationException ex)
            {
                ex.Error();
                return(null);
            }
            catch (IndexOutOfRangeException ex)
            {
                ex.Error();
                return(null);
            }
            catch (Exception ex)
            {
                ex.Error();
                return(null);
            }
        }
Ejemplo n.º 2
0
        public static void Initialize(MailSecureItem mailSecureItem)
        {
            LogCore.Log($"Initializing mail [{mailSecureItem.Username}]", null, EnumData.LogTypeCommand.System,
                        EnumData.LogSourceCommand.Mail);
            while (true)
            {
                try
                {
                    var hash = mailSecureItem.GetHashCode();
                    ImapClients[hash]?.Dispose();
                    ImapClients.Remove(hash);
                    ImapClients.Add(hash, new ImapClient(mailSecureItem.Host, mailSecureItem.Port, mailSecureItem.Username, mailSecureItem.Password, AuthMethod.Login, mailSecureItem.Ssl));
                    ImapClients[hash].IdleError += (sender, args) =>
                    {
                        args.Exception.Error();
                        AutoResetEvents[hash].Set();
                    };

                    ImapClients[hash].NewMessage += (sender, args) =>
                    {
                        try
                        {
                            var letter = args.Client.GetMessage(args.MessageUID, FetchOptions.NoAttachments);
                            SiteUtils.SendMessage(SiteData.VK.GetAccessToken(), mailSecureItem.rCommandItem, letter.ToString(mailSecureItem), "", "", "", true, false);
                        }
                        catch (Exception ex)
                        {
                            SiteUtils.SendMessage(SiteData.VK.GetAccessToken(), mailSecureItem.rCommandItem, "Было получено новое сообщение, но его загрузка завершилась неудачей!");
                            ex.Error();
                        }
                    };

                    AutoResetEvents[hash].WaitOne();
                }
                catch (Exception e)
                {
                    e.Error();
                }
            }
        }
Ejemplo n.º 3
0
        public static bool LoginMail(string host, int port, string username, string password, bool ssl, RMessagesData.RCmdsListCollect.RCommandsItem rCommandItem, string accessToken)
        {
            try
            {
                LogCore.Log("Login mail...", null, EnumData.LogTypeCommand.System,
                            EnumData.LogSourceCommand.Mail);
                ImapClient imapClient = null;
                try
                {
                    imapClient = new ImapClient(host, port, username, password, AuthMethod.Login, ssl);
                }
                catch (InvalidCredentialsException ice)
                {
                    LogCore.Log(ice.Message, null, EnumData.LogTypeCommand.Attention,
                                EnumData.LogSourceCommand.Mail);
                    var answer    = ice.Message;
                    var loginLink = Regex.Match(answer, @"http[^ \]]+").Value;
                    if (!string.IsNullOrWhiteSpace(loginLink))
                    {
                        var shortLink = SiteUtils.GetShortLink(accessToken, loginLink);
                        answer = answer.Replace(loginLink, shortLink);
                        if (answer.Contains("WEBALERT"))
                        {
                            SiteUtils.SendMessage(accessToken, rCommandItem,
                                                  $"Подтвердите вход в почту или разрешить небезопасным приложениям доступ к аккаунту. Ответ сервера :\n{answer}");
                        }
                        else
                        {
                            if (answer.Contains("ALERT"))
                            {
                                SiteUtils.SendMessage(accessToken, rCommandItem,
                                                      $"Ошибка вода в почту. Ответ сервера :\n{answer}");
                            }
                        }
                    }
                }

                if (imapClient != null)
                {
                    if (imapClient.Authed)
                    {
                        var mailSecureItem = new MailSecureItem(host, port, ssl, username, password, rCommandItem);
                        MailSecureList.Add(mailSecureItem);
                        Save();
                        var hash = mailSecureItem.GetHashCode();
                        ImapClients.Add(hash, imapClient);
                        AutoResetEvents.Add(hash, new AutoResetEvent(false));
                        Action action = () => Initialize(mailSecureItem);
                        var    thread = new Thread(action.Invoke)
                        {
                            IsBackground = true
                        };
                        Threads.Add(hash, thread);
                        thread.Start();
                        LogCore.Log("Login complete!", null, EnumData.LogTypeCommand.System,
                                    EnumData.LogSourceCommand.Mail);
                    }
                    else
                    {
                        LogCore.Log("Login NOT complete!", null, EnumData.LogTypeCommand.Attention,
                                    EnumData.LogSourceCommand.Mail);
                    }

                    return(imapClient.Authed);
                }

                return(false);
            }
            catch (Exception ex)
            {
                ex.Error();
                return(false);
            }
        }