You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

182 lines
6.3 KiB
C#

3 years ago
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();
//发送邮件
3 years ago
[HttpPost]
public ActionResult Send()
3 years ago
{
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}");
3 years ago
var smtpList = mailData.MailSendSmtp.AsNoTracking()
.Select(x => x.GID)
.ToList();
List<ReqSendMail> listToSend = null;
try
{
listToSend = JsonConvert.DeserializeObject<List<ReqSendMail>>(strJson);
}
catch
{
logger.Error($"JSON格式有误解析失败{strJson}");
resp.Success = false;
resp.Code = RespCommon.RespCodeParamError;
resp.Message = "JSON格式有误解析失败";
return Json(resp);
}
3 years ago
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))
3 years ago
{
resp.Success = false;
resp.Code = RespCommon.RespCodeParamError;
resp.Message = "正文不能为空";
3 years ago
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<AttachFileModel>();
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);
3 years ago
}
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");
}
3 years ago
}
}