Пример #1
0
        public void Egzecue()
        {
            Status = Models.SendingStatus.Sending;
            OnPropertyChanged("Status");
            var openDialog = new Powiadomienie();

            openDialog.ShowPowiadomienie(Status.ToString(), "Powiadomienie");
        }
Пример #2
0
        //metoda i algorytm wysylania wiadomosci
        public async void WysylanieWiadomosci()
        {
            Adres  adresy         = new Adres();
            Konta  konta          = new Konta();
            Limity limity         = new Limity();
            var    openDialog     = new Powiadomienie();
            int    taskDelayValue = Convert.ToInt32(decimal.Parse(Limity.limity.HowOften) / Konta.ListaKont.Count * 1000);

            if (Adres.ListaAdresow.Count > 0 && Konta.ListaKont.Count > 0 && !string.IsNullOrWhiteSpace(TematWiadomosc) && !string.IsNullOrWhiteSpace(TrescWiadomosc))
            {
                int kontaLicznik  = 0;
                int adresyLicznik = 0;
                do
                {
                    GodzinowoModel = Limity.limity.PerHour;
                    DobowoModel    = Limity.limity.PerDay;
                    GodzinowoWidok = Limity.limity.IloscGodzinowa.ToString();
                    DobowoWidok    = Limity.limity.IloscDobowa.ToString();
                    if ((DateTime.Now - Limity.limity.RozpoczecieGodzinowe) > TimeSpan.FromHours(1)) //reset rozpoczęcia godzinowego
                    {
                        Limity.limity.RozpoczecieGodzinowe = DateTime.Now;
                        Limity.limity.IloscGodzinowa       = 0;
                        limity.Zapisz();
                    }
                    if ((DateTime.Now - Limity.limity.RozpoczecieDobowe) > TimeSpan.FromHours(24)) //rezet rozpoczęcia dobowego
                    {
                        Limity.limity.RozpoczecieDobowe = DateTime.Now;
                        Limity.limity.IloscDobowa       = 0;
                        limity.Zapisz();
                    }
                    if (Limity.limity.IloscGodzinowa > int.Parse(Limity.limity.PerHour) || Limity.limity.IloscDobowa > int.Parse(Limity.limity.PerDay)) //jeśli mamy limit godzinowy lub dniowy
                    {
                        Status = Models.StatusWysylania.Oczekiwanie;
                        OnPropertyChanged("Status");
                        //openDialog.ShowPowiadomienie("Limit godzinowy/dobowy", "Powiadomienie");
                        await Task.Delay(1000);

                        if (Status == Models.StatusWysylania.Wstrzymanie)
                        {
                            break;
                        }
                        continue;
                    }
                    if (adresyLicznik < Adres.ListaAdresow.Count) //wysyłka
                    {
                        Status = Models.StatusWysylania.Wysylanie;
                        OnPropertyChanged("Status");
                        System.Windows.Application.Current.Dispatcher.Invoke(delegate
                        {
                        });
                        if (Adres.ListaAdresow[adresyLicznik].AktywnyEmail == true)
                        {
                            TerazWysylanyAdres = Adres.ListaAdresow[adresyLicznik].AdresMailowy;
                            OnPropertyChanged("TerazWysylanyAdres");
                            TerazWysylaneKonto = Konta.ListaKont[kontaLicznik].AdresEmail;             //email konta
                            string TerazWysylaneHaslo    = Konta.ListaKont[kontaLicznik].Haslo;        //haslo konta
                            string TerazWysylanySerwer   = Konta.ListaKont[kontaLicznik].AdresSerwera; //smtp adres
                            string TerazWysylaneNazwisko = Konta.ListaKont[kontaLicznik].ImieNazwisko; //nazwisko konta
                            int    TerazWysylanyPort     = int.Parse(Konta.ListaKont[kontaLicznik].Port);
                            OnPropertyChanged("TerazWysylaneKonto");
                            //tutaj metoda wysyłania wiadomości
                            WyslijWiadomosc(TerazWysylanyAdres,
                                            TerazWysylaneKonto,
                                            TerazWysylaneNazwisko,
                                            wiadomoscModel.TematWiadomosc,
                                            wiadomoscModel.TrescWiadomosci,
                                            TerazWysylaneHaslo,
                                            TerazWysylanySerwer,
                                            TerazWysylanyPort);
                            Adres.ListaAdresow[adresyLicznik].AktywnyEmail = false;
                            kontaLicznik++;
                            adresy.ZapiszAdresy();
                            await Task.Delay(taskDelayValue); //wpisana ilość przez ilość kont
                        }
                        adresyLicznik++;
                    }
                    if (kontaLicznik >= Konta.ListaKont.Count) //jeśli dojdziemy do końca listy kont
                    {
                        kontaLicznik = 0;
                        Limity.limity.IloscGodzinowa++;
                        Limity.limity.IloscDobowa++;
                        limity.Zapisz();
                    }
                    if (adresyLicznik == Adres.ListaAdresow.Count) //jeśli dojdziemy do końca listy adresów
                    {
                        Status = Models.StatusWysylania.Wstrzymanie;
                        OnPropertyChanged("Status");
                        openDialog.ShowPowiadomienie("Wysłano wszystkie wiadomości", "Powiadomienie");
                        break;
                    }
                    if (Status == Models.StatusWysylania.Wstrzymanie)
                    {
                        break;
                    }
                } while (kontaLicznik < Konta.ListaKont.Count);
            }
            else
            {
                //info w razie nie spełnienia warunków
                if (Adres.ListaAdresow.Count < 1)
                {
                    openDialog.ShowPowiadomienie("Nie można rozpocząć wysyłania, adresy nie zostały wczytane", "Powiadomienie");
                }
                if (Konta.ListaKont.Count < 1)
                {
                    openDialog.ShowPowiadomienie("Nie można rozpocząć wysyłania, konta nie zostały zapisane", "Powiadomienie");
                }
                if (string.IsNullOrWhiteSpace(TematWiadomosc) || string.IsNullOrWhiteSpace(TrescWiadomosc))
                {
                    openDialog.ShowPowiadomienie("Nie można rozpocząć wysyłania, brak tematu lub treści wiadomości", "Powiadomienie");
                }
            }
            void WyslijWiadomosc(string to, string from, string name, string subject, string body, string pass, string smtp, int port) //wysyla wiadomosc
            {
                //dane wiadomosci
                MailMessage msg = new MailMessage();

                msg.To.Add(to);                                                               //Mail recipient account
                msg.From            = new MailAddress(from, name, System.Text.Encoding.UTF8); //Mail account and displays the name and the character encoding
                msg.Subject         = subject;                                                //Message header
                msg.SubjectEncoding = System.Text.Encoding.UTF8;                              //Mail title code
                msg.Body            = body;                                                   //The message content
                msg.BodyEncoding    = System.Text.Encoding.UTF8;                              //Message encoding
                msg.IsBodyHtml      = false;                                                  //Whether the HTML mail
                msg.Priority        = MailPriority.Normal;                                    //Priority mail
                if (ListaZalacznikow.Count > 0)
                {
                    foreach (var item in ListaZalacznikow)
                    {
                        msg.Attachments.Add(new Attachment(item.AdresPliku));
                    }
                }
                //dane konta
                SmtpClient client = new SmtpClient();

                client.Credentials = new System.Net.NetworkCredential(from, pass); //The registered email address and password, the QQ mailbox, if you set a password to use independent, independent password instead of the password
                client.Host        = smtp;                                         //QQ mailbox corresponding to the SMTP server
                client.Port        = port;
                object userState = msg;

                try
                {
                    client.SendAsync(msg, userState);
                }
                catch (Exception ex)
                {
                }
            }
        }