/// <summary> /// Delete a standard mail /// </summary /// <param name="Elem">The mail to delete</param> /// <returns>True if deleted successfully, otherwise, False</returns> public static bool DeleteStandardMail(string Elem) { SpooledObject objToDel = QueueStandard.GiveSpooledObject(Elem); bool flagIsDeleted = false; switch (objToDel.State) { case StateSpooledObject.queued: { QueueStandard.Remove(Elem); File.Delete(Elem); ActiveQLibrary.Form.ManageForm.RemoveElemStandardQueue(Elem); flagIsDeleted = true; } break; case StateSpooledObject.dispacher: { if (_processer.Dispacher.Delete(Elem) == true) { QueueStandard.Remove(Elem); File.Delete(Elem); ActiveQLibrary.Form.ManageForm.RemoveElemStandardQueue(Elem); flagIsDeleted = true; } else { flagIsDeleted = false; } } break; case StateSpooledObject.sent: { flagIsDeleted = false; } break; } return(flagIsDeleted); }
/// <summary> /// Function used in the thread. /// </summary> private void FctThreadWorker() { IsRunning = true; while (IsRunning == true) { // check if a task have been transmitted by the dispacher if (TaskToDo != null) { string fileName = TaskToDo.Name; try { Global.Log.WriteEvent(LogType.normal, string.Format("[{0}] Start of task '{1}'", _threadWorker.Name, TaskToDo.Name)); switch (TaskToDo.Type) { case TypeSpooledObject.standardMail: case TypeSpooledObject.scheduledMail: { Object message = Activator.CreateInstance(Global.ActiveCommonAsm.GetType("ActiveUp.Net.Mail.Message", true)); message = TaskToDo.Object; /*message.GetType().GetProperty("Subject").SetValue(message,string.Format("TEST MAIL : {0}",_threadWorker.Name),null); * Global.ActiveMailAsm.GetType("ActiveUp.Mail.Smtp.SmtpClient").GetMethod("Send",new Type[] {Global.ActiveMailAsm.GetType("ActiveUp.Mail.Common.Message",true), Type.GetType("System.String")}).Invoke(null,new object[] {message,"mail.activeup.com"});*/ bool sentOK = true; if ((int)Global.SmtpServers.GetType().GetProperty("Count").GetValue(Global.SmtpServers, null) > 0) { sentOK = (bool)Global.ActiveSmtpAsm.GetType("ActiveUp.Net.Mail.SmtpClient").GetMethod("Send", new Type[] { Global.ActiveCommonAsm.GetType("ActiveUp.Net.Mail.Message", true), Global.ActiveCommonAsm.GetType("ActiveUp.Net.Mail.ServerCollection", true) }).Invoke(null, new object[] { message, Global.SmtpServers }); } else { //Global.ActiveMailAsm.GetType("ActiveUp.Net.Mail.SmtpClient").GetMethod("Send", new Type[] { Global.ActiveMailAsm.GetType("ActiveUp.Net.Mail.Message", true) }).Invoke(null, new object[] { message }); Global.ActiveSmtpAsm.GetType("ActiveUp.Net.Mail.SmtpClient").GetMethod("DirectSend", new Type[] { Global.ActiveCommonAsm.GetType("ActiveUp.Net.Mail.Message", true) }).Invoke(null, new object[] { message }); } switch (TaskToDo.Type) { case TypeSpooledObject.standardMail: { QueueStandard.Remove(TaskToDo.Name); ActiveQLibrary.Form.ManageForm.RemoveElemStandardQueue(TaskToDo.Name); } break; case TypeSpooledObject.scheduledMail: { QueueScheduled.Remove(TaskToDo.Name); ActiveQLibrary.Form.ManageForm.RemoveElemScheduledQueue(TaskToDo.Name); } break; } /*ActiveQLibrary.Form.ManageForm.Form.PProgress.NewValueProgressBar(_threadWorker.Name,0); * Thread.Sleep(2000); * ActiveQLibrary.Form.ManageForm.Form.PProgress.NewValueProgressBar(_threadWorker.Name,20); * Thread.Sleep(2000); * ActiveQLibrary.Form.ManageForm.Form.PProgress.NewValueProgressBar(_threadWorker.Name,40); * Thread.Sleep(2000); * ActiveQLibrary.Form.ManageForm.Form.PProgress.NewValueProgressBar(_threadWorker.Name,60); * Thread.Sleep(2000); * ActiveQLibrary.Form.ManageForm.Form.PProgress.NewValueProgressBar(_threadWorker.Name,80); * Thread.Sleep(2000); * ActiveQLibrary.Form.ManageForm.Form.PProgress.NewValueProgressBar(_threadWorker.Name,100); * Thread.Sleep(2000);*/ if (sentOK == false) { Global.Log.WriteError(string.Format("[{0}:{1}] An error occurs when sending mail.", _threadWorker.Name, fileName)); Global.MoveFileToError(TaskToDo.Name, string.Format("{0}", _threadWorker.Name)); } else if (Global.ConfigValue.DeleteMailWhenProcessed == true) { File.Delete(TaskToDo.Name); } else { Global.MoveFileToProcessed(TaskToDo.Name, string.Format("{0}", _threadWorker.Name)); } } break; case TypeSpooledObject.scheduledTask: { Task task = (Task)TaskToDo.Object; switch (task.Method.ToLower().ToString()) { case "post": { POST(task.Address); } break; case "get": { GET(task.Address); } break; case "file": { Process newProcess = new Process(); newProcess.StartInfo.FileName = task.Address; newProcess.Start(); } break; } DateTime nextExecution = task.GetNextTriggered(); ActiveQLibrary.Form.ManageForm.RemoveElemScheduledTask(TaskToDo.Name); if (nextExecution == DateTime.MinValue) { QueueScheduled.Remove(TaskToDo.Name); ActiveQLibrary.Form.ManageForm.RemoveElemScheduledTask(TaskToDo.Name); Global.Log.WriteEvent(LogType.debug, string.Format("[{0}] '{1}' no more exectution, deleting", _threadWorker.Name, TaskToDo.Name, nextExecution)); } else { QueueScheduled.ModifySendingDate(TaskToDo.Name, nextExecution); QueueScheduled.ModifyState(TaskToDo.Name, StateSpooledObject.queued); Global.Log.WriteEvent(LogType.debug, string.Format("[{0}] '{1}' next sending date '{2}'", _threadWorker.Name, TaskToDo.Name, nextExecution)); } } break; } //Thread.Sleep(100000); Global.Log.WriteEvent(LogType.normal, string.Format("[{0}] End of task '{1}'", _threadWorker.Name, TaskToDo.Name)); Thread.Sleep(200); // the task is ended, set the TaskToDo to null to indicates to the dispacher that it's free for a new task TaskToDo = null; } catch (ThreadAbortException) { } catch (Exception ex) { Global.Log.WriteError(string.Format("[{0}:{1}] {2}", _threadWorker.Name, fileName, ex.Message)); Global.Log.WriteError(string.Format("[{0}:{1}] {2}", _threadWorker.Name, fileName, ex.StackTrace)); if (ex.InnerException != null) { Global.Log.WriteError(string.Format("[{0}:{1}] {2}", _threadWorker.Name, fileName, ex.InnerException.Message)); Global.Log.WriteError(string.Format("[{0}:{1}] {2}", _threadWorker.Name, fileName, ex.InnerException.StackTrace)); } if (TaskToDo.Type != TypeSpooledObject.scheduledTask) { Global.MoveFileToError(TaskToDo.Name, string.Format("{0}", _threadWorker.Name)); if (TaskToDo.Type == TypeSpooledObject.standardMail) { QueueStandard.Remove(TaskToDo.Name); } else if (TaskToDo.Type == TypeSpooledObject.scheduledMail) { QueueScheduled.Remove(TaskToDo.Name); } } TaskToDo = null; } } Thread.Sleep(100); } }