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); } }
/// <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); } }