bool ReliableRecordStatus(ref MailTracking tracking,
			string rawAuthTicketData,
			Recipient[] recipients,
			PartialCreateStatus partial,
			MailTrackingStatus unrecordedStatus,
			string unrecordedNote,bool reSubmit
			)
        {
            try
            {
                tracking.Status = unrecordedStatus;
                tracking = ExecuteDbActionsWithinTransaction(tracking,
                (cn, t, l) =>
                {
                    return PerformMailTrackingUpdate(cn, t, unrecordedNote);
                });
                return true;
            }
            catch (SqlException e)
            {

                if (e.Message.Contains("A network-related or instance-specific error occurred while establishing a connection to SQL Server"))
                {
                    YPMon.Critical("SQLSERVER_UNREACHABLE", e.FormatForLogging(), null);
                    var capture = tracking;
                    string server = (string.IsNullOrEmpty(e.Server)) ? string.Empty : e.Server;
                    YPMon.Info("TMAIL_RELIABLERECORDSTATUS_INSERTRACKING_SQLERROR",
                             string.Format("App: {0}, Env: {1}, Template: {2}, States: {3} SQLERROR: {4} SQLServer: {5}",
                             capture.Application, capture.Environment, capture.EmailTemplate, Enum.GetName(typeof(PartialCreateStatus), partial),
                             e.Message,server));

                    if (partial == PartialCreateStatus.Paused)
                    {
                        //_output.CreateAndSendMessage<PausedMailingMessage>(AgentProtocol.CTMailPaused, m =>
                        //{
                        //    m.AuthTicket = rawAuthTicketData;
                        //    m.MailTrackingID = capture.ID;
                        //    m.Application = capture.Application;
                        //    m.Environment = capture.Environment;
                        //    m.Template = capture.EmailTemplate;
                        //    m.Recipients = recipients;
                        //    m.PartialStatus = partial;
                        //    m.UnrecordedStatus = unrecordedStatus;
                        //    m.UnrecordedNote = unrecordedNote;
                        //});
                    }
                    if (partial != PartialCreateStatus.Dropped)
                    {
                        _output.CreateAndSendMessage<DelayedMailingMessage>(AgentProtocol.CTMailDelayed, m =>
                        {
                            m.AuthTicket = rawAuthTicketData;
                            m.MailTrackingID = capture.ID;
                            m.Application = capture.Application;
                            m.Environment = capture.Environment;
                            m.Template = capture.EmailTemplate;
                            m.Recipients = recipients;
                            m.PartialStatus = partial;
                            m.UnrecordedStatus = unrecordedStatus;
                            m.UnrecordedNote = unrecordedNote;
                        });
                    }

                    YPMon.Info("TMAIL_RECORDMAILING_STATUS",
                      string.Format("SQLSERVER_UNREACHABLE App: {0}, Env: {1}, Template: {2}, States: {3}",
                      capture.Application, capture.Environment, capture.EmailTemplate, Enum.GetName(typeof(PartialCreateStatus), partial)));
                }
                return false;
            }
        }
        internal void PerformMailingLogic(Guid id, string app, string env, string template, Recipient[] recipients,
				PartialCreateStatus partial, string rawAuthTicketData, MailTrackingStatus unrecordedStatus, 
				string unrecordedNote)
        {
            Require.IsNotEmpty("app", app);
            Require.IsNotEmpty("env", env);
            Require.IsNotEmpty("template", template);
            Require.IsNotNull("recipients", recipients);
            Require.AtLeastOneParam("recipients", recipients);

            MailTracking tracking = null;
            while (true)
            {
                if (tracking == null && partial >= PartialCreateStatus.Saved)
                {
                    YPMon.Info("TMAIL_PERFORM_SM",
                                string.Format("App: {0}, Env: {1}, Template: {2}, States: {3}",
                                app,env,template,partial.ToString()));
                    this.TraceInformation("Processing mailing logic for App: {0}, Env: {1}, Template: {2}, State: {3}",
                                app, env, template, partial.ToString());

                    if (!TryLoadTracking(id, out tracking))
                    { // could not load, requeue and try again later...

                        YPMon.Info("TMAIL_PERFORM_SM",
                        string.Format("CANNOT LOAD TRACKING App: {0}, Env: {1}, Template: {2}, States: {3}",
                        app, env, template, partial.ToString()));
                        this.TraceError("Cannot load tracking for App: {0}, Env: {1}, Template: {2}, State: {3}",
                                   app, env, template, Enum.GetName(typeof(PartialCreateStatus), tracking.Status));
                        //if (partial == PartialCreateStatus.Paused)
                        //{
                        //    Agent.CreateAndSendMessage<PausedMailingMessage>(AgentProtocol.CTMailPaused, m =>
                        //    {
                        //        m.AuthTicket = rawAuthTicketData;
                        //        m.MailTrackingID = id;
                        //        m.Application = app;
                        //        m.Environment = env;
                        //        m.Template = template;
                        //        m.Recipients = recipients;
                        //        m.PartialStatus = partial;
                        //    });
                        //}
                        //else
                        //{
                        //PAUSED mailing and deay mailing will retry now.
                            Agent.CreateAndSendMessage<DelayedMailingMessage>(AgentProtocol.CTMailDelayed, m =>
                            {
                                m.AuthTicket = rawAuthTicketData;
                                m.MailTrackingID = id;
                                m.Application = app;
                                m.Environment = env;
                                m.Template = template;
                                m.Recipients = recipients;
                                m.PartialStatus = partial;
                            });
                        //}
                        return;
                    }
                    if (unrecordedStatus != MailTrackingStatus.None && !String.IsNullOrEmpty(unrecordedNote))
                    {
                        // Record the unrecorded message
                        if (!ReliableRecordStatus(ref tracking, rawAuthTicketData, recipients, partial, unrecordedStatus, unrecordedNote))
                            return;
                    }
                }
                switch (partial)
                {
                    case PartialCreateStatus.None:
                        // 1) Save the tracking record...
                        tracking = Factory<MailTracking>.CreateInstance();
                        tracking.ID = id;
                        tracking.Application = app;
                        tracking.Environment = env;
                        tracking.EmailTemplate = template;
                        tracking.Status = MailTrackingStatus.None;
                        YPMon.Info("TMAIL_PERFORM_SM",
                                   string.Format("App: {0}, Env: {1}, Template: {2}, States: {3}",
                                   app, env, template, Enum.GetName(typeof(PartialCreateStatus), tracking.Status)));
                        this.TraceInformation("Saving tracking record for App: {0}, Env: {1}, Template: {2}, States: {3}",
                                   app, env, template, Enum.GetName(typeof(PartialCreateStatus), tracking.Status));

                        if (TrySaveMailing(ref tracking, rawAuthTicketData, ref partial, recipients))
                        {
                            continue;
                        }
                        return;
                    case PartialCreateStatus.Dropped:
                        YPMon.Info("TMAIL_PERFORM_SM",
                                 string.Format("App: {0}, Env: {1}, Template: {2}, States: {3}",
                                 app, env, template, Enum.GetName(typeof(PartialCreateStatus), partial)));
                        //if (ReliableRecordStatus(ref tracking, rawAuthTicketData, recipients, partial, MailTrackingStatus.Dropped,
                        //    String.Concat("Email message has invalid states or irrecoverable error: dropped ", app, "/", env, "."),false))
                        //{
                        //    continue;
                        //}
                        return;
                    case PartialCreateStatus.Saved:
                        // 2) validate app and environment...
                        try
                        {
                            ValidateApplicationAndEnvironment(app, env);
                            partial = PartialCreateStatus.Validated;
                            YPMon.Info("TMAIL_PERFORM_SM",
                                   string.Format("App: {0}, Env: {1}, Template: {2}, States: {3}",
                                   app, env, template, Enum.GetName(typeof(PartialCreateStatus), partial)));
                            if (ReliableRecordStatus(ref tracking, rawAuthTicketData, recipients, partial, MailTrackingStatus.Accepted,
                                String.Concat("Application and environment accepted: ", app, "/", env, ".")))
                            {
                                continue;
                            }
                        }
                        catch (ResourceNotFoundException e)
                        {
                            ReliableRecordStatus(ref tracking, rawAuthTicketData, recipients, PartialCreateStatus.Failed, MailTrackingStatus.Failed,
                                e.Message);
                        }
                        return;
                    case PartialCreateStatus.Validated:
                        // 3) record the email addresses
                        partial = PartialCreateStatus.EmailsRecorded;
                        YPMon.Info("TMAIL_PERFORM_SM",
                                   string.Format("App: {0}, Env: {1}, Template: {2}, States: {3}",
                                   app, env, template, Enum.GetName(typeof(PartialCreateStatus), partial)));
                        if (ReliableRecordStatus(ref tracking, rawAuthTicketData, recipients, partial, MailTrackingStatus.Accepted,
                            String.Concat("Email recipients: ", recipients.ToStrongMailEmailAddressStream())))
                        {
                            continue;
                        }
                        return;
                    case PartialCreateStatus.EmailsRecorded:
                        // 4) Submit to StrongMail...
                        YPMon.Info("TMAIL_PERFORM_SM",
                                   string.Format("App: {0}, Env: {1}, Template: {2}, States: {3} PreSubmit",
                                   app, env, template, Enum.GetName(typeof(PartialCreateStatus), partial)));
                        TrySubmitMailing(tracking, rawAuthTicketData, recipients, ref partial);
                        YPMon.Info("TMAIL_PERFORM_SM",
                                   string.Format("App: {0}, Env: {1}, Template: {2}, States: {3} PostSubmit",
                                   app, env, template, Enum.GetName(typeof(PartialCreateStatus), partial)));
                        return;
                    default:
                        break;
                }
            }
        }
 bool ReliableRecordStatus(ref MailTracking tracking,
    string rawAuthTicketData,
    Recipient[] recipients,
    PartialCreateStatus partial,
    MailTrackingStatus unrecordedStatus,
    string unrecordedNote
    )
 {
     return ReliableRecordStatus(ref tracking, rawAuthTicketData, recipients, partial, unrecordedStatus, unrecordedNote, true);
 }