public static async Task <List <SendDataMailAccount> > GetMailAccounts()
        {
            var sqlConStr = ConstantHelper.GetConnectionString();

            List <SendDataMailAccount> sendDataMailAccountList = new List <SendDataMailAccount>();

            try
            {
                using (SqlConnection connectionQueryData = new SqlConnection(sqlConStr))
                {
                    if (connectionQueryData.State == System.Data.ConnectionState.Closed)
                    {
                        connectionQueryData.Open();
                    }

                    #region Execute Command
                    var selectQuery = @"

SELECT [MAILACCOUNTID]
      ,[MAILACCOUNTTITLE]
      ,[MAILSERVERNAME]
      ,[MAILACCOUNTNAME]
      ,[MAILACCOUNTPASSWORD]
      ,[MAILPOP3PORT]
      ,[MAILSMTPPORT]
      ,[FROMMAILADDRESS]
  FROM [dbo].[PLG_SENDDATA_MAILACCOUNT]
WHERE ACTIVE = 1 AND ISDEFAULT = 1
";


                    using (SqlCommand command = new SqlCommand(selectQuery, connectionQueryData))
                    {
                        DataTable dataTable = new DataTable();

                        // create data adapter
                        SqlDataAdapter da = new SqlDataAdapter(command);
                        // this will query your database and return the result to your datatable
                        da.Fill(dataTable);

                        for (int i = 0; i < dataTable.Rows.Count; i++)
                        {
                            var id          = Int32.Parse(dataTable.Rows[i]["MAILACCOUNTID"].ToString());
                            var title       = dataTable.Rows[i]["MAILACCOUNTTITLE"]?.ToString();
                            var serverName  = dataTable.Rows[i]["MAILSERVERNAME"]?.ToString();
                            var accountName = dataTable.Rows[i]["MAILACCOUNTNAME"]?.ToString();
                            var accountPass = dataTable.Rows[i]["MAILACCOUNTPASSWORD"]?.ToString();
                            var pop3Port    = Int32.Parse(dataTable.Rows[i]["MAILPOP3PORT"].ToString());
                            var smptpPort   = Int32.Parse(dataTable.Rows[i]["MAILSMTPPORT"].ToString());
                            var fromAddress = dataTable.Rows[i]["FROMMAILADDRESS"]?.ToString();

                            var sendDataMailAccount = new SendDataMailAccount()
                            {
                                AccountId       = id,
                                AccountName     = accountName,
                                AccountPass     = accountPass,
                                Active          = 1,
                                FromMailAddress = fromAddress,
                                MailPop3Port    = pop3Port,
                                MailSmtpPort    = smptpPort,
                                ServerName      = serverName,
                                Title           = title
                            };

                            sendDataMailAccountList.Add(sendDataMailAccount);
                        }
                    }
                    #endregion

                    try
                    {
                        connectionQueryData.Close();
                    }
                    catch (Exception)
                    {
                    }
                }
            }
            catch (Exception ex)
            {
                //TODO:Log
            }

            return(sendDataMailAccountList);
        }
예제 #2
0
        private static async Task SendDataBy(SendDataMailAccount sendDataMailAccount, SendDataItem sendDataItem, string subject, string bodyContent, List <string> recipients, bool useDetailForEveryoneDataValue)
        {
            #region Send Email
            Stopwatch stopwatch = new Stopwatch();
            stopwatch.Start();

            Action <List <string> > sendMailAction = async(recipientList) =>
            {
                try
                {
                    sendDataItem.Recipient = recipients.Aggregate((x, y) => x + ";" + y);

                    var         host       = sendDataMailAccount.ServerName;
                    MailMessage mail       = new MailMessage();
                    SmtpClient  SmtpServer = new SmtpClient(host);

                    var from = sendDataMailAccount.FromMailAddress;
                    mail.From = new MailAddress(from);

                    foreach (var recipient in recipientList.Distinct())
                    {
                        if (recipient.Contains(";") || recipient.Contains(","))
                        {
                            var rcp = recipient.Replace(";", ",").Trim().Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries).ToList();

                            foreach (var rcpItem in rcp)
                            {
                                mail.To.Add(rcpItem);
                            }
                        }
                        else
                        {
                            mail.To.Add(recipient.Trim());
                        }
                    }

                    if (string.IsNullOrEmpty(sendDataItem.Cc) == false)
                    {
                        foreach (var ccItem in sendDataItem.Cc.Replace(";", ",").Trim().Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries))
                        {
                            if (string.IsNullOrEmpty(ccItem.Trim()) == false)
                            {
                                mail.CC.Add(ccItem.Trim());
                            }
                        }
                    }

                    if (string.IsNullOrEmpty(sendDataItem.Bcc) == false)
                    {
                        foreach (var bccItem in sendDataItem.Bcc.Replace(";", ",").Trim().Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries))
                        {
                            if (string.IsNullOrEmpty(bccItem.Trim()) == false)
                            {
                                mail.Bcc.Add(bccItem.Trim());
                            }
                        }
                    }

                    if (string.IsNullOrEmpty(sendDataItem.ReplyTo) == false)
                    {
                        foreach (var replyToItem in sendDataItem.ReplyTo.Replace(";", ",").Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries))
                        {
                            if (string.IsNullOrEmpty(replyToItem.Trim()) == false)
                            {
                                mail.ReplyToList.Add(replyToItem.Trim());
                            }
                        }
                    }

                    mail.Subject    = subject;
                    mail.Body       = bodyContent;
                    mail.IsBodyHtml = true;

                    SmtpServer.Port        = sendDataMailAccount.MailSmtpPort;
                    SmtpServer.Credentials = new System.Net.NetworkCredential(sendDataMailAccount.AccountName, sendDataMailAccount.AccountPass);
                    SmtpServer.EnableSsl   = false;

                    SmtpServer.Send(mail);
                    sendDataItem.SentDate = DateTimeOffset.Now;
                }
                catch (Exception ex)
                {
                    sendDataItem.ErrorMsg = ex.Message;

                    LoggerService.GetLogger(ConstantHelper.JobLog).Log(new LogItem()
                    {
                        LoggerName        = ConstantHelper.JobLog,
                        Title             = "GenerateSendDataItemFrom Error",
                        Message           = ex.Message,
                        LogItemProperties = new List <LogItemProperty>()
                        {
                            new LogItemProperty("ServiceName", ConstantHelper.JobLog),
                            new LogItemProperty("ActionName", "SendMailAction"),
                            new LogItemProperty("FormData", new { sendDataItem, recipientList })
                        },
                        LogLevel  = LogLevel.Error,
                        Exception = ex
                    });
                }

                var saveDataItem = await InsertSendDataItem(sendDataItem);
            };

            //herkes icin tek template kullan
            if (useDetailForEveryoneDataValue)
            {
                sendMailAction(recipients);
            }
            else
            {
                recipients.AsParallel().ForAll(recipient =>
                {
                    sendMailAction(new List <string>()
                    {
                        recipient
                    });
                });
            }

            stopwatch.Stop();

            LoggerService.GetLogger(ConstantHelper.JobLog).Log(new LogItem()
            {
                LoggerName        = ConstantHelper.JobLog,
                Title             = "SendDataBy Executed",
                Message           = "SendDataBy Executed",
                LogItemProperties = new List <LogItemProperty>()
                {
                    new LogItemProperty("ServiceName", ConstantHelper.JobLog),
                    new LogItemProperty("ActionName", "SendDataBy"),
                    new LogItemProperty("ElapsedTimeAssn", stopwatch.Elapsed.TotalSeconds),
                },
                LogLevel = LogLevel.Trace
            });
            #endregion
        }