Exemplo n.º 1
0
        /// <summary>
        /// 发送邮件
        /// </summary>
        /// <param name="isAsync">是否异步发送</param>
        public void SendMail(bool isAsync = true)
        {
            try
            {
                MailHelper mail = new MailHelper(isAsync);
                mail.From = CommonSettings.EmailUserName;

                string sEmailTo = CommonSettings.EmailTo;

                if (sEmailTo.Contains(";"))
                {
                    string[] EmailToArray = sEmailTo.Split(';');
                    foreach (string item in EmailToArray)
                    {
                        mail.AddReceive(EmailAddrType.To, item, "");
                    }
                }
                else
                {
                    mail.AddReceive(EmailAddrType.To, CommonSettings.EmailTo, "");
                }
                if (string.IsNullOrWhiteSpace(Subject))
                {
                    Subject = "这是个标题";
                }
                mail.Subject = Subject;
                if (string.IsNullOrWhiteSpace(Body))
                {
                    Body = "这是邮件内容";
                }

                // Guid.NewGuid() 防止重复内容,被SMTP服务器拒绝接收邮件
                mail.Body       = Body + "_" + Guid.NewGuid();
                mail.IsBodyHtml = true;

                if (!mail.ExistsSmtpClient())
                {
                    SmtpClient client = new SmtpHelper(CommonSettings.EmailSMTP, CommonSettings.EmailPort, CommonSettings.EmailSSL, CommonSettings.EmailUserName, CommonSettings.EmailPassword).SmtpClient;
                    mail.AsycUserState    = "邮件[" + Subject + "]";
                    client.SendCompleted += (send, args) =>
                    {
                        AsyncCompletedEventArgs arg = args;

                        if (arg.Error == null)
                        {
                            // 需要注意的事使用 MailHelper 发送异步邮件,其UserState是 MailUserState 类型
                            LogHelper.Info("邮件日志:" + ((MailUserState)args.UserState).UserState.ToString() + "已发送完成.");
                        }
                        else
                        {
                            LogHelper.Error(String.Format("{0} 异常:{1}"
                                                          , ((MailUserState)args.UserState).UserState.ToString() + "发送失败."
                                                          , (arg.Error.InnerException == null ? arg.Error.Message : arg.Error.Message + arg.Error.InnerException.Message)));
                            // 标识异常已处理,否则若有异常,会抛出异常
                            ((MailUserState)args.UserState).IsErrorHandle = true;
                        }
                    };
                    mail.SetSmtpClient(client, true);
                }
                else
                {
                    mail.AsycUserState = "邮件[" + Subject + "]邮件已发送完成。";
                }
                mail.SendOneMail();
                mail.Reset();
            }
            catch (Exception ex)
            {
                LogHelper.Error("发送邮件错误", ex);
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// 同步发送邮件
        /// </summary>
        /// <param name="isSimple">是否只发送一条</param>
        /// <param name="autoReleaseSmtp">是否自动释放SmtpClient</param>
        /// <param name="isReuse">是否重用SmtpClient</param>
        private void SendMessage(MailHelper mail, bool isSimple, ArrayList list, Mail_Test.Model.maillist mailinfo, bool autoReleaseSmtp, bool isReuse)
        {
            mail.IsBodyHtml = true;

            string bcc = "";//密送

            if (mailinfo.mto.Length > 0)
            {
                mail.AddReceive(EmailAddrType.To, mailinfo.mto, mailinfo.toname);
            }
            if (mailinfo.mcc.Length > 0)
            {
                mail.AddReceive(EmailAddrType.CC, mailinfo.mcc, mailinfo.ccname);
            }

            if (bcc.Length > 0)
            {
                mail.AddReceive(EmailAddrType.Bcc, bcc, Config.GetAddressName(bcc));
            }

            mail.Subject = mailinfo.title;

            // Guid.NewGuid() 防止重复内容,被SMTP服务器拒绝接收邮件
            mail.Body            = mailinfo.mailcontent;
            mail.From            = mailinfo.mfrom;
            mail.FromDisplayName = mailinfo.fromname;

            if (!isReuse || !mail.ExistsSmtpClient())
            {
                mail.SetSmtpClient(
                    new SmtpHelper(Config.TestEmailType, false, Config.TestUserName, Config.TestPassword).SmtpClient
                    , autoReleaseSmtp
                    );
            }

            if (list != null && list.Count > 0)
            {
                foreach (string filePath in list)
                {
                    mail.AddAttachment(filePath);
                }
            }


            Dictionary <MailInfoType, string> dic = mail.CheckSendMail();

            if (dic.Count > 0 && MailInfoHelper.ExistsError(dic))
            {
                // 反馈“错误+提示”信息
                ViewBag.msg += MailInfoHelper.GetMailInfoStr(dic);
            }
            else
            {
                string msg = String.Empty;
                if (dic.Count > 0)
                {
                    // 反馈“提示”信息
                    ViewBag.msg = MailInfoHelper.GetMailInfoStr(dic);
                }

                try
                {
                    if (isSimple)
                    {
                        mail.SendOneMail();
                    }
                    else
                    {
                        // 发送
                        mail.SendBatchMail();
                    }
                }
                catch (Exception ex)
                {
                    // 反馈异常信息
                    ViewBag.msg += (ex.InnerException == null ? ex.Message : ex.Message + ex.InnerException.Message) + Environment.NewLine;
                }
                finally
                {
                    // 输出到界面
                    if (msg.Length > 0)
                    {
                        ViewBag.msg += Environment.NewLine;
                    }
                }
            }

            mail.Reset();
        }
Exemplo n.º 3
0
        /// <summary>
        /// 异步发送邮件
        /// </summary>
        /// <param name="isSimple">是否只发送一条</param>
        /// <param name="autoReleaseSmtp">是否自动释放SmtpClient</param>
        /// <param name="isReuse">是否重用SmtpClient</param>
        private void SendMessageAsync(MailHelper mail, bool isSimple, string shiyan, string msgCount, bool autoReleaseSmtp, bool isReuse)
        {
            LogHelper.Info(String.Format("{0}:{1}\"异步\"邮件开始。{2}{3}", shiyan, msgCount, watch.ElapsedMilliseconds, Environment.NewLine));

            if (!isReuse || !mail.ExistsSmtpClient())
            {
                SmtpClient client = new SmtpHelper(EmailConfig.TestEmailType, false, EmailConfig.TestUserName, EmailConfig.TestPassword).SmtpClient;
                mail.AsycUserState    = String.Format("{0}:{1}\"异步\"邮件", shiyan, msgCount);
                client.SendCompleted += (send, args) =>
                {
                    AsyncCompletedEventArgs arg = args;

                    if (arg.Error == null)
                    {
                        // 需要注意的事使用 MailHelper 发送异步邮件,其UserState是 MailUserState 类型
                        LogHelper.Info(((MailUserState)args.UserState).UserState.ToString() + "已发送完成." + watch.ElapsedMilliseconds + Environment.NewLine);
                    }
                    else
                    {
                        LogHelper.Info(String.Format("{0} 异常:{1}{2}{3}"
                                                     , ((MailUserState)args.UserState).UserState.ToString() + "发送失败."
                                                     , (arg.Error.InnerException == null ? arg.Error.Message : arg.Error.Message + arg.Error.InnerException.Message)
                                                     , watch.ElapsedMilliseconds, Environment.NewLine));
                        // 标识异常已处理,否则若有异常,会抛出异常
                        ((MailUserState)args.UserState).IsErrorHandle = true;
                    }
                };
                mail.SetSmtpClient(client, autoReleaseSmtp);
            }
            else
            {
                mail.AsycUserState = String.Format("{0}:{1}\"异步\"邮件已发送完成。", shiyan, msgCount);
            }

            mail.From            = EmailConfig.TestFromAddress;
            mail.FromDisplayName = EmailConfig.GetAddressName(EmailConfig.TestFromAddress);

            string to  = m_to;
            string cc  = m_cc;
            string bcc = m_bcc;

            if (to.Length > 0)
            {
                mail.AddReceive(EmailAddrType.To, to, EmailConfig.GetAddressName(to));
            }
            if (cc.Length > 0)
            {
                mail.AddReceive(EmailAddrType.CC, cc, EmailConfig.GetAddressName(cc));
            }
            if (bcc.Length > 0)
            {
                mail.AddReceive(EmailAddrType.Bcc, bcc, EmailConfig.GetAddressName(bcc));
            }

            mail.Subject = m_Subject;
            // Guid.NewGuid() 防止重复内容,被SMTP服务器拒绝接收邮件
            mail.Body       = m_Body + "<div style='display:none'>" + Guid.NewGuid() + "</div>";
            mail.IsBodyHtml = true;

            if (filePaths != null && filePaths.Count > 0)
            {
                foreach (string filePath in FilePaths)
                {
                    mail.AddAttachment(filePath);
                }
            }

            Dictionary <MailInfoType, string> dic = mail.CheckSendMail();

            if (dic.Count > 0 && MailInfoHelper.ExistsError(dic))
            {
                // 反馈“错误+提示”信息
                LogHelper.Info(MailInfoHelper.GetMailInfoStr(dic));
            }
            else
            {
                string msg = String.Empty;
                if (dic.Count > 0)
                {
                    // 反馈“提示”信息
                    msg = MailInfoHelper.GetMailInfoStr(dic);
                }

                try
                {
                    // 发送
                    if (isSimple)
                    {
                        mail.SendOneMail();
                    }
                    else
                    {
                        mail.SendBatchMail();
                    }
                }
                catch (Exception ex)
                {
                    // 反馈异常信息
                    LogHelper.Info(String.Format("{0}\"异步\"异常:({1}){2}{3}", msgCount, watch.ElapsedMilliseconds, ex.Message, Environment.NewLine));
                }
                finally
                {
                    // 输出到界面
                    if (msg.Length > 0)
                    {
                        LogHelper.Info(msg + Environment.NewLine);
                    }
                }
            }

            mail.Reset();
        }
Exemplo n.º 4
0
        /// <summary>
        /// 同步发送邮件
        /// </summary>
        /// <param name="isSimple">是否只发送一条</param>
        /// <param name="autoReleaseSmtp">是否自动释放SmtpClient</param>
        /// <param name="isReuse">是否重用SmtpClient</param>
        private void SendMessage(MailHelper mail, bool isSimple, string shiyan, string msgCount, bool autoReleaseSmtp, bool isReuse)
        {
            AppendReplyMsg(String.Format("{0}:{1}\"同步\"邮件开始。{2}{3}", shiyan, msgCount, watch.ElapsedMilliseconds, Environment.NewLine));

            if (!isReuse || !mail.ExistsSmtpClient())
            {
                mail.SetSmtpClient(
                    new SmtpHelper(Config.TestEmailType, false, Config.TestUserName, Config.TestPassword).SmtpClient
                    , autoReleaseSmtp
                    );
            }

            mail.From            = Config.TestFromAddress;
            mail.FromDisplayName = Config.GetAddressName(Config.TestFromAddress);

            string to  = m_to;
            string cc  = m_cc;
            string bcc = m_bcc;

            if (to.Length > 0)
            {
                mail.AddReceive(EmailAddrType.To, to, Config.GetAddressName(to));
            }
            if (cc.Length > 0)
            {
                mail.AddReceive(EmailAddrType.CC, cc, Config.GetAddressName(cc));
            }
            if (bcc.Length > 0)
            {
                mail.AddReceive(EmailAddrType.Bcc, bcc, Config.GetAddressName(bcc));
            }

            mail.Subject = m_Subject;
            // Guid.NewGuid() 防止重复内容,被SMTP服务器拒绝接收邮件
            mail.Body       = m_Body + Guid.NewGuid();
            mail.IsBodyHtml = true;

            if (filePaths != null && filePaths.Count > 0)
            {
                foreach (string filePath in FilePaths)
                {
                    mail.AddAttachment(filePath);
                }
            }

            Dictionary <MailInfoType, string> dic = mail.CheckSendMail();

            if (dic.Count > 0 && MailInfoHelper.ExistsError(dic))
            {
                // 反馈“错误+提示”信息
                AppendReplyMsg(MailInfoHelper.GetMailInfoStr(dic));
            }
            else
            {
                string msg = String.Empty;
                if (dic.Count > 0)
                {
                    // 反馈“提示”信息
                    msg = MailInfoHelper.GetMailInfoStr(dic);
                }

                try
                {
                    if (isSimple)
                    {
                        mail.SendOneMail();
                    }
                    else
                    {
                        // 发送
                        mail.SendBatchMail();
                    }
                    AppendReplyMsg(String.Format("{0}:{1}\"同步\"邮件已发送完成。{2}{3}", shiyan, msgCount, watch.ElapsedMilliseconds, Environment.NewLine));
                }
                catch (Exception ex)
                {
                    // 反馈异常信息
                    msg = msg + (ex.InnerException == null ? ex.Message : ex.Message + ex.InnerException.Message) + Environment.NewLine;
                }
                finally
                {
                    // 输出到界面
                    if (msg.Length > 0)
                    {
                        AppendReplyMsg(msg + Environment.NewLine);
                    }
                }
            }

            mail.Reset();
        }