using Microsoft.AspNetCore.Mvc; using Newtonsoft.Json; using Microsoft.AspNetCore.Cors; using Dapper; using System.Data.SqlClient; using System.Net; using Dapper.Contrib.Extensions; using static DbTableClass; using MimeKit; using MailKit.Security; using System.Net.Mail; using System.Net.Mime; namespace Bremen_ESG.Controllers { [EnableCors("any")] [Route("Api")] public class ApiController : ControllerBase { private readonly IHttpContextAccessor _httpContextAccessor; private readonly IWebHostEnvironment _hostingEnvironment; DbConn dbConn = new DbConn(); SqlConnection conn = new SqlConnection(GlobalClass.appsettings("ConnectionStrings:SQLConnectionString")); public ApiController(IHttpContextAccessor httpContextAccessor, IWebHostEnvironment webHostEnvironment) { this._httpContextAccessor = httpContextAccessor; this._hostingEnvironment = webHostEnvironment; } [EnableCors("any")] [Route("news_list")] public async Task News_List(IFormCollection obj) { newResult ret = new newResult(); List newsList = conn.Query("select * from news order by news_sn desc").ToList(); ret.news_num = newsList.Count; foreach (news objNew in newsList) { newsDetial objDetial = new newsDetial(objNew); objDetial.news_content = objDetial.news_content.Replace("color: rgb(5, 5, 5);", "").Replace("font-family: 微軟正黑體;", ""); ret.news_list.Add(objDetial); } ret.ret = "yes"; return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8"); } [EnableCors("any")] [Route("esg_message")] public async Task Esg_Message(IFormCollection obj) { result ret = new result(); esgMessage objEsg = new esgMessage(); objEsg.esgMessage_company = obj["company"].ToString(); objEsg.esgMessage_id = obj["id"].ToString(); objEsg.esgMessage_name = obj["name"].ToString(); objEsg.esgMessage_email = obj["email"].ToString(); objEsg.esgMessage_tel = obj["tel"].ToString(); objEsg.esgMessage_department = obj["department"].ToString(); objEsg.esgMessage_esgNeed = obj["esgNeed"].ToString(); objEsg.esgMessage_mediaUrl = obj["mediaUrl"].ToString(); objEsg.esgMessage_testResult = obj["result"].ToString(); string err_msg = ""; if (objEsg.esgMessage_company == "") { err_msg += "無企業名稱\n"; } if (objEsg.esgMessage_name == "") { err_msg += "無聯絡人姓名\n"; } if (objEsg.esgMessage_tel == "") { err_msg += "無聯絡人電話\n"; } if (err_msg != "") { ret.ret = "no"; ret.message = err_msg; ret.err_code = "0001"; return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8"); } string[] mediaUrl = objEsg.esgMessage_mediaUrl.Split(";"); string htmlBody = ""; htmlBody += "

聯絡方式

"; htmlBody += "
企業名稱:" + objEsg.esgMessage_company; htmlBody += "
統一編號:" + objEsg.esgMessage_id; htmlBody += "
聯絡人姓名:" + objEsg.esgMessage_name; htmlBody += "
聯絡人 email:" + objEsg.esgMessage_email; htmlBody += "
聯絡人電話:" + objEsg.esgMessage_tel; htmlBody += "
聯絡人部門/職稱:" + objEsg.esgMessage_department; htmlBody += "
------------------------------------------------------------------------------"; htmlBody += "
檢測結果:" + objEsg.esgMessage_testResult; htmlBody += "
已知EGS需求:" + objEsg.esgMessage_esgNeed; htmlBody += "
------------------------------------------------------------------------------"; htmlBody += "
企業目前主要自媒體:"; foreach (string urlstr in mediaUrl) { htmlBody += "
" + urlstr + ""; } MailRequest mailRequest = new MailRequest(); mailRequest.ToEmail = "calvin@bremen.com.tw,queenie@bremen.com.tw,sunny.lin@bremen.com.tw"; //mailRequest.attach = arrBites; //mailRequest.attachName = "結果.xlsx"; mailRequest.Body = htmlBody; mailRequest.Subject = "分眾結果通知信"; await SendEmailAsync(mailRequest); DbConn dbConn = new DbConn(); SqlConnection conn = dbConn.sqlConnection(); conn.Insert(objEsg); conn.Close(); ret.ret = "yes"; return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8"); } [EnableCors("any")] [Route("esg_mail")] public async Task Esg_Mail(IFormCollection obj) { result ret = new result(); string target_email = obj["email"].ToString(); string target_link = obj["link"].ToString(); string err_msg = ""; if (GlobalClass.isURL(target_link) == false) { err_msg += "無有效結果連結\n"; } if (GlobalClass.isEmail(target_email) == false) { err_msg += "無有效Email\n"; } if (err_msg != "") { ret.ret = "no"; ret.message = err_msg; ret.err_code = "0001"; return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8"); } string html = $@""; string fullPath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot/email_pic/email_footer.jpg"); var res = new LinkedResource(fullPath, MediaTypeNames.Image.Jpeg); res.ContentId = Guid.NewGuid().ToString(); html += ""; html += ""; html += " "; html += " "; html += " "; html += " "; html += " "; html += "
"; html += " "; html += "
"; html += " "; html += " "; html += " "; html += " "; html += " "; html += " "; html += "
"; html += " "; html += "
"; html += " "; html += " "; html += " "; html += " "; html += " "; html += " "; html += " "; html += " "; html += " "; html += " "; html += " "; html += " "; html += "
"; html += "
您好,謝謝您填寫ESG快速檢測
詳細的測驗結果分析,請點擊以下連結查看:
"; html += "
"; html += " "; html += " "; html += " "; html += " "; html += "
"; html += " 查看結果 "; html += "
"; html += "
"; html += " "; html += " "; html += " "; html += " "; html += " "; html += " "; html += "
"; html += " "; html += " "; html += " "; html += "
"; html += "
"; html += "
"; html += " "; html += "
"; html += "
"; html += " "; html += "
"; html += ""; //建立AlternativeView var altView = AlternateView.CreateAlternateViewFromString(html, null, "text/html"); //將圖檔資源加入AlternativeView altView.LinkedResources.Add(res); await SendEsgResultMailAsync(altView, target_email); ret.ret = "yes"; ret.message = "已寄送結果通知信至" + target_email; return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8"); } public class newResult { public string ret = "no"; public string err_code = "0000"; public string message = ""; public int news_num = 0; public List news_list = new List(); } public class result { public string ret = "no"; public string err_code = "0000"; public string message = ""; } public async Task SendEsgResultMailAsync(AlternateView altView, string toEmail) { System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient(); client.Host = GlobalClass.appsettings("MailServer:smtp_host"); client.Port = int.Parse(GlobalClass.appsettings("MailServer:smtp_port")); client.EnableSsl = true; client.Credentials = new NetworkCredential( GlobalClass.appsettings("MailServer:smtp_username"), GlobalClass.appsettings("MailServer:smtp_password") ); var mail = new MailMessage(); mail.IsBodyHtml = true; mail.AlternateViews.Add(altView); mail.To.Add(toEmail); mail.Bcc.Add("dk96pccu@gmail.com,sunny.lin@bremen.com.tw"); mail.From = new MailAddress(GlobalClass.appsettings("MailServer:smtp_username"), "ESG快速檢測結果分析", System.Text.Encoding.UTF8); mail.Subject = "ESG快速檢測結果分析"; await client.SendMailAsync(mail).ContinueWith(task => { if (task.IsFaulted) { Console.WriteLine("Error sending email: " + task.Exception); } else { Console.WriteLine("Email sent successfully."); } }); client.Dispose(); } /// public async Task SendEmailAsync(MailRequest mailRequest) { var email = new MimeMessage(); email.Sender = MailboxAddress.Parse(GlobalClass.appsettings("MailServer:smtp_username")); email.To.Add(MailboxAddress.Parse(GlobalClass.appsettings("MailServer:smtp_username"))); foreach (string item in mailRequest.ToEmail.Split(',')) { email.Bcc.Add(MailboxAddress.Parse(item)); } email.Subject = "ESG需求聯絡表通知信"; var builder = new BodyBuilder(); if (mailRequest.attach != null) { builder.Attachments.Add(mailRequest.attachName, mailRequest.attach); } builder.HtmlBody = mailRequest.Body; email.Body = builder.ToMessageBody(); using var smtp = new MailKit.Net.Smtp.SmtpClient(); smtp.Connect(GlobalClass.appsettings("MailServer:smtp_host"), int.Parse(GlobalClass.appsettings("MailServer:smtp_port")), SecureSocketOptions.StartTls); smtp.Authenticate(GlobalClass.appsettings("MailServer:smtp_username"), GlobalClass.appsettings("MailServer:smtp_password")); await smtp.SendAsync(email); smtp.Dispose(); } public class MailRequest { public string ToEmail { get; set; } = ""; public string Subject { get; set; } = "分眾結果通知信"; public string Body { get; set; } = ""; public byte[] attach { get; set; } public string attachName { get; set; } = "file.xlsx"; } } }