/// <summary> /// 删除邮箱 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Menu_Delete_Click(object sender, EventArgs e) { var node = TreeView_Email.SelectedNode; if (node == null) { return; } var confirmResult = MessageBox.Show("是否 删除:" + node.Text, "提示", MessageBoxButtons.YesNo); if (confirmResult == DialogResult.Yes) { try { var email = (EmailManger)node.Tag; var deleteSql = new EmailManger() { Id = email.Id }.DeleteByIdSql; var result = Db.ExecuteNonQuery(deleteSql.Item1, deleteSql.Item2); if (result > 0) { LoadTree(); } else { Logger("删除失败!"); } } catch (Exception ex) { Logger("错误:" + ex.Message); } } }
/// <summary> /// 基础服务 /// </summary> /// <param name="emailManger"></param> /// <param name="mailType"></param> public BaseService(EmailManger emailManger, EnumTools.EailType mailType = EnumTools.EailType.POP3) { Ensure.IsNull(emailManger); EmailManger = emailManger; _mailType = mailType; var visitor = new HtmlPreviewVisitor(AttachmentPath); if (!Directory.Exists(AttachmentPath)) { Directory.CreateDirectory(AttachmentPath); } }
/// <summary> /// 添加按钮 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btn_addEamil_Click(object sender, EventArgs e) { var email = txt_email.Text.Trim(); var password = txt_password.Text.Trim(); var sendMax = int.Parse(txt_sendMax.Text.Trim()); if (!IsEmail(email)) { MessageBox.Show("邮箱格式不正确!", "错误提示"); return; } if (string.IsNullOrEmpty(email)) { MessageBox.Show("邮箱不能为空!", "错误提示"); return; } if (string.IsNullOrEmpty(password)) { MessageBox.Show("密码不能为空!", "错误提示"); return; } if (sendMax <= 0) { MessageBox.Show("最大发送条数不能小于等于0条!", "错误提示"); return; } if (!isedit) { var anysql = new EmailManger { Email = email }.AnySql; var any = Db.ExecuteScalar <int>(anysql.Item1, anysql.Item2); if (any > 0) { MessageBox.Show("邮件已存在!", "错误提示"); return; } var insetSql = new EmailManger { Email = email, PassWord = password, SendMax = sendMax, SendNumber = 0 }.InsertSql; Db.ExecuteNonQuery(insetSql.Item1, insetSql.Item2); } else { var updatesql = new EmailManger { Email = email, PassWord = password }.UpdateByEmailSql; Db.ExecuteNonQuery(updatesql.Item1, updatesql.Item2); } this.Close(); }
public AddEmail(string email) : this() { isedit = true; var sql = new EmailManger { Email = email }.GetByEmailSql; var model = Db.ExecuteFirstOrDefault <EmailManger>(sql.Item1, sql.Item2); txt_email.Text = model.Email; txt_password.Text = model.PassWord; txt_email.BackColor = System.Drawing.SystemColors.Control; txt_password.Focus(); txt_email.KeyPress += txt_logger_KeyPress; }
/// <summary> /// 获取服务 /// </summary> /// <param name="emailManger"></param> /// <param name="mailType"></param> /// <returns></returns> public static IEmailService Service(EmailManger emailManger, EnumTools.EailType mailType) { switch (mailType) { case EnumTools.EailType.POP3: break; case EnumTools.EailType.Smtp: case EnumTools.EailType.Imap: return(new ImapService(emailManger, mailType)); default: break; } throw new System.Exception("暂未实现!"); }
/// <summary> /// 系统当前时间 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private async void dateNow_timer_Tick(object sender, EventArgs e) { var now = DateTime.Now; lbl_now.Text = now.ToString(); var nowEmail = lbl_email.Text; var oldNumber = int.Parse(lbl_Count.Text); //更新树形结构更新时间 foreach (TreeNode item in TreeView_Email.Nodes) { item.ForeColor = Color.Black; if (item.Tag == null) { continue; } var model = (EmailManger)item.Tag; if (model.SynchronizationTime == null || model.SynchronizationTime?.AddSeconds(UpdateSeconds) < now) { await AsyncEmail(model, 10).ConfigureAwait(false); } if (model.SendDateTime != null) { var upvalue = model.SendDateTime.Value; var thisdays = new DateTime(now.Year, now.Month, now.Day); var updateDays = new DateTime(upvalue.Year, upvalue.Month, upvalue.Day); if (thisdays > updateDays) { var updateNumberSql = new EmailManger { Email = model.Email, SendTime = now.ToString("yyyy-MM-dd HH:mm:ss") }.ResetSendNumber; Db.ExecuteNonQuery(updateNumberSql.Item1, updateNumberSql.Item2); } } } var thisEmailCountSql = new EmailListView { MainEmail = nowEmail }.Count; var count = Db.ExecuteScalar <int>(thisEmailCountSql.Item1, thisEmailCountSql.Item2); if (oldNumber != count) { await Marquee(true).ConfigureAwait(false); } }
/// <summary> /// loadTree /// </summary> void LoadTree() { TreeView_Email.Nodes.Clear(); treeView_EmailSendNumber.Nodes.Clear(); var sql = new EmailManger().SelectSql; var all = Db.ExecuteQuery <EmailManger>(sql); foreach (var item in all) { var node1 = new TreeNode { Text = item.Email, Tag = item }; var node2 = new TreeNode { Text = "To:" + item.SendNumber + " Total: " + item.SendMax + " " + item.Email, Tag = item }; treeView_EmailSendNumber.Nodes.Add(node2); TreeView_Email.Nodes.Add(node1); } }
/// <summary> /// 同步邮件 /// </summary> /// <param name="model"></param> /// <param name="number"></param> async Task AsyncEmail(EmailManger model, int?number) { Logger($"邮箱:{model.Email} 正在获取邮件!"); await UpdateEmailSynchronization(model.Email).ConfigureAwait(false); var service = EmailFactory.Service(model, EnumTools.EailType.Imap); try { await service.mailAsync(async (message, index, count) => { await DbValidation(message).ConfigureAwait(false); }, number); } catch (Exception ex) { Logger($"邮箱:{model.Email} 获取错误:" + ex.Message); } Logger($"邮箱:{model.Email} 获取完成!"); }
/// <summary> /// 立即同步邮箱更新时间 /// </summary> /// <param name="eamil"></param> /// <returns></returns> async Task UpdateEmailSynchronization(string email) { await Task.Run(() => { var uptime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); //更新树形结构更新时间 foreach (TreeNode item in TreeView_Email.Nodes) { if (item.Text == email) { var model = (EmailManger)item.Tag; model.Synchronization = uptime; break; } } var updateSql = new EmailManger { Email = email, Synchronization = uptime }.UpdateBySynchronizationSql; Db.ExecuteNonQuery(updateSql.Item1, updateSql.Item2); }).ConfigureAwait(false); }
/// <summary> /// 初始化服务 /// </summary> public ImapService(EmailManger emailManger, EnumTools.EailType mailType = EnumTools.EailType.POP3) : base(emailManger, mailType) { }
/// <summary> /// 发送邮件的所有邮箱 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private async void btn_Send_Click(object sender, EventArgs e) { StatusControl(false); var maxSendNumber = 0M; var sendAllEmail = new List <TreeNode>(); var sendUserAll = new List <string>(); foreach (var item in pan_UserEmail.Controls) { if (item is Button) { sendUserAll.Add((item as Button).Text); } } foreach (TreeNode item in TreeView_Email.Nodes) { var model = (EmailManger)item.Tag; if (model.SendMax > model.SendNumber) { maxSendNumber += model.SendMax - model.SendNumber; sendAllEmail.Add(item); } } if (sendAllEmail.Count <= 0) { MessageBox.Show("邮件次数都已经发送完了无法发送!"); return; } if (sendUserAll.Count <= 0) { MessageBox.Show("收件人不存在!"); return; } if (maxSendNumber < sendUserAll.Count) { var confirmResult = MessageBox.Show($"收件人:{sendUserAll.Count}个,邮件可发送:{maxSendNumber},是否还要继续发送。", "提示", MessageBoxButtons.YesNo); if (confirmResult == DialogResult.Yes) { goto send; } } send: SendLogger($"收件人:{sendUserAll.Count} 条!准备发送。"); TreeNode thisNode = null; foreach (var item in sendUserAll) { if (thisNode == null) { thisNode = sendAllEmail.FirstOrDefault(s => (s.Tag as EmailManger).SendMax > (s.Tag as EmailManger).SendNumber); if (thisNode == null) { SendLogger("没有可以发送的邮箱了!"); goto enabled; } } var model = (EmailManger)thisNode.Tag; model.SendNumber += 1; var html = string.Empty; this.CallAsync(() => { html = htmlEditor1.GetHtml(); }); var result = string.Empty; var now = DateTime.Now.ToString("yyyy-MM-dd"); try { result = await SendEmail(model, item, txt_sendTitle.Text, html).ConfigureAwait(false); var updateNumberSql = new EmailManger { Email = model.Email, SendTime = now }.UpdateSendNumber; Db.ExecuteNonQuery(updateNumberSql.Item1, updateNumberSql.Item2); } catch (Exception ex) { result += ex.Message; } SendLogger($"发送邮箱:{model.Email} 当前第:{model.SendNumber} 发送给:{item} 错误:{result}"); foreach (TreeNode itemcc in treeView_EmailSendNumber.Nodes) { var sss = (EmailManger)itemcc.Tag; if (sss.Email == model.Email) { var text = $"To:" + model.SendNumber + " Total: " + model.SendMax + " " + model.Email; this.CallAsync(() => { itemcc.Text = text; itemcc.Tag = model; }); } } } enabled: StatusControl(true); }
/// <summary> /// 发送邮件 /// </summary> /// <param name="model">主邮箱</param> /// <param name="toEmail">接受邮箱</param> /// <param name="title">标题</param> /// <param name="body">内容</param> /// <returns></returns> async Task <string> SendEmail(EmailManger model, string toEmail, string title, string body) { var service = EmailFactory.Service(model, EnumTools.EailType.Smtp); return(await service.SendMailAsync(toEmail, title, body).ConfigureAwait(false)); }