Ejemplo n.º 1
0
        /// <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);
        }
Ejemplo n.º 2
0
        // 发送邮件
        private void SendMail(Message mail)
        {
            #region 发送邮件

            Send(mail, defaultHost, defaultPort, defaultUserName, defaultPassword);

            #endregion

            #region  除队列 保存已发送邮件

            MessageDa.DeleteMaillQueue(mail.UID);

            MessageDa.InsertMaillSend(mail);

            #endregion
        }
Ejemplo n.º 3
0
        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);
                }
            }
        }
Ejemplo n.º 4
0
        public DataTable read(Message message)
        {
            MessageDa messageDa = new MessageDa();

            return(messageDa.Read(message));
        }
Ejemplo n.º 5
0
        public bool create(Message message)
        {
            MessageDa messageDa = new MessageDa();

            return(messageDa.create(message));
        }
Ejemplo n.º 6
0
 /// <summary>
 /// 取消邮件队列中的指定邮件。
 /// </summary>
 /// <param name="mailUID">邮件标识(UID)。</param>
 public void CancleMailQueue(Guid mid)
 {
     MessageDa.DeleteMaillQueue(mid);
 }
Ejemplo n.º 7
0
 /// <summary>
 /// 根据邮件标识(UID)获取邮件队列中的邮件。。
 /// </summary>
 /// <param name="mid">邮件标识(UID)。</param>
 /// <returns>邮件对象。不存在返回null。</returns>
 public Message GetMailQueueByID(Guid mid)
 {
     return(MessageDa.GetMailQueueByID(mid));
 }