using BLL;
using Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Mail;
namespace FineUIPro.Web.common
{
    public class MailHelper
    {
        

        /// <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.EnableSsl = false;
            //client.UseDefaultCredentials = true;
            ////验证(Credentials 凭证)
            //client.Credentials = new System.Net.NetworkCredential(mailFrom, ps.EmailPass);

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

            System.Web.Mail.MailMessage mail = new System.Web.Mail.MailMessage();
            try
            {
                mail.From = ps.EmailYx;
                mail.To = string.Join(",", mailTo);
                mail.Subject = mailSubject;
                mail.BodyFormat = System.Web.Mail.MailFormat.Html;
                mail.Body =mailBody;
                if(mailCC!=null  &&mailCC.Length>0)
                    mail.Cc = string.Join(",", mailCC);

                mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", "1");
                mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", ps.EmailYx);
                mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", ps.EmailPass);
                mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserverport",ps.EmailDk);
                mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpusessl", "true");
                System.Web.Mail.SmtpMail.SmtpServer = ps.EmailFwq;
                System.Web.Mail.SmtpMail.Send(mail);
                BLL.ErrLogInfo.WriteLog("开始发送邮件");
                //发送邮件
                //client.Send(email);
                BLL.ErrLogInfo.WriteLog("发送中...");
                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)
            {
                BLL.ErrLogInfo.WriteLog(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.ErrorMsg = ex.Message;
                            newSendEmail.CreateName = "sys";
                            BLL.Email_Send.Email_SendLogService.AddEmail_SendLog(newSendEmail);
                        }
                    }
                }
                resultMessage = ex.Message;                
                return false;
            }
            finally
            {
                //及时释放占用的资源  
            }
        }
        

        public static Email_Pop getEmailPop()
        {
            var pp = Funs.DB.Email_Pop.FirstOrDefault();

            return pp;


        }

    }
}