Exemplo n.º 1
0
        // Monta os arquivos em disco, devolve uma lista com os nomes dos arquivos de relatório
        private static List<String> BuildReportFiles(String reportPage, String additionalParameters)
        {
            List<String> reportFiles = new List<String>();

            // Muda o diretório corrente para o lugar onde está o executável
            Environment.CurrentDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location.ToString());
            // Obtem um identificador para o relatório (temporal)
            String reportStamp = DateTime.Now.Ticks.ToString();

            // Grava em disco o relatório no formato HTML
            String reportUrl = "http://" + primaryServer + "/Contratos/Frontend/mailing/" + reportPage;
            String requestParams = "startDate=&" + "endDate=&" + "acrescimo=&" + "obs=&" + additionalParameters; // Sem a faixa de datas recupera as duas últimas leituras
            RequestHandler requestHandler = new RequestHandler(reportUrl, new TraceHandler());
            requestHandler.StartRequest(requestParams, null);
            String response = (String)requestHandler.ParseResponse(typeof(System.String));

            String reportFilename = "Report" + reportStamp + ".htm";
            if (!File.Exists(reportFilename))
            {
                StreamWriter streamWriter = File.CreateText(reportFilename);
                streamWriter.Write(response);
                streamWriter.Close();
            }

            // Adiciona os nomes dos arquivos a lista
            reportFiles.Add(reportFilename);

            return reportFiles;
        }
Exemplo n.º 2
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);
            }
        }