using FluentFTP;
using YLErp.MailKit;
using YLErp.Modules.AppModule;
namespace YLErp.Helpers
{
///
/// 邮件发送帮助类
///
public class EmailHelper
{
static readonly Dictionary _dic;
static EmailHelper()
{
_dic = new Dictionary(StringComparer.OrdinalIgnoreCase);
}
public static string SendMailOfTradeConfirmBook(string mailTo, IEnumerable filesToAttach, string title, string body, bool isHtml = false)
{
if (string.IsNullOrWhiteSpace(title))
{
title = "交易确认书";
}
if (string.IsNullOrWhiteSpace(body))
{
body = "请查看附件交易确认书";
}
try
{
return SendMail(mailTo, title, body, isHtml, filesToAttach);
}
catch (Exception ex)
{
LogFactory.GetLogger().Error("邮件发送失败:" + title, ex);
return ex.Message;
}
}
public static string SendMail(string mailTo, string subject, string body, bool isBodyHtml = true, IEnumerable filesToAttach = null, string ccEmail = null, string mailFrom = null)
{
if (string.IsNullOrEmpty(mailTo))
{
throw new ArgumentException("不能为空", nameof(mailTo));
}
if (PS.Config.ErpElement.MailMessageRateLimit > 0)
{
var milliSeconds = 60d * 1000 / PS.Config.ErpElement.MailMessageRateLimit;
lock (_dic)
{
if (_dic.TryGetValue("sendEmail", out var dt))
{
while (dt < DateTime.Now && dt.AddMilliseconds(milliSeconds) > DateTime.Now)
{
Thread.Sleep(500);
}
}
_dic["sendEmail"] = DateTime.Now;
}
}
return doSendMail(mailTo, subject, body, isBodyHtml, filesToAttach, ccEmail);
}
private static string doSendMail(string mailTo, string subject, string body, bool isBodyHtml, IEnumerable filesToAttach, string ccEmail)
{
try
{
//去重
var toSet = mailTo.Split(new[] { ';', ',', ',' }, StringSplitOptions.RemoveEmptyEntries)
.ToHashSet(StringComparer.OrdinalIgnoreCase);
var mailToArr = toSet.ToArray();
LogFactory.GetLogger("邮件发送").Info($"开始发送邮件,mailTo={mailTo},subject={subject}");
string result = MailSender.SendApi(new MailSendingOption
{
MailTo = mailToArr,
Subject = subject,
Body = body,
IsBodyHtml = isBodyHtml,
FilesToAttach = filesToAttach,
CC = ccEmail
}, (name, info) => { LogFactory.GetLogger(name).Info(info); });
LogFactory.GetLogger("邮件发送").Info($"邮件发送完成,mailTo={mailTo},subject={subject},result={result}");
return string.Empty;
}
catch (Exception ex)
{
LogFactory.GetLogger("邮件发送").Error("邮件发送失败:" + subject, ex);
throw ex;
}
}
}
}