private void mnuDelete_Click(object sender, EventArgs e) { if (dataGridView.Rows.Count == 0 || lastID < 1) { return; } SendSetting setting = SendSettingHelper.SelectByID(1); if (setting.IsNull() || setting.TemplateID.IsNull()) { return; } if (setting.TemplateID == lastID && !this.checkBoxStatus.Checked) { MessageBox.Show("发送邮件设置使用了此模板,该模板不能删除", "系统提示"); return; } if (MessageBox.Show("是否删除此邮件模板?", " 系统提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.OK) { HtmlTemplateHelper.DeleteByID(lastID); HtmlTemplateHelper.ClearCacheAll(); dataGridView.Rows.RemoveAt(currentIndex); getRowData(); } tabControl1.SelectedTab = tabControl1.TabPages[0]; }
/// <summary> /// 设置修改记录 /// </summary> /// <param name="sendSetting">设置实体类</param> /// <param name="where">修改时附加条件,统一的前面要加链接符(and、or等等)</param> /// <param name="delCache">修改成功后清理的CACHE key,支持正则</param> /// <param name="dbkey">存在数据库连接池中的连接key,为空时使用ConnString连接</param> /// <returns>修改是否成功</returns> public static bool Update(SendSetting sendSetting, string dbkey = "", Where where = null, string[] delCache = null) { if (sendSetting.SettingID.IsNull()) { return(false); } 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() .AndP(SendSetting._SettingID, sendSetting.SettingID, Operator.Equal, true) ).Where(where).ToExec(); if (value <= 0) { return(false); } if (delCache.IsNull()) { return(true); } Cache2.Remove("TH.Mailer.SendSettingCache_", delCache); return(true); }
private void settingToolStripMenuItem_Click(object sender, EventArgs e) { // if (null != treeViewFavorite.SelectedNode) { if (1 == treeViewFavorite.SelectedNode.Level) { SendSetting st = (SendSetting)treeViewFavorite.SelectedNode.Tag; if (null != st) { MessageBox.Show(st.TimerInterval.ToString()); } else { MessageBox.Show("st is null"); } } else { MessageBox.Show(treeViewFavorite.SelectedNode.Level.ToString()); } } else { MessageBox.Show("null"); } }
private void mnuEdit_Click(object sender, EventArgs e) { SendSetting setting = SendSettingHelper.SelectByID(1); if (setting.IsNull() || setting.TemplateID.IsNull()) { return; } if (setting.TemplateID == lastID && !this.checkBoxStatus.Checked) { MessageBox.Show("发送邮件设置使用了此模板,该模板不能不可用", "系统提示"); return; } tabControl1.SelectedTab = tabControl1.TabPages[0]; if (currentIndex < 0 || lastID < 1) { return; } HtmlTemplate info = new HtmlTemplate(); info.Subject = this.txtSubject.Text; info.Body = this.txtBody.Text; info.IsHTML = this.checkBoxIsHTML.Checked ? true : false; info.Status = this.checkBoxStatus.Checked ? 0 : 1; info.ShowName = this.txtShowName.Text; info.TemplateID = lastID; HtmlTemplateHelper.Update(info); dataGridView.Rows[currentIndex].Cells[1].Value = info.Subject; HtmlTemplateHelper.ClearCacheAll(); MessageBox.Show("保存成功", "系统提示"); }
/// <summary> /// 清理缓存 /// </summary> private void clear() { SmtpListHelper.ClearCacheAll(); smtpList = null; EmailListHelper.ClearCacheAll(); emailList = null; SendSettingHelper.ClearCacheAll(); sendSetting = null; HtmlTemplateHelper.ClearCacheAll(); templateList = null; IpHistoryHelper.ClearCacheAll(); }
private void UpdateSendSettingStatus(int status) { SendSetting setting = new SendSetting(); setting.SettingID = sendSetting.SettingID; setting.Status = status; SendSettingHelper.Update(setting); }
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(); }
private void tsbtShuffle_Click(object sender, EventArgs e) { if (null != treeViewFavorite.SelectedNode && treeViewFavorite.SelectedNode.ImageIndex == (Int32)NODE_TYPE.NODE_FAVORITE_TYPE) { SendSetting st = (SendSetting)treeViewFavorite.SelectedNode.Tag; if (null != st) { st.ShuffleEnabled = tsbtShuffle.Checked; } } }
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("数据加载完成!"); }
/// <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(); }
private void UpdateCmdGroupNodeTimerState() { if (treeViewFavorite.SelectedNode.ImageIndex == (Int32)NODE_TYPE.NODE_FAVORITE_TYPE) { SendSetting st = (SendSetting)treeViewFavorite.SelectedNode.Tag; if (null != st) { tstbTimerInterval.Text = st.TimerInterval.ToString(); tstbTimerInterval.Enabled = !st.GetTimerStartState(); tsbtTimer.Checked = st.GetTimerStartState(); tsbtLoop.Checked = st.LoopEnabled; tsbtShuffle.Checked = st.ShuffleEnabled; } } }
private TreeNode CreateCmdGroupTreeNode(TreeNode pNode, int location) { TreeNode group = null; if (null != pNode) { group = new TreeNode("Group"); SendSetting st = new SendSetting(this, group); group.ToolTipText = "Right Click To Send Selections"; group.Tag = st; group.ImageIndex = (Int32)NODE_TYPE.NODE_FAVORITE_TYPE; group.SelectedImageIndex = group.ImageIndex; pNode.Nodes.Insert(location, group); } return(group); }
private void tsbtTimer_Click(object sender, EventArgs e) { tstbTimerInterval.Enabled = !tsbtTimer.Checked; int time = -1; if (null != treeViewFavorite.SelectedNode && treeViewFavorite.SelectedNode.ImageIndex == (Int32)NODE_TYPE.NODE_FAVORITE_TYPE) { SendSetting st = (SendSetting)treeViewFavorite.SelectedNode.Tag; if (null != st) { if (int.TryParse(tstbTimerInterval.Text, out time)) { st.TimerInterval = time; } if (tsbtTimer.Checked) { //st.StartTimer(); st.StartBGWorker(); } else { //st.StopTimer(); st.CancelBGWorker(); } } } if (null != treeViewFavorite.SelectedNode && 1 == treeViewFavorite.SelectedNode.Level) { SendSetting st = (SendSetting)treeViewFavorite.SelectedNode.Tag; if (null != st) { if (int.TryParse(tstbTimerInterval.Text, out time)) { st.TimerInterval = time; } } } }
public static void Config(bool exit = false) { WriteLog("config(c) 显示发送配置"); WriteLog("==============================================================================="); SendSetting sendSetting = SendSettingHelper.SelectByID(1); IList <HtmlTemplate> templateList = HtmlTemplateHelper.SelectListByAll(); WriteLog("邮件模版:{0}", templateList.Where(p => p.TemplateID == sendSetting.TemplateID).FirstOrDefault().IfNull(new HtmlTemplate()).Subject ?? "无"); WriteLog("网络连接类型:{0}", NetHelper.GetNetName(sendSetting.ConnectType.Value)); WriteLog("发送邮件时间间隔(毫秒):{0}", sendSetting.SendInterval); WriteLog("发送多少封邮件后更换IP:{0}", sendSetting.IPInterval == 0 ? "0不更换IP" : sendSetting.IPInterval.ToString()); WriteLog("发送多少封邮件后更换SMTP:{0}", sendSetting.SmtpInterval == 0 ? "0不更换SMTP" : sendSetting.SmtpInterval.ToString()); WriteLog("清理多少分钟之前的历史IP:{0}", sendSetting.DeleteInterval); WriteLog("检测网络连接重试次数:{0}", sendSetting.MaxRetryCount); WriteLog("发送邮件失败重试次数:{0}", sendSetting.SendRetryCount); WriteLog("发送状态:{0}", sendSetting.Status == 0 ? "等待发送" : sendSetting.Status == 1 ? "正在发送" : "已发送完成"); WriteLog("-------------------------------------------------------------------------------"); WriteLog("可用邮箱数量:{0}".FormatWith(new SQL().From(EmailList._).Count(EmailList._EmailAddress).ToScalar().ToString())); WriteLog("可用SMTP数量:{0}".FormatWith(new SQL().From(SmtpList._).Count(SmtpList._SmtpServer).ToScalar().ToString())); WriteLog("END"); Input(exit); }
/// <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); }
private void tsbtReset_Click(object sender, EventArgs e) { // foreach (TreeNode root in treeViewFavorite.Nodes) { foreach (TreeNode node in root.Nodes) { if (node.ImageIndex == (Int32)NODE_TYPE.NODE_FAVORITE_TYPE) { SendSetting st = (SendSetting)node.Tag; if (null != st) { st.LoopEnabled = false; st.ShuffleEnabled = false; st.StartEnabled = false; } } } } tsbtLoop.Checked = false; tsbtShuffle.Checked = false; tsbtTimer.Checked = false; tsbtTimer.Enabled = true; }
private static async Task <ActionResponse> Send(Kooboo.Mail.Smtp.SmtpClient client, string mailFrom, string rcptTo, string content, SendSetting setting) { var reply = await client.CheckServiceReady(); if (!reply.Ok) { client.Release(); return(new ActionResponse() { Success = false, ShouldRetry = true, Message = reply.Reply }); } reply = await client.Helo(setting.HostName); if (!reply.Ok) { client.Release(); return(new ActionResponse() { Success = false, ShouldRetry = true, Message = reply.Reply }); } reply = await client.MailFrom(mailFrom); if (!reply.Ok) { client.Release(); return(new ActionResponse() { Success = false, ShouldRetry = false, Message = reply.Reply }); } reply = await client.RcptTo(rcptTo); if (!reply.Ok) { client.Release(); return(new ActionResponse() { Success = false, ShouldRetry = false, Message = reply.Reply }); } reply = await client.Data(content); if (!reply.Ok) { client.Release(); return(new ActionResponse() { Success = false, ShouldRetry = false, Message = reply.Reply }); } await client.Quit(); return(new ActionResponse() { Success = true }); }
/// <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); } } }
public static async Task <SendSetting> GetSendSetting(Data.Models.ServerSetting serverSetting, bool IsOnlineServer, string MailFrom, string RcptTo) { SendSetting setting = new SendSetting(); if (IsOnlineServer) { if (HasDefineMta) { setting.UseKooboo = true; setting.KoobooServerIp = Mta; setting.Port = MtaPort; setting.HostName = System.Net.Dns.GetHostName(); setting.LocalIp = System.Net.IPAddress.Any; setting.OkToSend = true; } else if (!string.IsNullOrEmpty(serverSetting.SmtpServerIP)) { setting.UseKooboo = true; setting.KoobooServerIp = serverSetting.SmtpServerIP; setting.Port = serverSetting.SmtpPort; if (setting.Port <= 0) { setting.Port = 587; } setting.HostName = System.Net.Dns.GetHostName(); setting.LocalIp = System.Net.IPAddress.Any; setting.OkToSend = true; } else { setting.OkToSend = false; setting.ErrorMessage = "Email Sending is prevented"; } } else { var mxs = await Kooboo.Mail.Utility.SmtpUtility.GetMxRecords(RcptTo); if (mxs == null || mxs.Count() == 0) { setting.OkToSend = false; setting.ErrorMessage = "Mx records not found"; } else { setting.OkToSend = true; setting.Mxs = mxs; if (serverSetting.ReverseDns != null && serverSetting.ReverseDns.Count() > 0) { var dns = serverSetting.ReverseDns[0]; //TODO: random it. setting.LocalIp = System.Net.IPAddress.Parse(dns.IP); setting.HostName = dns.HostName; } else { setting.LocalIp = System.Net.IPAddress.Any; setting.HostName = System.Net.Dns.GetHostName(); } } } return(setting); }
/// <summary> /// 设置添加记录 /// </summary> /// <param name="sendSetting">设置实体类</param> /// <returns>添加是否成功</returns> public static bool Insert(SendSetting sendSetting, string dbkey) { return(Insert(sendSetting, dbkey, null)); }
/// <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)); }
/// <summary> /// 设置修改记录 /// </summary> /// <param name="sendSetting">设置实体类</param> /// <returns>修改是否成功</returns> public static bool Update(SendSetting sendSetting, string dbkey) { return(Update(sendSetting, dbkey, null, null)); }