示例#1
0
        /// <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("暂未实现!");
        }
示例#6
0
        /// <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);
            }
        }
示例#7
0
        /// <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);
            }
        }
示例#8
0
        /// <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} 获取完成!");
        }
示例#9
0
 /// <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)
 {
 }
示例#11
0
        /// <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);
        }
示例#12
0
        /// <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));
        }