Esempio n. 1
0
        public void send(List <String[]> addressList, String title, String content, List <String> attachmentList)
        {
            sendWaitCnt    = addressList.Count;
            sendSuccessCnt = 0;
            sendErrorCnt   = 0;

            MailMessage mail = getMailMessage(null, null, title, content, attachmentList);

            Int32 maxResendCnt = Convert.ToInt32(ConfigService.get("mail.resendCnt"));

            for (Int32 i = 0; i < addressList.Count; i++)
            {
                String address = addressList[i][0];

                try
                {
                    mail.To.Clear();
                    mail.To.Add(new MailAddress(address));
                }
                catch (Exception ex)
                {
                    sendErrorCnt++;
                    sendWaitCnt--;
                    sendLog.AddFirst(DateUtils.getSysDate() + " 初始化发送邮件路径:" + address + "时出错:" + ex.Message);
                    continue;
                }

                if (addressList.Count > 50 && i == Math.Ceiling(new Decimal(addressList.Count) / 3))
                {
                    recheckReg(addressList, content, attachmentList);
                }

                Int32 resendCnt = 0;

                MailClientEntity sender = null;

                while (resendCnt++ < maxResendCnt)
                {
                    try
                    {
                        sender = getClient();

                        //设置form
                        String fromAddress = !"".Equals(sender.MailAddress) ? sender.MailAddress : ConfigService.get("mail.msg.from");
                        mail.From = new MailAddress(fromAddress, ConfigService.get("mail.msg.fromName"));

                        DateTime startTime = DateTime.Now;
                        sender.SmtpClient.Send(mail);
                        DateTime endTime = DateTime.Now;

                        List <SQLiteParameter> paramList = new List <SQLiteParameter>();
                        paramList.Add(new SQLiteParameter("@mail_address", address));
                        paramList.Add(new SQLiteParameter("@send_date", DateUtils.getSysDate()));
                        SQLiteUtils.execute("update t_mail_address set send_cnt = send_cnt+1, send_date = @send_date where mail_address = @mail_address", paramList);

                        sendLog.AddFirst(DateUtils.getSysDate() + " 邮件:" + address + "发送成功,耗时:" + Convert.ToString(endTime.Subtract(startTime).TotalSeconds) + "秒,主机:" + (sender != null ? sender.Host : "") + ",用户名:" + (sender != null ? sender.UserName : ""));

                        sender.ErrorCnt = 0;
                        sendSuccessCnt++;
                        sendWaitCnt--;
                        break;
                    }
                    catch (Exception ex)
                    {
                        if (maxResendCnt == resendCnt + 1)
                        {
                            sendErrorCnt++;
                            sendWaitCnt--;
                        }

                        //连续发送3次,停止使用此邮箱固定时间
                        if (sender.ErrorCnt++ >= 3)
                        {
                            sender.WaitEndTime = DateTime.Now.AddSeconds(Convert.ToDouble(ConfigService.get("mail.send.senderWaitTime")));
                        }

                        sendLog.AddFirst(DateUtils.getSysDate() + " 邮件:" + address + "发送出错,主机:" + (sender != null ? sender.Host : "") + ",用户名:" + (sender != null ? sender.UserName : "") + ",异常:" + ex.Message);
                        List <SQLiteParameter> paramList = new List <SQLiteParameter>();
                        paramList.Add(new SQLiteParameter("@id", sender.Id));
                        paramList.Add(new SQLiteParameter("@last_error_date", DateUtils.getSysDate() + ex.Message));

                        SQLiteUtils.execute("update t_mail_sender set last_error_date = @last_error_date where id = @id", paramList);
                    }
                }

                while (sendLog.Count > 100)
                {
                    sendLog.RemoveLast();
                }
            }
        }
Esempio n. 2
0
        public void add(String url, String type)
        {
            url = url.Replace("\r\n", "").Replace(Environment.NewLine, "").Trim();

            RuntimeEntity runtime = runtimeService.get(url);

            if (runtime == null)
            {
                runtime = runtimeService.add(url);
            }

            if (Constant.RunStatus.RUNING.Equals(runtime.RunStatus))
            {
                try
                {
                    if (get(url) == null)
                    {
                        runtime.WaitQueue.Add(url, new ParseEntity(url, type));

                        Hashtable param = new Hashtable();
                        param.Add("url", url);
                        param.Add("type", type);

                        lock (runtime.WorkItemsGroup)
                        {
                            ThreadPoolEx.add(runtime.WorkItemsGroup, new WorkItemCallback(ParseThread.run), param, runtime.Priority);
                        }
                    }
                }
                catch { }

                //等待解析数超过系统设定,则优先级降低
                if (!WorkItemPriority.Lowest.Equals(runtime.Priority) && (runtime.WaitQueue.Count + runtime.StartQueue.Count + runtime.SuccessQueue.Count) > Convert.ToInt32(ConfigService.get("parse.lowParseCnt")))
                {
                    runtime.Priority = WorkItemPriority.Lowest;
                }

                //已解析数超过系统设定,则停止
                if (runtime.WaitQueue.Count + runtime.StartQueue.Count + runtime.SuccessQueue.Count + runtime.ErrorQueue.Count >= Convert.ToInt32(ConfigService.get("parse.rule.maxParseCnt")))
                {
                    runtime.RunStatus = Constant.RunStatus.STOPING;
                }
            }
        }