using log4net; using MailSend.Common; using MailSend.Common.Models; using MailSend.Web.Models; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Web; using System.Web.Mvc; namespace MailSend.Web.Controllers { public class MailController : Controller { private static ILog logger = LogManager.GetLogger("MailController"); private MailDataContext mailData = new MailDataContext(); //发送邮件 [HttpPost] public ActionResult Send() { var resp = new RespCommon(); StreamReader sr = new StreamReader(Request.InputStream, Encoding.UTF8); var strJson = sr.ReadToEnd(); if (string.IsNullOrEmpty(strJson)) { resp.Success = false; resp.Code = RespCommon.RespCodeParamError; resp.Message = "参数错误"; return Json(resp); } logger.Debug($"收到邮件发送请求:{strJson}"); var smtpList = mailData.MailSendSmtp.AsNoTracking() .Select(x => x.GID) .ToList(); List listToSend = null; try { listToSend = JsonConvert.DeserializeObject>(strJson); } catch { logger.Error($"JSON格式有误,解析失败:{strJson}"); resp.Success = false; resp.Code = RespCommon.RespCodeParamError; resp.Message = "JSON格式有误,解析失败"; return Json(resp); } foreach (var item in listToSend) { //校验参数 if (string.IsNullOrEmpty(item.SmtpConfig) || !smtpList.Contains(item.SmtpConfig)) { resp.Success = false; resp.Code = RespCommon.RespCodeParamError; resp.Message = "SmtpConfig无效"; return Json(resp); } if (string.IsNullOrEmpty(item.SendTo)) { resp.Success = false; resp.Code = RespCommon.RespCodeParamError; resp.Message = "接收人不能为空"; return Json(resp); } if (string.IsNullOrEmpty(item.Title)) { resp.Success = false; resp.Code = RespCommon.RespCodeParamError; resp.Message = "标题不能为空"; return Json(resp); } if (string.IsNullOrEmpty(item.Body)) { resp.Success = false; resp.Code = RespCommon.RespCodeParamError; resp.Message = "正文不能为空"; return Json(resp); } var mailSend = new Common.MailSend(); mailSend.GID = Guid.NewGuid().ToString().Replace("-", ""); mailSend.SendTo = item.SendTo; mailSend.CCTo = item.CCTo; mailSend.Title = item.Title; mailSend.Body = item.Body; mailSend.SmtpConfig = item.SmtpConfig; mailSend.ShowName = item.ShowName; //附件处理 if (item.Attaches.Count > 0) { var list = new List(); foreach (var att in item.Attaches) { if (string.IsNullOrEmpty(att.AttachName)) { resp.Success = false; resp.Code = RespCommon.RespCodeParamError; resp.Message = $"附件名称不能为空"; return Json(resp); } if (string.IsNullOrEmpty(att.AttachContent)) { resp.Success = false; resp.Code = RespCommon.RespCodeParamError; resp.Message = $"附件内容不能为空:{att.AttachName}"; return Json(resp); } try { var bsArr = Convert.FromBase64String(att.AttachContent); var ext = Path.GetExtension(att.AttachName); var fileTmpName = DateTime.Now.Ticks.ToString(); var tempPath = Server.MapPath("~/Temp"); if (!Directory.Exists(tempPath)) { Directory.CreateDirectory(tempPath); } var fileFullPath = Path.Combine(tempPath, fileTmpName + ext); System.IO.File.WriteAllBytes(fileFullPath, bsArr); var attModel = new AttachFileModel(); attModel.FileName = att.AttachName; attModel.FilePath = fileFullPath; list.Add(attModel); } catch (Exception ex) { logger.Error($"附件还原失败:{ex.Message}"); logger.Error(ex.StackTrace); resp.Success = false; resp.Code = RespCommon.RespCodeParamError; resp.Message = $"附件还原失败:{att.AttachName}"; return Json(resp); } } mailSend.AttachFiles = JsonConvert.SerializeObject(list); } mailData.MailSend.Add(mailSend); } mailData.SaveChanges(); resp.Success = true; resp.Code = RespCommon.RespCodeSuccess; resp.Message = "提交成功"; return Json(resp); } [HttpGet] public ActionResult Test() { logger.Debug($"{DateTime.Now}"); return Content("ok"); } } }