public bool SendEMail() { string json = string.Empty; try { #region string schedule_code = "send mail";//Request.Params["schedule_code"].ToString(); MailModel mailModel = new MailModel(); mailModel.MysqlConnectionString = mySqlConnectionString; string GroupCode = string.Empty; string MailTitle = string.Empty; string MailBody = string.Empty; bool IsSeparate = false; bool IsDisplyName = true; ScheduleServiceMgr _secheduleServiceMgr; List<MailRequest> MR = new List<MailRequest>(); MailRequest model = new MailRequest(); List<ScheduleConfigQuery> store_config = new List<ScheduleConfigQuery>(); ScheduleConfigQuery query_config = new ScheduleConfigQuery(); query_config.schedule_code = schedule_code; _secheduleServiceMgr = new ScheduleServiceMgr(mySqlConnectionString); store_config = _secheduleServiceMgr.GetScheduleConfig(query_config); foreach (ScheduleConfigQuery item in store_config) { if (item.parameterCode.Equals("MailFromAddress")) { mailModel.MailFromAddress = item.value; } else if (item.parameterCode.Equals("MailHost")) { mailModel.MailHost = item.value; } else if (item.parameterCode.Equals("MailPort")) { mailModel.MailPort = item.value; } else if (item.parameterCode.Equals("MailFromUser")) { mailModel.MailFromUser = item.value; } else if (item.parameterCode.Equals("EmailPassWord")) { mailModel.MailFormPwd = item.value; } else if (item.parameterCode.Equals("GroupCode")) { GroupCode = item.value; } else if (item.parameterCode.Equals("MailTitle")) { MailTitle = item.value; } else if (item.parameterCode.Equals("MailTitle")) { MailTitle = item.value; } else if (item.parameterCode.Equals("MailBody")) { MailBody = item.value; } else if (item.parameterCode.Equals("IsSeparate")) { if (item.value.ToString().Trim().ToLower() == "false") { IsSeparate = false; } else if (item.value.ToString().Trim().ToLower() == "true") { IsSeparate = true; } } else if (item.parameterCode.Equals("IsDisplyName")) { if (item.value.ToString().Trim().ToLower() == "false") { IsDisplyName = false; } else if (item.value.ToString().Trim().ToLower() == "true") { IsDisplyName = true; } } else if (!string.IsNullOrEmpty(Request.Params["IsDisplyName"])) { if (Request.Params["IsDisplyName"].ToString().Trim().ToLower() == "false") { IsSeparate = false; } else if (Request.Params["IsDisplyName"].ToString().Trim().ToLower() == "true") { IsSeparate = true; } } } MailHelper mail = new MailHelper(mailModel); _edmcontentMgr = new EdmContentNewMgr(mySqlConnectionString); _edmcontentMgr.SendEMail(mail); #endregion } catch (Exception ex) { Log4NetCustom.LogMessage logMessage = new Log4NetCustom.LogMessage(); logMessage.Content = string.Format("TargetSite:{0},Source:{1},Message:{2}", ex.TargetSite.Name, ex.Source, ex.Message); logMessage.MethodName = System.Reflection.MethodBase.GetCurrentMethod().Name; log.Error(logMessage); json = "{success:false}"; } return true; }
/*public HttpResponseBase GetContentUrl() { string json = string.Empty; string template_data = string.Empty; string contentJson = string.Empty; string replaceStr = string.Empty; string editStr = string.Empty; try { _edmContentNewMgr = new EdmContentNewMgr(mySqlConnectionString); if (!string.IsNullOrEmpty(Request.Params["content_url"])) { #region 獲取網頁內容方法 string url = Request.Params["content_url"].ToString(); HttpWebRequest httpRequest = (HttpWebRequest)WebRequest.Create(url); httpRequest.Timeout = 9000; httpRequest.Method = "GET"; HttpWebResponse httpResponse = (HttpWebResponse)httpRequest.GetResponse(); StreamReader sr = new StreamReader(httpResponse.GetResponseStream(), System.Text.Encoding.GetEncoding("UTF-8")); contentJson = sr.ReadToEnd(); #endregion } else { int template_id = Convert.ToInt32(Request.Params["template_id"]); string url = _edmContentNewMgr.GetContentUrl(template_id); HttpWebRequest httpRequest = (HttpWebRequest)WebRequest.Create(url); httpRequest.Timeout = 9000; httpRequest.Method = "GET"; HttpWebResponse httpResponse = (HttpWebResponse)httpRequest.GetResponse(); StreamReader sr = new StreamReader(httpResponse.GetResponseStream(), System.Text.Encoding.GetEncoding("UTF-8")); contentJson = sr.ReadToEnd(); } if (!string.IsNullOrEmpty(Request.Params["template_data"])) { template_data = Request.Params["template_data"]; } DataTable _dt = _edmContentNewMgr.GetPraraData(1); if (_dt != null && _dt.Rows.Count > 0) { replaceStr = _dt.Rows[0][0].ToString(); } else { replaceStr = " "; } DataTable _dtEdit = _edmContentNewMgr.GetPraraData(3); if (_dtEdit != null && _dtEdit.Rows.Count > 0) { editStr = _dtEdit.Rows[0][0].ToString(); } else { editStr = " "; } template_data = template_data.Replace(editStr,""); contentJson=contentJson.Replace(replaceStr,template_data); json = contentJson; } catch (Exception ex) { Log4NetCustom.LogMessage logMessage = new Log4NetCustom.LogMessage(); logMessage.Content = string.Format("TargetSite:{0},Source:{1},Message:{2}", ex.TargetSite.Name, ex.Source, ex.Message); logMessage.MethodName = System.Reflection.MethodBase.GetCurrentMethod().Name; log.Error(logMessage); json = "獲取網頁出現異常!"; } this.Response.Clear(); this.Response.Write(json); this.Response.End(); return this.Response; }*/ #endregion #region 發送電子報 (測試發送/正式發送) public HttpResponseBase SendEdm() { string json = string.Empty; EdmSendLog eslQuery = new EdmSendLog(); MailRequest mQuery = new MailRequest(); try { _edmContentNewMgr = new EdmContentNewMgr(mySqlConnectionString); if (!string.IsNullOrEmpty(Request.Params["content_id"])) { eslQuery.content_id = mQuery.content_id = Convert.ToInt32(Request.Params["content_id"]); } if (!string.IsNullOrEmpty(Request.Params["group_id"])) { mQuery.group_id = Convert.ToInt32(Request.Params["group_id"]); } if (!string.IsNullOrEmpty(Request.Params["sender_email"])) { mQuery.sender_address = Request.Params["sender_email"]; } if (!string.IsNullOrEmpty(Request.Params["sender_name"])) { mQuery.sender_name = Request.Params["sender_name"]; } if (!string.IsNullOrEmpty(Request.Params["subject"])) { mQuery.subject = Request.Params["subject"]; } if (!string.IsNullOrEmpty(Request.Params["template_id"])) { mQuery.template_id = Convert.ToInt32(Request.Params["template_id"]); } if (!string.IsNullOrEmpty(Request.Params["static_template"])) { mQuery.static_template = Convert.ToUInt64(Request.Params["static_template"]); } eslQuery.create_userid = (Session["caller"] as Caller).user_id; mQuery.user_id = 0; if (!string.IsNullOrEmpty(Request.Params["testSend"])) { if (Request.Params["testSend"] == "true")// { eslQuery.test_send_end = true; #region 字段賦值 eslQuery.test_send = 1; eslQuery.receiver_count = 1; eslQuery.schedule_date = DateTime.Now; eslQuery.expire_date = eslQuery.schedule_date.AddHours(1); eslQuery.createdate = eslQuery.schedule_date; mQuery.schedule_date = eslQuery.schedule_date; mQuery.valid_until_date = eslQuery.expire_date; mQuery.retry_count = 0; mQuery.next_send = eslQuery.schedule_date; mQuery.max_retry = 1; if (!string.IsNullOrEmpty(Request.Params["test_send_list"])) { string[] test_send_arr = Request.Params["test_send_list"].ToString().TrimEnd('\n').Split('\n'); for (int i = 0; i < test_send_arr.Length; i++) { if (test_send_arr[i] != "") { mQuery.receiver_address = test_send_arr[i]; eslQuery.receiver_count = test_send_arr.Length; if (!string.IsNullOrEmpty(Request.Params["body"])) { if (mQuery.static_template == 0)//非靜態範本,需動態生成推薦 { mQuery.bodyData = Request.Params["body"] + _edmContentNewMgr.GetRecommendHtml(0); } else//靜態範本 { mQuery.bodyData = Request.Params["body"]; } #region 得到電子報整體內容 string replaceStr = string.Empty; string editStr = string.Empty; string content_url = _edmContentNewMgr.GetContentUrlByContentId(eslQuery.content_id); if (!string.IsNullOrEmpty(content_url)) { #region 獲取網頁內容 HttpWebRequest httpRequest = (HttpWebRequest)WebRequest.Create(content_url); httpRequest.Timeout = 9000; httpRequest.Method = "GET"; HttpWebResponse httpResponse = (HttpWebResponse)httpRequest.GetResponse(); StreamReader sr = new StreamReader(httpResponse.GetResponseStream(), System.Text.Encoding.GetEncoding("UTF-8")); string contentStr = sr.ReadToEnd(); DataTable _dt = _edmContentNewMgr.GetPraraData(1); if (_dt != null && _dt.Rows.Count > 0) { replaceStr = _dt.Rows[0][0].ToString(); } else { replaceStr = " "; } DataTable _dtEdit = _edmContentNewMgr.GetPraraData(3); if (_dtEdit != null && _dtEdit.Rows.Count > 0) { editStr = _dtEdit.Rows[0][0].ToString(); } else { editStr = " "; } if (mQuery.bodyData.IndexOf(subscribe) > 0)//找到了埋的那個code,證明是點擊了訂閱電子報 { mQuery.bodyData = contentStr.Replace(replaceStr, mQuery.bodyData.Replace(subscribe, "\n").Replace(editStr,"") ) + subscribe_url; ; } else { mQuery.bodyData = contentStr.Replace(replaceStr, mQuery.bodyData.Replace(editStr, "")); } #endregion } #endregion } MailHelper mail = new MailHelper(); mail.SendMailAction(test_send_arr[i], mQuery.subject, mQuery.bodyData + " "); json = _edmContentNewMgr.MailAndRequest(eslQuery, mQuery); } } } else { MailHelper mail = new MailHelper(); mQuery.bodyData = Request.Params["body"]; if (mQuery.bodyData.IndexOf(subscribe) > 0)//找到了埋的那個code,證明是點擊了訂閱電子報 { mQuery.bodyData = mQuery.bodyData.Replace(subscribe, "\n") + _edmContentNewMgr.GetRecommendHtml(Convert.ToUInt32((Session["caller"] as Caller).user_id)) + subscribe_url; } mail.SendMailAction((Session["caller"] as Caller).user_email, mQuery.subject, mQuery.bodyData + " "); json = _edmContentNewMgr.MailAndRequest(eslQuery, mQuery); } #endregion } else//正式發送,寫入排程所用表 { if (!string.IsNullOrEmpty(Request.Params["body"])) { mQuery.body = Request.Params["body"]; } eslQuery.test_send_end = false; eslQuery.test_send = 0; //eslQuery.receiver_count=""; 經計算後寫入 if (!string.IsNullOrEmpty(Request.Params["schedule_date"])) { eslQuery.schedule_date = Convert.ToDateTime(Request.Params["schedule_date"]); mQuery.schedule_date = eslQuery.schedule_date; } if (!string.IsNullOrEmpty(Request.Params["email_group_id"])) { eslQuery.email_group_id = Convert.ToInt32(Request.Params["email_group_id"]); } if (!string.IsNullOrEmpty(Request.Params["expire_date"])) { eslQuery.expire_date = Convert.ToDateTime(Convert.ToDateTime(Request.Params["expire_date"]).ToString("yyyy-MM-dd 23:59:59")); mQuery.valid_until_date = eslQuery.expire_date; } eslQuery.createdate = DateTime.Now; if (!string.IsNullOrEmpty(Request.Params["elcm_id"])) { eslQuery.elcm_id = Convert.ToInt32(Request.Params["elcm_id"]); } if (!string.IsNullOrEmpty(Request.Params["extra_send"])) { mQuery.extra_send = Request.Params["extra_send"]; } if (!string.IsNullOrEmpty(Request.Params["extra_no_send"])) { mQuery.extra_no_send = Request.Params["extra_no_send"]; } if (!string.IsNullOrEmpty(Request.Params["is_outer"])) { if (Request.Params["is_outer"] == "true") { mQuery.is_outer = true; } else { mQuery.is_outer = false; } } json = _edmContentNewMgr.MailAndRequest(eslQuery, mQuery); } } } catch (Exception ex) { Log4NetCustom.LogMessage logMessage = new Log4NetCustom.LogMessage(); logMessage.Content = string.Format("TargetSite:{0},Source:{1},Message:{2}", ex.TargetSite.Name, ex.Source, ex.Message); logMessage.MethodName = System.Reflection.MethodBase.GetCurrentMethod().Name; log.Error(logMessage); json = "{success:false}"; } this.Response.Clear(); this.Response.Write(json); this.Response.End(); return this.Response; }
public string InsertEmailRequest(MailRequest query) { query.Replace4MySQL(); StringBuilder sql = new StringBuilder(); try { sql.Append("insert into mail_request(priority,user_id,sender_address, "); sql.Append(" sender_name,receiver_address,receiver_name,subject, "); sql.Append(" body, importance,schedule_date,valid_until_date, "); sql.Append(" retry_count,last_sent,next_send,max_retry,sent_log,request_createdate,request_updatedate,success_action,fail_action) values( "); sql.AppendFormat("'{0}','{1}','{2}',", query.priority, query.user_id, query.sender_address); sql.AppendFormat("'{0}','{1}','{2}','{3}',", query.sender_name, query.receiver_address, query.receiver_name, query.subject); sql.AppendFormat("'{0}','{1}','{2}','{3}',", query.bodyData, query.importance, CommonFunction.DateTimeToString(query.schedule_date), CommonFunction.DateTimeToString(query.valid_until_date)); sql.AppendFormat("'{0}','{1}','{2}','{3}','{4}','{5}',NOW(),'{6}','{7}');", query.retry_count, CommonFunction.DateTimeToString(query.last_sent), CommonFunction.DateTimeToString(query.next_send), query.max_retry, query.sent_log, CommonFunction.DateTimeToString(DateTime.Now), query.success_action, query.fail_action); return sql.ToString(); } catch (Exception ex) { throw new Exception("EdmContentNewDao-->InsertEmailRequest-->" + sql.ToString() + ex.Message, ex); } }
public string InsertLog(MailRequest m, string mail_result) { StringBuilder sb = new StringBuilder(); try { sb.AppendFormat("insert into mail_log (priority,user_id,send_address,sender_name,receiver_address,receiver_name,subject,importance,schedule_date,valid_until_date,retry_count,last_sent,sent_log,send_result,request_createdate,request_updatedate,log_createdate) VALUES ('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}','{11}','{12}','{13}',NOW(),NOW(),NOW());", m.priority, m.user_id, m.sender_address, m.sender_name, m.receiver_address, m.receiver_name, m.subject, m.importance, CommonFunction.DateTimeToString(m.schedule_date), CommonFunction.DateTimeToString(m.valid_until_date), m.retry_count, CommonFunction.DateTimeToString(m.last_sent), m.sent_log, mail_result); sb.AppendFormat("Delete from mail_request where request_id in ({0});", m.request_id); return sb.ToString(); } catch (Exception ex) { throw new Exception("ScheduleServiceDao-->InsertLog2-->" + sb.ToString() + ex.Message); } }
public string MailAndRequest(EdmSendLog eslQuery, MailRequest MRquery) { eslQuery.Replace4MySQL(); MRquery.Replace4MySQL(); string json = string.Empty; ArrayList arrList = new ArrayList(); try { if (eslQuery.test_send_end)//測試發送 { _edmContentNewDao.InsertEdmSendLog(eslQuery); arrList.Add(_edmContentNewDao.InsertEmailRequest(MRquery)); } else//正式發送 { /* 1.發送名單條件和額外發送列表和額外不發送列表進行查重 2.固定信箱名單和額外發送列表和額外不發送列表進行查重 3.發送名單條件和固定信箱名單進行查重 4.包含非訂閱的與額外發送列表和額外不發送列表進行查重進行查重 5.4的結果和3的結果去重 */ string[] extra_send_temp = new string[] { }; string[] extra_send = new string[] { }; string[] extra_no_send_temp = new string[] { }; string[] extra_no_send = new string[] { }; #region 額外發送列表中數據去重 if (MRquery.extra_send != "") { extra_send_temp = MRquery.extra_send.Split('\n'); List<string> extraSendTList = new List<string>(); for (int i = 0; i < extra_send_temp.Length; i++) { if (!extraSendTList.Contains(extra_send_temp[i])) { extraSendTList.Add(extra_send_temp[i]); } } extra_send= extraSendTList.ToArray(); } #endregion #region 額外不發送列表中數據去重 if (MRquery.extra_no_send != "") { extra_no_send_temp = MRquery.extra_no_send.Split('\n'); List<string> extraNoSendTList = new List<string>(); for (int i = 0; i < extra_no_send_temp.Length; i++) { if (!extraNoSendTList.Contains(extra_no_send_temp[i])) { extraNoSendTList.Add(extra_no_send_temp[i]); } } extra_no_send = extraNoSendTList.ToArray(); } #endregion #region 第一步: 【發送名單條件】和額外發送列表和額外不發送列表進行查重 #region 發送名單條件 DataTable _newDt = new DataTable(); _newDt.Columns.Add("user_email", typeof(string)); _newDt.Columns.Add("user_name", typeof(string)); DataTable _dt = new DataTable(); //如果選得無則沒有任何email if (eslQuery.elcm_id > 0) { _dt = _edmListConditionMgr.GetUserEmail(eslQuery.elcm_id); } else { _dt.Columns.Add("user_email", typeof(string)); _dt.Columns.Add("user_name", typeof(string)); _dt.Columns.Add("user_id", typeof(string)); } #region 額外發送列表 #region 發送名單為空,額外發送不空 if ((_dt == null || _dt.Rows.Count == 0) && MRquery.extra_send != "") { for (int i = 0; i < extra_send.Length; i++) { if (extra_send[i] != "") { DataRow dr = _dt.NewRow(); dr["user_email"] = extra_send[i]; dr["user_name"] = ""; dr["user_id"] = "0"; _dt.Rows.Add(dr); } } } #endregion #region 發送名單為空,額外發送列表為空 #endregion #region 發送名單不空,額外發送為空 #endregion #region 發送名單不空,額外發送不空 else if ((_dt != null && _dt.Rows.Count > 0) && MRquery.extra_send != "") { for (int i = 0; i < extra_send.Length; i++) { if (extra_send[i] != "") { int norepeat = 0; #region 額外發送的時候看看是不是已經存在這個email了,存在則不加入 for (int j = 0; j < _dt.Rows.Count; j++) { if (_dt.Rows[j]["user_email"].ToString() != extra_send[i]) { norepeat++; } } if (norepeat == _dt.Rows.Count)//證明不重複 { DataRow dr = _dt.NewRow(); dr["user_email"] = extra_send[i]; dr["user_name"] = ""; dr["user_id"] = "0"; _dt.Rows.Add(dr); } #endregion } } } #endregion #endregion #region 額外排除列表 #region 發送名單為空額外排除名單不空 #endregion #region 發送名單為空,額外排除列表為空 #endregion #region 發送名單不空,額外排除為空 #endregion #region 發送名單不空,額外排除不空 if ((_dt != null && _dt.Rows.Count > 0) && MRquery.extra_no_send != "") { for (int i = 0; i < extra_no_send.Length; i++) { if (extra_no_send[i] != "") { for (int j = 0; j < _dt.Rows.Count; j++) { if (_dt.Rows[j]["user_email"].ToString() == extra_no_send[i]) { _dt.Rows.Remove(_dt.Rows[j]); _dt.AcceptChanges(); } } } } } #endregion #endregion #endregion #endregion #region 第二步: 【固定信箱名單】額外發送列表和額外發送列表進行查重 #region 固定信箱名單 DataTable _emailDt = _emailGroup.GetEmailList(eslQuery.email_group_id); #region 額外發送列表 #region 固定信箱名單為空,額外發送不為空 if ((_emailDt == null || _emailDt.Rows.Count == 0) && MRquery.extra_send != "") { _emailDt.Columns.Add("email_address", typeof(string)); _emailDt.Columns.Add("name", typeof(string)); for (int i = 0; i < extra_send.Length; i++) { if (extra_send[i] != "") { DataRow dr = _emailDt.NewRow(); dr["email_address"] = extra_send[i]; dr["name"] = ""; _emailDt.Rows.Add(dr); } } } #endregion #region 固定信箱名單為空,額外發送為空 #endregion #region 固定信箱名單不為空,額外發送為空 #endregion #region 固定信箱名單不為空,額外發送不為空 else if ((_emailDt != null && _emailDt.Rows.Count > 0) && MRquery.extra_send != "") { for (int i = 0; i < extra_send.Length; i++) { if (extra_send[i] != "") { int norepeat = 0; #region 額外發送的時候看看是不是已經存在這個email了,存在則不加入 for (int j = 0; j < _emailDt.Rows.Count; j++) { if (_emailDt.Rows[j]["email_address"].ToString() != extra_send[i]) { norepeat++; } } if (norepeat == _emailDt.Rows.Count)//證明不重複 { DataRow dr = _emailDt.NewRow(); dr["email_address"] = extra_send[i]; dr["name"] = ""; _emailDt.Rows.Add(dr); } #endregion } } } #endregion #endregion #region 額外排除列表 #region 信箱名單為空,額外排除為空 #endregion #region 信箱名單為空,額外排除不為空 #endregion #region 信箱名單不為空,額外排除為空 #endregion #region 信箱名單不為空,額外排除為空 if ((_emailDt != null && _emailDt.Rows.Count > 0) && MRquery.extra_no_send != "") { for (int i = 0; i < extra_no_send.Length; i++) { if (extra_no_send[i] != "") { for (int j = 0; j < _emailDt.Rows.Count; j++) { if (_emailDt.Rows[j]["email_address"].ToString() == extra_no_send[i]) { _emailDt.Rows.Remove(_emailDt.Rows[j]); _emailDt.AcceptChanges(); } } } } } #endregion #endregion #endregion #endregion #region 第三步: 發送名單條件和固定信箱名單查重 #region 發送名單為空,固定信箱不為空 if ((_dt == null || _dt.Rows.Count == 0) && _emailDt != null) { for (int i = 0; i < _emailDt.Rows.Count; i++) { DataRow dr = _dt.NewRow(); dr["user_email"] = _emailDt.Rows[i]["email_address"]; dr["user_name"] = _emailDt.Rows[i]["name"]; dr["user_id"] = "0"; _dt.Rows.Add(dr); } } #endregion #region 發送名單為空,固定信箱為空 #endregion #region 發送名單不為空,固定信箱為空 #endregion #region 發送名單不為空,固定信箱不為空 else if ((_dt != null && _dt.Rows.Count > 0) && (_emailDt != null && _emailDt.Rows.Count > 0)) { for (int i = 0; i < _emailDt.Rows.Count; i++) { int norepeat = 0; string email_address = string.Empty; for (int j = 0; j < _dt.Rows.Count; j++) { if (_dt.Rows[j]["user_email"].ToString() != _emailDt.Rows[i]["email_address"].ToString()) { norepeat++; email_address = _emailDt.Rows[i]["email_address"].ToString(); } } if (norepeat == _dt.Rows.Count)//證明不重複 { DataRow dr = _dt.NewRow(); dr["user_name"] = ""; dr["user_email"] = email_address; dr["user_id"] = "0"; _dt.Rows.Add(dr); } } } #endregion #endregion #region 【包含訂閱】與額外發送列表和額外排除列表 if (MRquery.is_outer) { #region 包含訂閱 DataTable _outDt = GetCheckedDataTable(MRquery.group_id); #region 額外發送列表 if (MRquery.extra_send != "") { for (int i = 0; i < extra_send.Length; i++) { if (extra_send[i] != "") { #region 額外發送的時候看看是不是已經存在這個email了,存在則不加入 int norepeat = 0; for (int j = 0; j < _outDt.Rows.Count; j++) { if (_outDt.Rows[j]["customer_email"].ToString() != extra_send[i]) { norepeat++; } } if (norepeat == _outDt.Rows.Count)//證明不重複 { DataRow dr = _outDt.NewRow(); dr["customer_email"] = extra_send[i]; _outDt.Rows.Add(dr); } #endregion } } } #endregion #region 額外排除列表 if (MRquery.extra_no_send != "") { for (int i = 0; i < extra_no_send.Length; i++) { if (extra_no_send[i] != "") { for (int j = 0; j < _outDt.Rows.Count; j++) { if (_outDt.Rows[j]["customer_email"].ToString() == extra_no_send[i]) { _outDt.Rows.Remove(_outDt.Rows[j]); _outDt.AcceptChanges(); } } } } } #endregion #region 去重 for (int i = 0; i < _outDt.Rows.Count; i++) { for (int j = 0; j < _dt.Rows.Count; j++) { if (_dt.Rows[j]["user_email"].ToString() == _outDt.Rows[i]["customer_email"].ToString()) { _dt.Rows.RemoveAt(j); _dt.AcceptChanges(); } } } #endregion _dt.Merge(_outDt); #endregion } #endregion #region 賦值,生成sql語句 string RecommendHtml = string.Empty; if (_dt.Rows.Count > 0) { eslQuery.receiver_count = _dt.Rows.Count; int log_id = Convert.ToInt32(_edmContentNewDao.InsertEdmSendLog(eslQuery).Rows[0][0]); for (int i = 0; i < _dt.Rows.Count; i++) { if (_dt.Columns.Contains("user_email")) { if (_dt.Rows[i]["user_email"].ToString() != "" && _dt.Rows[i]["user_email"].ToString() != null) { MRquery.receiver_address = _dt.Rows[i]["user_email"].ToString(); if (!string.IsNullOrEmpty(_dt.Rows[i]["user_name"].ToString())) { MRquery.receiver_name = _dt.Rows[i]["user_name"].ToString(); } else { MRquery.receiver_name = ""; } if (!string.IsNullOrEmpty(_dt.Rows[i]["user_id"].ToString())) { MRquery.user_id = Convert.ToInt32(_dt.Rows[i]["user_id"].ToString()); } else { MRquery.user_id = 0; } } else { MRquery.receiver_address = _dt.Rows[i]["customer_email"].ToString(); MRquery.receiver_name = ""; MRquery.user_id = 0; } } else { if (_dt.Columns.Contains("customer_email")) { MRquery.receiver_address = _dt.Rows[i]["customer_email"].ToString(); MRquery.receiver_name = ""; MRquery.user_id = 0; } } if (MRquery.static_template == 0) { RecommendHtml = GetRecommendHtml(Convert.ToUInt32(MRquery.user_id));//根據user_id做出精準推薦 } else { RecommendHtml = string.Empty; } EdmTraceEmail ete = new EdmTraceEmail(); ete.email = MRquery.receiver_address; ete.name = MRquery.receiver_name; int email_id = Convert.ToInt32(_edmContentNewDao.InsertEdmTraceEmail(ete).Rows[0][0]); EdmTrace et = new EdmTrace(); et.log_id = log_id; et.content_id = eslQuery.content_id; et.count = 0; et.success = -1; et.email_id = email_id; arrList.Add(_edmContentNewDao.InsertEdmTrace(et)); MRquery.success_action = "update edm_trace set success=1,send_date=NOW() where log_id=" + log_id + " and content_id=" + eslQuery.content_id + " and email_id=" + email_id + ";"; MRquery.fail_action = "update edm_trace set success=0,send_date=NOW() where log_id=" + log_id + " and content_id=" + eslQuery.content_id + " and email_id=" + email_id + ";"; #region 用於統計開信人數次數的url DataTable _dtUrl = _edmContentNewDao.GetPraraData(2);//用於統計開信人數次數的url string url = string.Empty; if (_dtUrl != null && _dtUrl.Rows.Count > 0) { url = "<img src='" + _dtUrl.Rows[0][0].ToString() + "?c=" + eslQuery.content_id + "&e=" + email_id + "&l=" + log_id + "'/>"; } #endregion #region 獲得電子報整體內容 #region 是範本還是活動頁面 string replaceStr = string.Empty; string editStr = string.Empty; string content_url = GetContentUrlByContentId(eslQuery.content_id); if (!string.IsNullOrEmpty(content_url)) { #region 獲取網頁內容 HttpWebRequest httpRequest = (HttpWebRequest)WebRequest.Create(content_url); httpRequest.Timeout = 9000; httpRequest.Method = "GET"; HttpWebResponse httpResponse = (HttpWebResponse)httpRequest.GetResponse(); StreamReader sr = new StreamReader(httpResponse.GetResponseStream(), System.Text.Encoding.GetEncoding("UTF-8")); // contentStr = sr.ReadToEnd(); string contentStr = sr.ReadToEnd(); DataTable replaceStrDt = GetPraraData(1); if (replaceStrDt != null && replaceStrDt.Rows.Count > 0) { replaceStr = replaceStrDt.Rows[0][0].ToString(); } else { replaceStr = " "; } DataTable _dtEdit =GetPraraData(3); if (_dtEdit != null && _dtEdit.Rows.Count > 0) { editStr = _dtEdit.Rows[0][0].ToString(); } else { editStr = " "; } if (MRquery.body.IndexOf(subscribe) > 0)//找到了埋的那個code,證明是點擊了訂閱電子報 { MRquery.bodyData = contentStr.Replace(replaceStr, MRquery.body.Replace(editStr, "").Replace(subscribe, "\n") + RecommendHtml) + subscribe_url + url; } else { MRquery.bodyData = contentStr.Replace(replaceStr, MRquery.body.Replace(editStr, "") + RecommendHtml + url); } #endregion } #endregion #endregion arrList.Add(_edmContentNewDao.InsertEmailRequest(MRquery)); MRquery.bodyData = string.Empty; } } #endregion } if (_mySql.ExcuteSqlsThrowException(arrList)) { json = "{success:'true'}"; } else { json = "{success:'false'}"; } return json; } catch (Exception ex) { throw new Exception("EdmContentNewMgr-->MailAndRequest-->" + ex.Message, ex); } }