/// <summary>
        /// Called when a PausedMailingMessage is redelivered to the agent (has been tried already)
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="args"></param>
        void OnPausedMailing(object sender, InboundMessageArgs<PausedMailingMessage> args)
        {
            var m = args.Message;
            var cachePrincipal = Thread.CurrentPrincipal;
            //ISsoPrincipal principal;
            //TODO this has to make more states .. this is not a good solution
            WriteLine("OnPausedMailing started");
            try
            {
                WriteLine("OnPausedMailing attempt to PerformMailingLogic started");

                PerformMailingLogic(m.MailTrackingID, m.Application, m.Environment, m.Template,
                    m.Recipients, m.PartialStatus, m.AuthTicket,
                    m.UnrecordedStatus, m.UnrecordedNote);
                WriteLine("OnPausedMailing attempt to PerformMailingLogic Done");

            }
            catch (ApplicationException appEx)
            {
                if (_asAgent)
                {
                    YPMon.Critical("UNHANDLED_APP_EXCEPTION_ONPAUSED_MAILING", string.Concat("AgentMode ", _asAgent), appEx.Message);
                }
                else
                    throw;
            }
            catch (Exception ex)
            {
                if (_asAgent)
                {
                    YPMon.Critical("UNHANDLED_EXCEPTION_ONPAUSED_MAILING", string.Concat("AgentMode ", _asAgent), ex.Message);
                }
                else
                    throw;
            }
        }
 void PausedMailing(PausedMailingMessage m)
 {
     var dlg = OnPausedMailing;
     if (dlg != null)
     {
         var args = new InboundMessageArgs<PausedMailingMessage> { Message = m, Topic = this.Topic };
         dlg(this, args);
     }
 }
        /// <summary>
        /// Called when a MailingMessage is delivered to the agent (first delivery).
        /// </summary>
        void OnMailing(object sender, InboundMessageArgs<MailingMessage> args)
        {
            var m = args.Message;
            if (String.IsNullOrEmpty(m.AuthTicket))
            {
                YPMon.Warn("AUTHTICKET_MISSING",
                    String.Concat("MailingMessage arrived without an auth-ticket and has been discarded. Details: { Application: ", m.Application,
                    ", Environment: ", m.Environment,
                    ", EmailTemplate: ", m.Template,
                    ", RecipientList: \"", m.Recipients.ToStrongMailEmailAddressStream(), "\" }"));
            }
            else
            {
                try
                {

                    PerformMailingLogic(m.MailTrackingID, m.Application, m.Environment, m.Template, m.Recipients,
                                     	PartialCreateStatus.None, m.AuthTicket, MailTrackingStatus.None, null);
                    YPMon.Info("TMAIL_PERFORM_SM",
                        string.Format("App: {0}, Env: {1}, Template: {2}, States: {3}",
                        m.Application, m.Environment, m.Template, Enum.GetName(typeof(MailTrackingStatus), MailTrackingStatus.None)));

                    var principal = Thread.CurrentPrincipal;
                    //Thread.CurrentPrincipal = principal;
                }
                catch (ApplicationException appEx)
                {
                    if (_asAgent)
                    {
                        YPMon.Critical("UNHANDLED_APP_EXCEPTION_ONMAILING", string.Concat("AgentMode ",_asAgent),appEx.Message);
                    }
                    else
                        throw;
                }
                catch (Exception ex)
                {
                    if (_asAgent)
                    {
                        YPMon.Critical("UNHANDLED_EXCEPTION_ONMAILING", string.Concat("AgentMode ", _asAgent), ex.Message);
                    }
                    else
                        throw;
                }
            }
        }
 void DelayedMailing(DelayedMailingMessage m)
 {
     var dlg = OnDelayedMailing;
     if (dlg != null)
     {
         var args = new InboundMessageArgs<DelayedMailingMessage> { Message = m, Topic = this.Topic };
         dlg(this, args);
     }
 }