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#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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<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);
}
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<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);
}
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");
}
}
}