예제 #1
0
        /// <summary>
        /// 更换IP 
        /// </summary>
        /// <param name="netType">0表示路由 1表示拨号连接</param>
        /// <param name="msg">通知输出消息</param>
        /// <param name="done">完成时执行</param>
        /// <param name="index">第几次执行</param>
        /// <returns></returns>
        public static string ChangeIP(int netType, Action<string> msg = null, Pub.Class.Action done = null, int index = 0)
        {
            string name = GetNetName(netType);
            setting = SendSettingHelper.SelectByID(1);

            if (setting.IsNull()) {
                if (!msg.IsNull()) msg("请修改发送设置!");
                if (!done.IsNull()) done();
                return "";
            } else {
                if (index == setting.MaxRetryCount) {
                    if (!done.IsNull()) done();
                    return "";
                }
                if (!msg.IsNull()) msg((index + 1).ToString());

                //清空多少分钟前的历史IP
                if (Data.Pool("ConnString").DBType == "SqlServer") {
                    "delete from IpHistory where CreateTime < DateAdd(MINUTE , -{0}, getdate())".FormatWith(setting.DeleteInterval).ToSQL().ToExec();
                } else if (Data.Pool("ConnString").DBType == "SQLite" || Data.Pool("ConnString").DBType == "MonoSQLite") {
                    "delete from IpHistory where datetime(CreateTime) < datetime('now','localtime', '-{0} minute')".FormatWith(setting.DeleteInterval).ToSQL().ToExec();
                }
                if (!msg.IsNull()) msg("正在重启" + name + "......");
                IController connect;
                switch (netType) {
                    case 1: connect = new ModelController(); break;
                    case 2: connect = new TianYiController(); break;
                    default: connect = new RouteController(); break;
                }
                string error = connect.Reset();
                if (!error.IsNullEmpty()) {
                    if (!msg.IsNull()) msg("重启" + name + "失败:" + error);
                    return ChangeIP(netType, msg, done, index + 1);
                } else {
                    if (!msg.IsNull()) msg("已重启" + name + ",正在检测是否联网......");
                    bool isTrue = NetHelper.CheckNetwork(msg);
                    if (!isTrue) return ChangeIP(netType, msg, done, index + 1);

                    if (!msg.IsNull()) msg("已联接网络,正在获取IP......");
                    string ip = IPHelper.GetIpFast();

                    if (!msg.IsNull()) msg("获取到IP:" + ip);
                    if (IpHistoryHelper.IsExistByID(ip)) {
                        if (!msg.IsNull()) msg("检测到IP:" + ip + "最近已使用!");
                        return ChangeIP(netType, msg, done, index + 1);
                    } else {
                        IpHistoryHelper.Insert(new IpHistory() { IP = ip, CreateTime = DateTime.Now.ToDateTime().ToDateTime() });
                    };
                    return ip;
                }
            }
        }
예제 #2
0
        private void mnuEdit_Click(object sender, EventArgs e)
        {
            if (this.cboTemplate.SelectedIndex < 0) {
                MessageBox.Show("发送主题为空,保存失败", "系统提示");
                return;
            }
            SendSetting info = new SendSetting();
            info.TemplateID = (long)this.cboTemplate.SelectedValue;
            info.ConnectType = rdoRoute.Checked ? 0 : rdoModel.Checked ? 1 : 2;
            info.IPInterval = txtIPInterval.Text == "0" ? 0 : txtIPInterval.Text.ToInt(1000);
            info.SendInterval = txtSendInterval.Text.ToInt(10);
            info.SmtpInterval = txtSmtpInterval.Text == "0" ? 0 : txtSmtpInterval.Text.ToInt(20);
            info.Status = this.cboStatus.SelectedValue.ToString().ToInt(0);
            info.MaxRetryCount = txtMaxRetryCount.Text.ToInt(10);
            info.SendRetryCount = txtSendRetryCount.Text.ToInt(10);
            info.DeleteInterval = txtDeleteInterval.Text.ToInt(60);

            if (sendSetting.IsNull() || sendSetting.SettingID.IsNull()) {
                info.SettingID = 1;
                SendSettingHelper.Insert(info);
            } else {
                info.SettingID = sendSetting.SettingID;
                SendSettingHelper.Update(info);
            }
            SendSettingHelper.ClearCacheAll();

            if (info.Status == 0 && (int)cboStatus.Tag != info.Status) {
                new SQL()
                    .Update(EmailList._)
                    .Set("LastSendStatus", 0)
                    .Set("LastSendError", "")
                    .Set("LastSendTime", null, true)
                    .Set("LastSendSmtp", "")
                    .Set("SendCount", 0)
                    .ToExec();

                new SQL().Update(SmtpList._)
                    .Set("Sends", 0)
                    .Set("SendFails", 0)
                    .ToExec();

                new SQL().Delete(IpHistory._)
                    .ToExec();
            }

            MessageBox.Show("保存数据成功!", " 系统提示");
            this.Close();
        }
예제 #3
0
        private void frmSendSetting_Activated(object sender, EventArgs e)
        {
            frmMain.Instance.ShowStatusText("正在数据....");
            HtmlTemplateHelper.ClearCacheAll();
            cboTemplate.DataSource = null; ;
            cboTemplate.ValueMember = "TemplateID";
            cboTemplate.DisplayMember = "Subject";
            cboTemplate.DataSource = HtmlTemplateHelper.SelectListByAll().Where(p => p.Status == 0).OrderByDescending(p => p.TemplateID).Select(p => new { p.TemplateID, p.Subject }).ToDataTable();

            DataTable dt = new DataTable()
                .AddColumn<int>("id")
                .AddColumn<string>("name")
                .AddRow(0, "等待发送")
                .AddRow(1, "正在发送")
                .AddRow(2, "已发送完成");

            this.cboStatus.DataSource = dt;
            this.cboStatus.DisplayMember = "name";
            this.cboStatus.ValueMember = "id";
            this.cboStatus.SelectedIndex = 0;

            sendSetting = SendSettingHelper.SelectByID(1);
            if (sendSetting.IsNull() || sendSetting.SettingID.IsNull()) return;

            cboTemplate.SelectedValue = sendSetting.TemplateID;
            if (sendSetting.ConnectType == 0) rdoRoute.Checked = true;
            if (sendSetting.ConnectType == 1) rdoModel.Checked = true;
            if (sendSetting.ConnectType == 2) rdoTY.Checked = true;
            txtIPInterval.Text = sendSetting.IPInterval.ToString();
            txtSendInterval.Text = sendSetting.SendInterval.ToString();
            txtSmtpInterval.Text = sendSetting.SmtpInterval.ToString();
            txtMaxRetryCount.Text = sendSetting.MaxRetryCount.ToString();
            txtDeleteInterval.Text = sendSetting.DeleteInterval.ToString();
            txtSendRetryCount.Text = sendSetting.SendRetryCount.ToString();
            cboStatus.SelectedValue = sendSetting.Status;
            cboStatus.Tag = sendSetting.Status.Value;
            frmMain.Instance.ShowStatusText("数据加载完成!");
        }
예제 #4
0
 /// <summary>
 /// ������Ӽ�¼
 /// </summary>
 /// <param name="sendSetting">����ʵ����</param>
 /// <param name="delCache">��ӳɹ��������CACHE key��֧������</param>
 /// <param name="dbkey">�������ݿ����ӳ��е�����key��Ϊ��ʱʹ��ConnString����</param>
 /// <returns>����Ƿ�ɹ�</returns>
 public static bool Insert(SendSetting sendSetting, string dbkey = "", string[] delCache = null)
 {
     int obj = new SQL().Database(dbkey).Insert(SendSetting._)
         .ValueP(SendSetting._SettingID, sendSetting.SettingID)
         .ValueP(SendSetting._TemplateID, sendSetting.TemplateID)
         .ValueP(SendSetting._ConnectType, sendSetting.ConnectType)
         .ValueP(SendSetting._SendInterval, sendSetting.SendInterval)
         .ValueP(SendSetting._IPInterval, sendSetting.IPInterval)
         .ValueP(SendSetting._SmtpInterval, sendSetting.SmtpInterval)
         .ValueP(SendSetting._DeleteInterval, sendSetting.DeleteInterval)
         .ValueP(SendSetting._MaxRetryCount, sendSetting.MaxRetryCount)
         .ValueP(SendSetting._SendRetryCount, sendSetting.SendRetryCount)
         .ValueP(SendSetting._Status, sendSetting.Status)
         .ToExec();
     if (delCache.IsNull()) return obj == 1;
     Cache2.Remove("TH.Mailer.SendSettingCache_", delCache);
     return obj == 1;
 }
예제 #5
0
 /// <summary>
 /// �����޸Ķ�����¼
 /// </summary>
 /// <param name="settingIDList">���ñ���б���á�,���ŷָ�</param>
 /// <param name="sendSetting">����ʵ����</param>
 /// <returns>�޸��Ƿ�ɹ�</returns>
 public static bool UpdateByIDList(IEnumerable<int> settingIDList,  SendSetting sendSetting, string dbkey)
 {
     return UpdateByIDList(settingIDList,  sendSetting, dbkey, null, null);
 }
예제 #6
0
 /// <summary>
 /// �����޸Ķ�����¼
 /// </summary>
 /// <param name="settingIDList">���ñ���б���á�,���ŷָ�</param>
 /// <param name="sendSetting">����ʵ����</param>
 /// <param name="where">�޸�ʱ����������ͳһ��ǰ��Ҫ�����ӷ���and��or�ȵȣ�</param>
 /// <param name="delCache">�޸ijɹ��������CACHE key��֧������</param>
 /// <param name="dbkey">�������ݿ����ӳ��е�����key��Ϊ��ʱʹ��ConnString����</param>
 /// <returns>�޸��Ƿ�ɹ�</returns>
 public static bool UpdateByIDList(IEnumerable<int> settingIDList,  SendSetting sendSetting, string dbkey = "", Where where = null, string[] delCache = null)
 {
     int value = new SQL().Database(dbkey).Update(SendSetting._)
         .SetP(SendSetting._TemplateID, sendSetting.TemplateID)
         .SetP(SendSetting._ConnectType, sendSetting.ConnectType)
         .SetP(SendSetting._SendInterval, sendSetting.SendInterval)
         .SetP(SendSetting._IPInterval, sendSetting.IPInterval)
         .SetP(SendSetting._SmtpInterval, sendSetting.SmtpInterval)
         .SetP(SendSetting._DeleteInterval, sendSetting.DeleteInterval)
         .SetP(SendSetting._MaxRetryCount, sendSetting.MaxRetryCount)
         .SetP(SendSetting._SendRetryCount, sendSetting.SendRetryCount)
         .SetP(SendSetting._Status, sendSetting.Status)
         .Where(new Where()
             .And(SendSetting._SettingID, "(" + settingIDList .Join(",") + ")", Operator.In)
         ).Where(where).ToExec();
     if (value <= 0) return false;
     if (delCache.IsNull()) return true;
     Cache2.Remove("TH.Mailer.SendSettingCache_", delCache);
     return true;
 }
예제 #7
0
 /// <summary>
 /// �����޸ļ�¼
 /// </summary>
 /// <param name="sendSetting">����ʵ����</param>
 /// <returns>�޸��Ƿ�ɹ�</returns>
 public static bool Update(SendSetting sendSetting, string dbkey)
 {
     return Update(sendSetting, dbkey, null, null);
 }
예제 #8
0
 /// <summary>
 /// ������Ӽ�¼
 /// </summary>
 /// <param name="sendSetting">����ʵ����</param>
 /// <returns>����Ƿ�ɹ�</returns>
 public static bool Insert(SendSetting sendSetting, string dbkey)
 {
     return Insert(sendSetting, dbkey, null);
 }
예제 #9
0
        /// <summary>
        /// 开始群发邮件
        /// </summary>
        /// <param name="msg">通知消息</param>
        /// <param name="done">完成执行</param>
        public void Start(Action<string> msg = null, Pub.Class.Action done = null)
        {
            exit = false;
            uiMsg = msg; uiDone = done;
            thread = new Thread(() => {
                smtpList = SmtpListHelper.SelectListByAll();
                sendSetting = SendSettingHelper.SelectByID(1);
                templateList = HtmlTemplateHelper.SelectListByAll().Where(p => p.Status == 0).ToList();

                sendStart();
            });
            thread.IsBackground = true;
            thread.Start();
        }
예제 #10
0
 private void UpdateSendSettingStatus(int status)
 {
     SendSetting setting = new SendSetting();
     setting.SettingID = sendSetting.SettingID;
     setting.Status = status;
     SendSettingHelper.Update(setting);
 }
예제 #11
0
 /// <summary>
 /// 清理缓存
 /// </summary>
 private void clear()
 {
     SmtpListHelper.ClearCacheAll(); smtpList = null;
     EmailListHelper.ClearCacheAll(); emailList = null;
     SendSettingHelper.ClearCacheAll(); sendSetting = null;
     HtmlTemplateHelper.ClearCacheAll(); templateList = null;
     IpHistoryHelper.ClearCacheAll();
 }