示例#1
0
        private void ProcessMailing(MailingDAO mailingDAO, Mailing mailing)
        {
            SmtpServerDAO       smtpServerDAO   = new SmtpServerDAO(dataAccess.GetConnection());
            SmtpServer          smtpServer      = smtpServerDAO.GetSmtpServer(currentTenant, mailing.smtpServer);
            ReportFrequencyEnum reportFrequency = (ReportFrequencyEnum)mailing.frequency;
            ReportTypeEnum      reportType      = (ReportTypeEnum)mailing.reportType;
            String   recipients = mailing.recipients;
            DateTime lastSend   = mailing.lastSend;

            // Verifica se está na data de envio, aborta caso não esteja
            if (!ReportContext.IsScheduledTime(reportFrequency, currentPeriodEndDate))
            {
                return;
            }

            // Verifica se o log foi importado
            PrintLogPersistence logPersistence = new PrintLogPersistence(currentTenant, dataAccess.GetConnection(), null, false);
            Boolean             logImported    = logPersistence.FileImported(ReportContext.GetDateRange(reportFrequency));

            // Verifica se o relatório já foi enviado hoje
            Boolean alreadySent = lastSend.Date == DateTime.Now.Date;

            // Caso o log tenha sido importado e se ainda não enviou, gera o relatório e envia
            if ((logImported) && (!alreadySent))
            {
                // Inicia o append no arquivo de log (acrescentando o "startingDelimiter")
                fileLogger.LogInfo("Envio de relatório - Iniciando execução...", true);
                // Informa dados do mailing
                fileLogger.LogInfo("Frequência de envio - reportFrequency = " + reportFrequency.ToString());
                fileLogger.LogInfo("Relatório - reportType = " + reportType.ToString());
                fileLogger.LogInfo("Destinatários - recipients = " + recipients);
                notifications.Clear();

                String reportStamp    = DateTime.Now.Ticks.ToString();
                String reportFilename = FileResource.MapDesktopResource("Report" + reportStamp + currentFormatExtension);
                BuildReport(reportFilename, reportType, reportFrequency);

                String        mailSubject     = "Relatório " + ReportContext.GetFrequencyCaption(reportFrequency);
                List <String> attachmentFiles = new List <String>();
                attachmentFiles.Add(reportFilename);
                MailSender mailSender = new MailSender(smtpServer.CreateSysObject(), this);
                mailSender.SetContents("Email gerado automaticamente, não responder.", attachmentFiles);
                Boolean success = mailSender.SendMail(mailSubject, currentSysSender, recipients);

                ProcessNotifications();
                if (success) // Grava a data de envio de envio no banco
                {
                    mailing.lastSend = DateTime.Now.Date;
                    mailingDAO.SetMailing(mailing);
                    fileLogger.LogInfo("Execução concluída.");
                }
            }

            // Tenta remover arquivos temporários, ignora caso os arquivos estejam em uso
            // tentará novamente nas próximas execuções
            ReportContext.TryRemoveTempFiles();
        }
示例#2
0
        protected void btnSubmit_Click(object sender, EventArgs e)
        {
            Mailing mailing = new Mailing();

            try
            {
                foreach (String fieldName in Request.Form)
                {
                    if (fieldName.Contains("txtId"))
                    {
                        mailing.id = int.Parse(Request.Form[fieldName]);
                    }
                    if (fieldName.Contains("txtTenantId"))
                    {
                        mailing.tenantId = int.Parse(Request.Form[fieldName]);
                    }
                    if (fieldName.Contains("cmbSmtpServer"))
                    {
                        mailing.smtpServer = int.Parse(Request.Form[fieldName]);
                    }
                    if (fieldName.Contains("cmbFrequency"))
                    {
                        mailing.frequency = int.Parse(Request.Form[fieldName]);
                    }
                    if (fieldName.Contains("cmbReportType"))
                    {
                        mailing.reportType = int.Parse(Request.Form[fieldName]);
                    }
                    if (fieldName.Contains("txtRecipients"))
                    {
                        mailing.recipients = Request.Form[fieldName];

                        // Verifica o formato da string de destinatários, caso não seja um
                        // formato válido gera uma exceção (formatException)
                        if (String.IsNullOrEmpty(mailing.recipients))
                        {
                            throw new FormatException();
                        }
                        MailAddressCollection recipients = new MailAddressCollection();
                        recipients.Add(mailing.recipients); // gera formatException caso não estejam separados por vírgula
                    }
                    if (fieldName.Contains("txtLastSend"))
                    {
                        mailing.lastSend = DateTime.Parse(Request.Form[fieldName]);
                    }
                }
            }
            catch (System.FormatException)
            {
                EmbedClientScript.ShowErrorMessage(this, "Os valores informados não estão em um formato válido!");
                return;
            }

            mailingDAO.SetMailing(mailing);
            EmbedClientScript.CloseWindow(this);
        }
示例#3
0
        private static void SendMailing(DataConnector connector, MailingDTO mailing, SmtpServerDTO server)
        {
            MailMessage mailMessage = null;

            if (mailing.codigoContrato == 0)
            {
                mailMessage = MountBusinessPartnerBilling(connector, mailing.businessPartnerCode, mailing.enviarDemonstrativo);
            }
            else
            {
                mailMessage = MountContractBilling(connector, mailing.codigoContrato, mailing.codigoSubContrato, mailing.enviarDemonstrativo);
            }

            List <String> reportFiles = null;

            if (mailing.enviarDemonstrativo && mailMessage.Attachments.Count > 0)
            {
                reportFiles = new List <String>();
                foreach (Attachment mailAttachment in mailMessage.Attachments)
                {
                    reportFiles.Add(mailAttachment.Name);
                }
            }

            // TODO:  Consertar o envio através do .NET,  utilizar algum componente que funcione, o SmtpClient
            //        da Microsoft não suporta SSL implicito
            SmtpServer smtpServer = SmtpServer.ImportFromDTO(server);
            MailSender mailSender = new MailSender(smtpServer, new TraceHandler());

            mailSender.SetContents(mailMessage.Body, reportFiles);
            Boolean success = mailSender.SendMail("Faturamento de contrato", server.usuario, mailing.destinatarios);

            if (!success)
            {
                // caso não tenha tido sucesso ao enviar através do SmtpClient do .NET tenta enviar pelo PHP
                String mailerUrl       = "http://" + primaryServer + "/Contratos/AjaxCalls/SendEmail.php";
                String mailerParams    = "subject=Faturamento%20de%20contrato&mailBody=" + mailMessage.Body + "&recipients=" + mailing.destinatarios;
                String aditionalParams = "&fileCount=0";
                if (reportFiles != null)
                {
                    aditionalParams = "&fileCount=" + reportFiles.Count;
                    int fileIndex = 0;
                    foreach (String filename in reportFiles)
                    {
                        aditionalParams += "&filename" + fileIndex + "=" + reportFiles[fileIndex];
                        aditionalParams += "&path" + fileIndex + "=" + Environment.CurrentDirectory + @"\" + reportFiles[fileIndex];
                        fileIndex++;
                    }
                }

                RequestHandler mailerRequest = new RequestHandler(mailerUrl, new TraceHandler());
                mailerRequest.StartRequest(mailerParams + aditionalParams, null);
                String mailerResponse = (String)mailerRequest.ParseResponse(typeof(System.String));

                if (mailerResponse == "Email enviado com sucesso!")
                {
                    success = true;
                }
                if (!success)
                {
                    EventLog.WriteEntry("Billing Mailer", mailerResponse);
                }
            }

            if (success) // e-mail enviado com sucesso, grava no banco de dados a data
            {
                MailingDAO mailingDAO = new MailingDAO(connector.MySqlConnection);
                mailing.ultimoEnvio = DateTime.Now;
                mailingDAO.SetMailing(mailing);
            }
        }