/// <summary> /// 发送邮件队列中的邮件 -- 保证同时只有一个在执行 /// </summary> /// <param name="includeFailed">是否包括发送失败的邮件。</param> /// <returns>是否执行了发送。</returns> public bool SendMailQueue() { lock (s_lock) { if (sending) // 如果正在发送,直接返回 { log.Info(String.Format("Starting to send mail queue at {0:yyyy-MM-dd HH:mm:ss}, but last job({1:yyyy-MM-dd HH:mm:ss}) is still running", DateTime.Now, time)); return(false); } else { sending = true; time = DateTime.Now; log.Info(String.Format("Starting to send mail queue at {0:yyyy-MM-dd HH:mm:ss}", time)); } } try { List <Message> queue = MessageDa.GetMailQueue(null, true); foreach (Message m in queue) { try { // 3次以内重发 if (m.Status <= 3) { SendMail(m); } } catch (Exception ex) { m.Status++; log.Warn(String.Format("Sending the specified mail[{0}] Exception:{1}", m.UID, ex.ToString())); MessageDa.UpdateMaillQueue(m); } } } catch (Exception ex) { log.Error(String.Format("Unable to get the mail queue with Exception:{0}", ex.ToString())); } finally { lock (s_lock) { sending = false; } } return(true); }
// 发送邮件 private void SendMail(Message mail) { #region 发送邮件 Send(mail, defaultHost, defaultPort, defaultUserName, defaultPassword); #endregion #region 除队列 保存已发送邮件 MessageDa.DeleteMaillQueue(mail.UID); MessageDa.InsertMaillSend(mail); #endregion }
internal static void SendMail(TranscationHelper trans, string to, string cc, string subject, string body, MailPriority priority, params Guid[] files) { Message message = new Message(); message.From = Sender.GetDefaultFrom(); message.To = to; message.CC = cc; message.Subject = subject; message.Body = body; message.Priority = priority; MessageDa.InsertMaillQueue(message, trans); if (files != null) { foreach (Guid file in files) { MessageDa.InsertMaillAttach(file, Utils.SysFileDir(), message.UID, trans); } } }
public DataTable read(Message message) { MessageDa messageDa = new MessageDa(); return(messageDa.Read(message)); }
public bool create(Message message) { MessageDa messageDa = new MessageDa(); return(messageDa.create(message)); }
/// <summary> /// 取消邮件队列中的指定邮件。 /// </summary> /// <param name="mailUID">邮件标识(UID)。</param> public void CancleMailQueue(Guid mid) { MessageDa.DeleteMaillQueue(mid); }
/// <summary> /// 根据邮件标识(UID)获取邮件队列中的邮件。。 /// </summary> /// <param name="mid">邮件标识(UID)。</param> /// <returns>邮件对象。不存在返回null。</returns> public Message GetMailQueueByID(Guid mid) { return(MessageDa.GetMailQueueByID(mid)); }