using Model;
using System;
using System.Collections.Generic;
using System.Net.Mail;
namespace FineUIPro.Web.common
{
    public class MailHelper
    {
        #region 从web.config中取得发送邮件参数        

        ////SMTP服务器
        //public static string MailSmtpServer
        //{
        //    get { return System.Configuration.ConfigurationManager.AppSettings["mailSmtpServer"]; }
        //}

        ////系统发件地址
        //public static string MailServerFrom
        //{
        //    get
        //    {

        //        if (getEmailPop(ID))
        //        {

        //        }
        //        else
        //        {
        //            return System.Configuration.ConfigurationManager.AppSettings["MailServerFrom"];
        //        }
        //    }
        //}

        ////系统发件密码
        //public static string MailServerpassword
        //{
        //    get { return System.Configuration.ConfigurationManager.AppSettings["MailServerpassword"]; }
        //}

        //系统发件人名称
        //public static string MailServeruserName
        //{
        //    get { return System.Configuration.ConfigurationManager.AppSettings["MailServeruserName"]; }
        //}
        #endregion 

        /// <summary>
        /// 私有构造方法,不允许创建实例
        /// </summary>
        private MailHelper()
        {
            // TODO: Add constructor logic here
        }

        /// <summary>
        /// SendNetMail(须配置SMTP服务器地址)(多个收件人、抄送人、附件其参数用";"隔开,最后一个不能有";")
        /// </summary>
        /// <param name="mailFrom">发件人</param>
        /// <param name="mailTo">收件人(多个收件人用";"隔开,最后一个不能有";")</param>
        /// <param name="mailSubject">主题</param>
        /// <param name="mailBody">内容</param>
        /// <param name="mailAttch">附件(多个附件用";"隔开,最后一个不能有";")</param>
        /// <param name="mailCode">密码(对加密过的)</param>
        /// <param name="mailPriority">优先级</param>
        /// <param name="mailCC">抄送(多个抄送人用";"隔开,最后一个不能有";")</param>
        /// <param name="resultMessage">输出信息</param>
        public static bool SendNetMail(Email_Pop ps, string mailFrom, string[] mailTo, string mailSubject, string mailBody, string mailAttch, string mailCode, string mailPriority, string[] mailCC, out string resultMessage)
        {
            //初始化输出参数
            resultMessage = "";

            //发件人和收件人不为空
            if (string.IsNullOrEmpty(ps.EmailYx) || mailTo == null)
            {
                resultMessage = "Please Fill Email Addresser Or Addressee . ";
                return false;
            }
            if (!string.IsNullOrEmpty(ps.EmailYx))
            {
                mailFrom = ps.EmailYx;
            }

            MailMessage email = new MailMessage();
            //MailAddress emailFrom = new MailAddress(mailFrom);

            //发件人          
            email.From = new MailAddress(mailFrom, ps.EmailYx);//发件人地址

            //收件人 
            if (mailTo != null && mailTo.Length > 0)
            {
                foreach (string send in mailTo)
                {
                    if (!String.IsNullOrEmpty(send))
                    {
                        email.To.Add(send);
                    }                    
                }
            }

            //加抄送
            if (mailCC != null && mailCC.Length > 0)
            {

                foreach (string cc in mailCC)
                {
                    if (!String.IsNullOrEmpty(cc))
                    {
                        email.CC.Add(cc);
                    }                   
                }
            }

            //主题
            email.Subject = mailSubject;
            //内容
            email.Body = mailBody;
            //附件
            if (!string.IsNullOrEmpty(mailAttch))
            {
                string[] attachments = mailAttch.Split(';');
                foreach (string file in attachments)
                {
                    System.Net.Mail.Attachment attach = new System.Net.Mail.Attachment(file, System.Net.Mime.MediaTypeNames.Application.Octet);
                    //为附件添加发送时间
                    System.Net.Mime.ContentDisposition disposition = attach.ContentDisposition;
                    disposition.CreationDate = System.IO.File.GetCreationTime(file);
                    disposition.ModificationDate = System.IO.File.GetLastWriteTime(file);
                    disposition.ReadDate = System.IO.File.GetLastAccessTime(file);
                    //添加附件
                    email.Attachments.Add(attach);
                }
            }
            //优先级
            email.Priority = (mailPriority == "High") ? System.Net.Mail.MailPriority.High : System.Net.Mail.MailPriority.Normal;
            //内容编码、格式
            email.BodyEncoding = System.Text.Encoding.UTF8;
            email.IsBodyHtml = true;
            //SMTP服务器
            System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient(ps.EmailFwq);

            client.UseDefaultCredentials = true;
            //验证(Credentials 凭证)
            client.Credentials = new System.Net.NetworkCredential(mailFrom, ps.EmailPass);

            //处理待发的电子邮件的方法 (Delivery 发送,传输)
            client.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;


            try
            {
                //发送邮件
                client.Send(email);
                if (mailTo != null && mailTo.Length > 0)
                {
                    foreach (string send in mailTo)
                    {
                        if (!String.IsNullOrEmpty(send))
                        {
                            Email_SendLog newSendEmail = new Email_SendLog();
                            newSendEmail.EmailId = Guid.NewGuid().ToString();
                            newSendEmail.EmailTile = mailSubject;
                            newSendEmail.EmailContent = mailBody;
                            newSendEmail.EmailURL = send;
                            newSendEmail.EmailName = send;
                            newSendEmail.EmailStatus = "发送成功";
                            newSendEmail.CreateTime = DateTime.Now;
                            newSendEmail.CreateName = "sys";
                            BLL.Email_Send.Email_SendLogService.AddEmail_SendLog(newSendEmail);
                        }
                    }
                }
                return true;
            }
            catch (Exception ex)
            {
                if (mailTo != null && mailTo.Length > 0)
                {
                    List<Email_SendLog> ss = new List<Email_SendLog>();
                    foreach (string send in mailTo)
                    {
                        if (!String.IsNullOrEmpty(send))
                        {
                            Email_SendLog newSendEmail = new Email_SendLog();
                            newSendEmail.EmailId = Guid.NewGuid().ToString();
                            newSendEmail.EmailTile = mailSubject;
                            newSendEmail.EmailContent = mailBody;
                            newSendEmail.EmailURL = send;
                            newSendEmail.EmailName = send;
                            newSendEmail.EmailStatus = "发送失败";
                            newSendEmail.CreateTime = DateTime.Now;
                            newSendEmail.CreateName = "sys";
                            BLL.Email_Send.Email_SendLogService.AddEmail_SendLog(newSendEmail);
                        }
                    }
                }
                resultMessage = ex.Message;                
                return false;
            }
            finally
            {
                //及时释放占用的资源  
                email.Attachments.Clear();
                email.Attachments.Dispose();
            }
        }
        public static bool getDateNow()
        {
            bool f = false;

            string dataTime = DateTime.Now.ToString("dd");
            Sys_Set pops = new Sys_Set();
            pops = BLL.Sys_SetService.GetSetById(3);


            if (pops != null)
            {
                if (pops.SetValue.Equals(dataTime))
                {
                    f = true;
                }
            }
            return f;
        }

        public static Email_Pop getEmailPop(string EmailID)
        {
            Email_Pop pp = new Email_Pop();
            pp = BLL.Email_Send.Email_PopService.GetEmail_Pop(EmailID);

            return pp;
        }

    }
}