/// <summary> /// Function used in the thread reader xml. /// </summary> private void FctThreadReaderXml() { IsRunningMail = true; while (IsRunningMail == true) { try { foreach (string file in Global.ConfigValue.XmlPickupFiles) { Global.Log.WriteEvent(LogType.normal, string.Format("[READER:XML] Scanning xml file : {0}", file)); if (File.Exists(file)) { // deserialize xml task file TextReader reader = new StreamReader(file); XmlSerializer serialize = new XmlSerializer(typeof(Tasks)); Tasks tasks = (Tasks)serialize.Deserialize(reader); reader.Close(); DateTime now = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 0, 0, 0); for (int i = 0; i < tasks.TasksList.Count; i++) { Task t = (Task)tasks.TasksList[i]; string fileName = string.Format("{0}?{1}", file, t.Id); if (QueueScheduled.FindInQueue(fileName) == true) { Global.Log.WriteEvent(LogType.debug, string.Format("[READER:XML] '{0} (id:{1})' already in the scheduled queue, discarding...", file, t.Id)); } else { if (now <= t.DateEnd) { DateTime triggerDate = t.GetNextTriggered(); if (triggerDate != DateTime.MinValue) { SpooledObject newElement = new SpooledObject(fileName, TypeSpooledObject.scheduledTask, t, triggerDate); QueueScheduled.AddElement(newElement); ActiveQLibrary.Form.ManageForm.AddElementTaskQueue(file, string.Format("Task(id:{0})", t.Id)); Global.Log.WriteEvent(LogType.normal, string.Format("[READER:XML] '{0} (id:{1})' added in the scheduled queue...", file, t.Id)); } else { Global.Log.WriteEvent(LogType.debug, string.Format("[READER:XML] '{0} (id:{1})' up to date, discarding...", file, t.Id)); } } else { Global.Log.WriteEvent(LogType.debug, string.Format("[READER:XML] '{0} (id:{1})' up to date, discarding...", file, t.Id)); } } } } else { Global.Log.WriteError(string.Format("[READER:XML] File : '{0}' doesn't exist, discarding...", file)); } } } catch (ThreadAbortException) { } catch (Exception ex) { Global.Log.WriteError("[READER:XML] " + ex.Message); Global.Log.WriteError("[READER:XML] " + ex.StackTrace); Thread.Sleep(500); } Global.Log.WriteEvent(LogType.normal, string.Format("[READER:XML] Next scan xml in {0} seconds", Global.ConfigValue.Readers.XmlPickup)); Thread.Sleep(Global.ConfigValue.Readers.XmlPickup * 1000); } }
/// <summary> /// Function used in the thread reader mail /// </summary> private void FctThreadReaderMail() { IsRunningMail = true; while (IsRunningMail == true) { //if (Global.ActiveMailAsm == null) if (Global.ActiveCommonAsm == null) { IsRunningMail = false; } else { try { foreach (string dir in Global.ConfigValue.MailPickupDirectories) { Global.Log.WriteEvent(LogType.normal, string.Format("[READER:MAIL] Scanning mail directory : {0}", dir)); DirectoryInfo dirInfo = new DirectoryInfo(dir); // refrash information dirInfo.Refresh(); if (Directory.Exists(dir)) { FileInfo[] listingFile = dirInfo.GetFiles(); foreach (FileInfo file in listingFile) { string ext = ".EML"; string fileName = dir + @"\" + file.Name; if (File.Exists(fileName) && file.Length > 4 && file.ToString().Substring(file.ToString().Length - ext.Length).ToUpper() == ext) { FileInfo fileInfo = new FileInfo(fileName); fileInfo.Refresh(); if (fileInfo.Exists) { // check the validity of the message Object message = Activator.CreateInstance(Global.ActiveCommonAsm.GetType("ActiveUp.Net.Mail.Message", true)); bool isMessageValid = true; try { message = Global.ActiveCommonAsm.GetType("ActiveUp.Net.Mail.Parser").GetMethod("ParseMessageFromFile", new Type[] { Type.GetType("System.String") }).Invoke(null, new object[] { fileName }); if (ValidateMailMessage(message) == false) { isMessageValid = false; } } catch (Exception ex) { Console.WriteLine(ex); isMessageValid = false; } if (isMessageValid == false) { Global.Log.WriteError(string.Format("[READER:MAIL] '{0}' is not a valid mail message or cannot be parsed, moving it to the error directory...", fileName)); Global.MoveFileToError(fileName, "[READER:MAIL]"); } else { /*message.GetType().GetProperty("To").PropertyType.GetMethod("Clear",new Type[] {}).Invoke(message.GetType().GetProperty("To").GetValue(message,null),null); * message.GetType().GetProperty("To").PropertyType.GetMethod("Add",new Type[] {Type.GetType("System.String")}).Invoke(message.GetType().GetProperty("To").GetValue(message,null),new Object[] {"*****@*****.**"}); * message.GetType().GetProperty("Subject").SetValue(message,"ACTIVEMAIL",null);*/ DateTime dateMessage = DateTime.Parse(((System.Collections.Specialized.NameValueCollection)message.GetType().GetProperty("HeaderFields").GetValue(message, null))["date"]); if (dateMessage <= DateTime.Now) { // message to send immediately if (QueueScheduled.FindInQueue(fileName) == true) { Global.Log.WriteEvent(LogType.debug, string.Format("[READER:MAIL] '{0}' already in the scheduled queue, discarding...", fileName)); } else { if (QueueStandard.FindInQueue(fileName) == false) { SpooledObject newElement = new SpooledObject(fileName, TypeSpooledObject.standardMail, message); Global.Log.WriteEvent(LogType.normal, string.Format("[READER:MAIL] '{0}' added in the standard queue...", fileName)); QueueStandard.AddElement(newElement); ActiveQLibrary.Form.ManageForm.AddElemStandardQueue(newElement.Name); } else { Global.Log.WriteEvent(LogType.debug, string.Format("[READER:MAIL] '{0}' already in the standard queue, discarding...", fileName)); } } } else { // message scheduled if (QueueScheduled.FindInQueue(fileName) == false) { SpooledObject newElement = new SpooledObject(fileName, TypeSpooledObject.scheduledMail, message, dateMessage); Global.Log.WriteEvent(LogType.normal, string.Format("[READER:MAIL] '{0}' added in the scheduled queue...", fileName)); QueueScheduled.AddElement(newElement); ActiveQLibrary.Form.ManageForm.AddElementScheduledQueue(newElement.Name); } else { Global.Log.WriteEvent(LogType.debug, string.Format("[READER:MAIL] '{0}' already in the scheduled queue, discarding...", fileName)); } } } } } else { Global.Log.WriteError(string.Format("[READER:MAIL] File '{0}' is not valid or doesn't have .eml extention, it's moved to the error directory...", file.FullName)); Global.MoveFileToError(file.FullName, "[READER:MAIL]"); } } } else { Global.Log.WriteError(string.Format("[READER:MAIL] Directory : '{0}' doesn't exist, discarding...", dir)); } } } catch (ThreadAbortException) { } catch (Exception ex) { Global.Log.WriteError("[READER:MAIL] " + ex.Message); Global.Log.WriteError("[READER:MAIL] " + ex.StackTrace); if (ex.InnerException != null) { Global.Log.WriteError("[READER:MAIL] " + ex.InnerException.Message); Global.Log.WriteError("[READER:MAIL] " + ex.InnerException.StackTrace); } Thread.Sleep(500); } Global.Log.WriteEvent(LogType.normal, string.Format("[READER:MAIL] Next scan mail in {0} seconds", Global.ConfigValue.Readers.MailPickUp)); Thread.Sleep(Global.ConfigValue.Readers.MailPickUp * 1000); } } }