示例#1
0
        public void sendEMailThroughSMTP(SmtpCredenciais smtpCredenciais,
                                         string emailTo, string subject, string body)
        {
            if (smtpCredenciais == null || string.IsNullOrEmpty(smtpCredenciais.SmtpAddress) || string.IsNullOrEmpty(smtpCredenciais.SmtpEmail) || string.IsNullOrEmpty(smtpCredenciais.SmtpPassword) ||
                smtpCredenciais.SmtpPortNumber == 0)
            {
                return;
            }

            Log(NLog.LogLevel.Debug, string.Format("{0} {1}", smtpCredenciais.ToString(), body));

            try
            {
                using (MailMessage mail = new MailMessage())
                {
                    mail.From = new MailAddress(smtpCredenciais.SmtpEmail);
                    mail.To.Add(emailTo);
                    mail.Subject    = subject;
                    mail.Body       = body;
                    mail.IsBodyHtml = false;

                    using (SmtpClient smtp = new SmtpClient(smtpCredenciais.SmtpAddress, smtpCredenciais.SmtpPortNumber))
                    {
                        smtp.Credentials = new NetworkCredential(smtpCredenciais.SmtpEmail, smtpCredenciais.SmtpPassword);
                        smtp.EnableSsl   = smtpCredenciais.SmtpEnableSSL;
                        smtp.Send(mail);
                    }
                }
            }
            catch (Exception ex)
            {
                Log(NLog.LogLevel.Error, "ERROR sending SMTP Email " + ex.Message);
            }
        }
示例#2
0
        static void Main(string[] args)
        {
            if (args.Length == 0)
            {
                Console.Write("Especifique o ficheiro XML com os dados das aulas a inscrever.");
                Console.ReadKey();
                return;
            }

            Utils utils = new Utils();

            MyHut myhut = new MyHut();

            Credenciais     credenciais     = myhut.LoadCredenciais(args[0]);
            SmtpCredenciais smtpCredenciais = myhut.LoadSmtpCredenciais(args[0]);

            // carrega as aulas do corrente dia
            List <Aula> listaAulas = myhut.LoadInscricaoAulas(args[0], DateTime.Today);

            if (listaAulas == null || listaAulas.Count == 0)
            {   // se não há aulas para hoje, schedule para o dia seguinte
                utils.sendEMailThroughSMTP(smtpCredenciais, credenciais.Email, "MyHut",
                                           string.Format("Não há aulas agendadas para hoje {0}.", DateTime.Today.ToString("yyyy-MM-dd")));
                myhut.ScheduleNextTask(null, DateTime.Today.AddDays(1), credenciais);
                return;
            }

            int        nErrors = 0;
            IWebDriver driver  = null;

            // Executa até alguma condição se verificar
            while (nErrors < 5)
            {
                try
                {
                    // Navega para o site, faz login e obtem o mapa de aulas
                    driver = myhut.StartBrowser();
                    myhut.Login(driver, credenciais.Email, credenciais.Password);
                    myhut.MapaDeAulas(driver);

                    while (listaAulas.Count > 0)
                    {
                        DateTime horaPrimeiraInscricao = listaAulas[0].HoraInscricao;
                        if (DateTime.Compare(horaPrimeiraInscricao, DateTime.Now) > 0)
                        {   // schedule para a hora de inscrição na primeira aula
                            utils.sendEMailThroughSMTP(smtpCredenciais, credenciais.Email, "MyHut",
                                                       string.Format("Inscrição da aula {0} agendada para hoje às {1}", listaAulas[0].ToString(), horaPrimeiraInscricao.ToString("HH:mm")));
                            myhut.ScheduleNextTask(driver, horaPrimeiraInscricao, credenciais);
                            return;
                        }

                        // Refresca a página corrente - usado no mapa de aulas para refrescar as aulas reservadas
                        myhut.RefreshCurrentPage(driver);

                        int nAulas = listaAulas.Count;

                        for (int i = 0; i < nAulas; i++)
                        {
                            Aula aula = listaAulas[i];

                            myhut.RefreshDisponilidadeAulas(driver);

                            // Se a aula ainda não está reservada e ainda não passou da hora da aula - 1 hora
                            if (!myhut.IsAulaReservada(driver, aula) && DateTime.Compare(aula.HoraAula, DateTime.Now.AddHours(-1)) > 0)
                            {
                                // se não está, tenta reservá-la
                                myhut.ReservarAula(driver, aula);
                            }
                            else
                            {
                                // remove a aula da lista
                                listaAulas.Remove(aula);
                                nAulas--;
                                i--;
                            }
                        }
                    }
                    // a lista fica com Count== 0 quando as aulas estão todas reservadas/ passadas
                    // schedule para o dia seguinte
                    utils.sendEMailThroughSMTP(smtpCredenciais, credenciais.Email, "MyHut",
                                               string.Format("Todas as aulas marcadas para hoje {0}.", DateTime.Today.ToString("yyyy-MM-dd")));
                    myhut.ScheduleNextTask(driver, DateTime.Today.AddDays(1), credenciais);
                    return;
                }
                catch (Exception ex)
                {
                    nErrors++;
                    utils.Log(NLog.LogLevel.Error, string.Format("Tentativa {0}: Aplicação dessincronizada com o site MyHut. {1}", nErrors, ex.Message));
                    if (driver != null)
                    {
                        try { driver.Quit(); } catch { } // para remover o driver dos serviços
                    }
                    Thread.Sleep(15 * 1000);             // espera 15 segundos
                }
            }
            utils.sendEMailThroughSMTP(smtpCredenciais, credenciais.Email, "MyHut",
                                       string.Format("Aplicação MyHut_Automation interrompida no dia {0}.", DateTime.Today.ToString("yyyy-MM-dd")));
            myhut.ScheduleNextTask(null, DateTime.Now.AddHours(1), credenciais);
        }