private static void Main(string[] args) { // Read the files from folder string connString = ConfigurationManager.ConnectionStrings["eLimsMilkM2MReports"].ConnectionString; string fromMailAddress = ConfigurationManager.AppSettings.Get("FromEmail"); string mailQueue = ConfigurationManager.AppSettings.Get("EmailQueue"); string SMTPServer = ConfigurationManager.AppSettings.Get("SMTPServer"); int Port = int.Parse(ConfigurationManager.AppSettings.Get("SMTPPortNumber")); string UserName = ConfigurationManager.AppSettings.Get("SMTPUserName"); string Password = ConfigurationManager.AppSettings.Get("SMTPPassword"); string mailSentFolders = ConfigurationManager.AppSettings.Get("MailSent"); string logFilePath = ConfigurationManager.AppSettings.Get("LogPath"); string todaysDate = DateTime.Now.ToString("yyyyMMdd"); string LogFile = string.Empty; string input = "1"; if (args != null && args.Any()) { input = args[0]; } if (input == "0") { try { todaysDate = todaysDate + ".txt"; LogFile = Path.Combine(logFilePath, todaysDate); Logger.WriteLine(DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss fff")); CustomerSendFiles obj = new CustomerSendFiles(); // get Customer details from Db // // List of Customers TO Sen Files WriteLine("Read Customer Files", LogFile); List <CustomerFiles> cusromerFileDetails = obj.ReadCustomerFiles(); WriteLine("Read Customer Files completed", LogFile); if (cusromerFileDetails.Count <= 0) { WriteLine("No files to process", LogFile); return; } WriteLine("Get Customer Detailses", LogFile); List <CustomerDetails> customerDetailses = obj.GetCustomerDetailses(cusromerFileDetails, connString); WriteLine("Get Customer Detailses Completed", LogFile); if (customerDetailses.Count <= 0) { WriteLine("No Customer to process", LogFile); return; } // Process Each File foreach (CustomerFiles oneFile in cusromerFileDetails) { //get Customer delivery method WriteLine("Processing File " + oneFile.FilePath, LogFile); CustomerDetails oneCustomer = customerDetailses.FirstOrDefault( c => String.Equals(c.CustomerCode, oneFile.CustomerCode, StringComparison.CurrentCultureIgnoreCase)); if (oneCustomer == null) { WriteLine("NO Customer for this file " + oneFile.FilePath, LogFile); continue; } WriteLine("Processing Customer " + oneCustomer.CustomerCode + " for file " + oneFile.FilePath, LogFile); switch (oneCustomer.Mode.ToUpper()) { case "EMAIL": { WriteLine( "Processing Customer to Send mail " + oneCustomer.CustomerCode + " for file " + oneFile, LogFile); //Write to transaction log //-------------------------------------------------------------------------------------------------------------------------------------------- using ( TransactionScope scope = new TransactionScope(TransactionScopeOption.RequiresNew, new TransactionOptions { IsolationLevel = IsolationLevel.ReadCommitted })) { SendEmails mailToSend = new SendEmails(); // Write to DB WriteLine("Write To DB Transaction table " + oneCustomer.CustomerCode, LogFile); oneCustomer.CustomerSpecificFileName = RenameReadyToSendFiles.RenameFiles( oneCustomer, SendEmails.GetFileName(oneFile.FilePath)); bool isinserted = mailToSend.WriteToTransaction(oneCustomer, connString, oneFile.FilePath, "Queued"); if (isinserted) { WriteLine("Send To Queue " + oneCustomer.CustomerCode, LogFile); bool mailSent = mailToSend.WriteMailMessageToQueue(oneCustomer, oneFile.FilePath, fromMailAddress, mailQueue); if (mailSent) { // Move file to Sent folder WriteLine( "Move file to sent folder from " + oneFile.FilePath + " to " + mailSentFolders, LogFile); MoveFile(oneFile.FilePath, mailSentFolders); scope.Complete(); } else { WriteLine( "Error in move file to sent folder from " + oneFile.FilePath + " to " + mailSentFolders, LogFile); } } } //-------------------------------------------------------------------------------------------------------------------------------------------- break; } case "FTP": { //Write to transaction log //-------------------------------------------------------------------------------------------------------------------------------------------- using ( TransactionScope scope = new TransactionScope(TransactionScopeOption.RequiresNew, new TransactionOptions { IsolationLevel = IsolationLevel.ReadCommitted })) { SendEmails mailToSend = new SendEmails(); SendFtp sendToFtp = new SendFtp(); WriteLine( "Send TO FTP Customer " + oneCustomer.CustomerCode + " ftp: " + oneCustomer.FTPURL + " file: " + oneFile.FilePath, LogFile); string mailSent = sendToFtp.SendFileToFtp(oneCustomer, oneFile.FilePath); if (mailSent == "File sent to FTP") { WriteLine( "Send TO FTP Customer " + oneCustomer.CustomerCode + " ftp: " + oneCustomer.FTPURL + " file: " + oneFile.FilePath + " Status: " + mailSent, LogFile); // Write to DB WriteLine("Write To DB Transaction table " + oneCustomer.CustomerCode, LogFile); bool isinserted = mailToSend.WriteToTransaction(oneCustomer, connString, oneFile.FilePath, mailSent); // Move file to Sent folder WriteLine( "Move file to sent folder from " + oneFile.FilePath + " to " + mailSentFolders + " write to Db status " + isinserted, LogFile); MoveFile(oneFile.FilePath, mailSentFolders); } else { WriteLine( "Send TO FTP Customer " + oneCustomer.CustomerCode + " ftp: " + oneCustomer.FTPURL + " file: " + oneFile.FilePath + " Status: " + mailSent, LogFile); } scope.Complete(); } break; } default: break; } } } catch (Exception ex) { WriteLine("Send to Queue Error: " + ex.Message, LogFile); } finally { WriteLine( "---------------------------------------------------------------------------------------------------", LogFile); } } else { try { //as both if and else conditions runs in sequential based on the arg values we pass, better add a little delay so that we will not miss any queue items. Thread.Sleep(3000); todaysDate = todaysDate + "-1.txt"; LogFile = Path.Combine(logFilePath, todaysDate); WriteLine(DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss fff"), LogFile); SendEmails mailToSend = new SendEmails(); bool queNotEmpty = true; do { string attachementFileName = string.Empty; queNotEmpty = mailToSend.SendQueueMails(mailQueue, SMTPServer, Port, UserName, Password, ref attachementFileName); if (queNotEmpty) { WriteLine("Sent file " + attachementFileName, LogFile); // Update the Report transaction for file sent mailToSend.UpdateMailSent(connString, attachementFileName); } else { WriteLine("No file to Sent ", LogFile); } } while (queNotEmpty); } catch (Exception ex) { WriteLine("Send to mail Error: " + ex.Message, LogFile); } finally { WriteLine( "---------------------------------------------------------------------------------------------------", LogFile); } } }