public void RunEmailQueue(ISession session, ManagedSecurityContext sec)
        {
            IList emailmessages = session.CreateCriteria(typeof(AccountEmailMessage))
                                  .Add(Expression.Eq("Sent", false))
                                  .SetMaxResults(ChunkSize)
                                  .List();

            SleepInterval = emailmessages.Count >= ChunkSize ? 1 : 15;

            SmtpClient smtp = ManagedAccountEmailMessage.GetSmtpClientInstance(session);

            foreach (AccountEmailMessage m in emailmessages)
            {
                if (IsStopping)
                {
                    break;
                }

                try
                {
                    MailMessage message = ManagedAccountEmailMessage.GetMessageInstance(session, m);
                    smtp.Send(message);
                    m.Sent = true;
                    if (m.DeleteSent)
                    {
                        session.Delete(m);
                    }
                    else
                    {
                        session.Save(m);
                    }
                }
                catch (ThreadAbortException)
                {
                    throw;
                }
                catch (Exception ex)
                {
                    if (m.Created.AddDays(1) < DateTime.UtcNow)
                    {
                        session.Delete(m);
                    }
                    else
                    {
                        m.SendError = ex.Message;
                        session.Save(m);
                    }
                }

                session.Flush();
                Thread.Sleep(1000 * InterruptInterval);
            }
        }
Exemple #2
0
 /// <summary>
 /// Send an AccountEmailMessage immediately (administrators only).
 /// </summary>
 /// <param name="ticket">authentication ticket</param>
 /// <param name="message">message</param>
 public void SendAccountEmailMessage(string ticket, TransitAccountEmailMessage message)
 {
     using (SnCore.Data.Hibernate.Session.OpenConnection())
     {
         ISession session = SnCore.Data.Hibernate.Session.Current;
         ManagedSecurityContext sec = new ManagedSecurityContext(session, ticket);
         ManagedAccountEmailMessage m_instance = new ManagedAccountEmailMessage(session);
         m_instance.Send(sec, message);
     }
 }