static void sendMail(tProgramData programData, string body) { if ((programData.smtpServer != "") && (programData.userName != "") && (programData.password != "")) { string[] w = programData.smtpServer.Split(new char[] { ':' }); int port = 25; string server = w[0]; if (w.Count() > 1) { int.TryParse(w[1], out port); } log("Отправка письма: "); log("Сервер: " + server); log("Порт: " + port); log("Пользователь: " + programData.userName); log("Получатель: " + programData.mailto); log("Тема: " + programData.subject); log("Письмо: " + body); using (MailMessage mm = new MailMessage(programData.userName, programData.mailto)) { mm.Subject = programData.subject; mm.Body = body; mm.IsBodyHtml = false; SmtpClient sc = new SmtpClient(server, port); sc.EnableSsl = true; sc.DeliveryMethod = SmtpDeliveryMethod.Network; sc.UseDefaultCredentials = false; sc.Credentials = new NetworkCredential(programData.userName, programData.password); sc.Send(mm); } } }
static void Main(string[] args) { tProgramData programData = new tProgramData(); cParam param = new cParam(); ParseParam(args, param, programData); // Проверяем путь if (!Directory.Exists(programData.pathBackup)) { sendMail(programData, string.Format(strErrorNotFoundPath, programData.pathBackup)); } else { List <tDataFile> fileList = new List <tDataFile>(); string[] files = Directory.GetFiles(programData.pathBackup).OrderByDescending(x => new FileInfo(x).CreationTime).ToArray(); foreach (string file in files) { fileList.Add(new tDataFile(file, Directory.GetCreationTime(file))); } int c = fileList.Count(); if (c == 0) { // Нет файлов в контролируемом каталоге sendMail(programData, strInfoNotArchiv); } else { tDataFile dataFile1 = fileList[0]; if (dataFile1.dateCreate <= DateTime.Today) { // Последний архив меньше сегодняшенго дня sendMail(programData, string.Format(strInfoOldArсhiv, dataFile1.dateCreate)); } else { if (c > 1) { tDataFile dataFile2 = fileList[1]; long lenFile1 = new FileInfo(dataFile1.name).Length; long lenFile2 = new FileInfo(dataFile2.name).Length; if (lenFile1 < lenFile2) { // Размер нового архива меньше чем старого sendMail(programData, string.Format(strInfoSizeNewArchivSmaller, lenFile1, dataFile1.name, lenFile2, dataFile2.name)); } } } } } }
// Загрузка данные из ini файла static void loadFromIni(string[] args, cParam param, tProgramData programData) { IniFiles ini = new IniFiles("param.ini"); string iniSection = "Основные настройки"; string iniSmtpServer = "smtpserver"; string iniUsername = "******"; string iniPassword = "******"; string iniMailto = "mailto"; string iniSubject = "subject"; string iniPathbackup = "pathbackup"; if (args.Count() == 0) { // Создадим INI файл с настройками ini.Write(iniSection, iniSmtpServer, ""); ini.Write(iniSection, iniUsername, ""); ini.Write(iniSection, iniPassword, ""); ini.Write(iniSection, iniMailto, ""); ini.Write(iniSection, iniSubject, ""); ini.Write(iniSection, iniPathbackup, ""); Console.WriteLine("17/08/2018 [email protected]"); Console.WriteLine("Программа контроля создания архивов."); Console.WriteLine("При запуске с параметрами контролирует каталог из параметра -pb"); Console.WriteLine("Если в каталоге сегодня не было свежего файла, значит архив не сделан"); Console.WriteLine("отправляет письмо на почту. Также если размер архива меньше чем прошлый"); Console.WriteLine("то также отправляет письмо на почту."); Console.WriteLine("Парамтеры: "); foreach (cParamData item in param) { Console.WriteLine("\t{0} {1}", item.command, item.descript); } } // Если в параметрах указано что брать данные из файла настроек, то // попробует получить из него данные if (param.Get("-f").data != "") { // читаем данные из файла programData.smtpServer = ini.Read(iniSection, iniSmtpServer); programData.userName = ini.Read(iniSection, iniUsername); programData.password = ini.Read(iniSection, iniPassword); programData.mailto = ini.Read(iniSection, iniMailto); programData.subject = ini.Read(iniSection, iniSubject); programData.pathBackup = ini.Read(iniSection, iniPathbackup); } }
static void ParseParam(string[] args, cParam param, tProgramData programData) { param.Add("-f", tParamData.tBoll, "", "Если указан, то настройки берутся из param.ini файла. Файл с пустыми настройками создан."); param.Add("-s", tParamData.tString, "smtp.yandex.ru:25", "адрес smtp сервера, например smtp.yandex.ru"); param.Add("-u", tParamData.tString, "", "почта под который делать отправку писем"); param.Add("-p", tParamData.tString, "", "пароль"); param.Add("-t", tParamData.tString, "", "адрес почты на который нужно отправлять письма, например [email protected]"); param.Add("-su", tParamData.tString, "", "тема письма"); param.Add("-pb", tParamData.tString, "", "контролируемый каталог с архивами"); param.Parse(args); programData.smtpServer = param.Get("-s").data; programData.userName = param.Get("-u").data; programData.password = param.Get("-p").data; programData.mailto = param.Get("-t").data; programData.subject = param.Get("-su").data; programData.pathBackup = param.Get("-pb").data; loadFromIni(args, param, programData); }