|
|
using DSWeb.Common.DB;
|
|
|
using log4net;
|
|
|
using Newtonsoft.Json;
|
|
|
using System;
|
|
|
using System.Collections.Generic;
|
|
|
using System.IO;
|
|
|
using System.Linq;
|
|
|
using System.Web;
|
|
|
using static DSWeb.Common.DB.CommonDataContext;
|
|
|
|
|
|
namespace DSWeb.Common.Helper
|
|
|
{
|
|
|
/// <summary>
|
|
|
/// 发送邮件辅助类
|
|
|
/// </summary>
|
|
|
public static class MailHelper
|
|
|
{
|
|
|
private static ILog logger = LogManager.GetLogger("MailHelper");
|
|
|
|
|
|
/// <summary>
|
|
|
/// 使用随机邮箱发送邮件
|
|
|
/// </summary>
|
|
|
/// <param name="title">邮件标题</param>
|
|
|
/// <param name="body">邮件内容</param>
|
|
|
/// <param name="sendTo">接收人(多个接收人用英文逗号或分号隔开)</param>
|
|
|
public static bool SendMail(string title, string body, string sendTo)
|
|
|
{
|
|
|
bool succ = false;
|
|
|
CommonDataContext commonDataContext = new CommonDataContext();
|
|
|
|
|
|
var smtpList = commonDataContext.MailSendSmtp.AsNoTracking().ToList();
|
|
|
MailSendSmtp smtp = null;
|
|
|
if (smtpList.Count > 0)
|
|
|
{
|
|
|
Random rnd = new Random();
|
|
|
int idx = rnd.Next(smtpList.Count);
|
|
|
smtp = smtpList[idx];
|
|
|
}
|
|
|
|
|
|
MailSend mailSend = new MailSend();
|
|
|
mailSend.SendTo = sendTo;
|
|
|
mailSend.Title = title;
|
|
|
mailSend.Body = body;
|
|
|
if (smtp != null)
|
|
|
{
|
|
|
mailSend.SendStatus = MailSend.MailSendStatusCreate;
|
|
|
mailSend.SmtpConfig = smtp.GID;
|
|
|
succ = true;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
mailSend.SendStatus = MailSend.MailSendStatusFail;
|
|
|
logger.Error("没有配置发送邮箱,邮件将不会发送");
|
|
|
}
|
|
|
commonDataContext.MailSend.Add(mailSend);
|
|
|
commonDataContext.SaveChanges();
|
|
|
|
|
|
return succ;
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 使用指定的邮箱发送邮件
|
|
|
/// </summary>
|
|
|
/// <param name="configId">指定smtp配置的id</param>
|
|
|
/// <param name="title">邮件标题</param>
|
|
|
/// <param name="body">邮件内容</param>
|
|
|
/// <param name="sendTo">接收人(多个接收人用英文逗号或分号隔开)</param>
|
|
|
/// <param name="showName">显示名称</param>
|
|
|
/// <param name="sender">自定义发件人(只有小部分邮箱支持)</param>
|
|
|
public static bool SendMail(string configId, string title, string body, string sendTo, string showName = null, string sender = null)
|
|
|
{
|
|
|
bool succ = false;
|
|
|
CommonDataContext commonDataContext = new CommonDataContext();
|
|
|
|
|
|
var smtp = commonDataContext.MailSendSmtp.AsNoTracking().FirstOrDefault(c => c.GID == configId);
|
|
|
MailSend mailSend = new MailSend();
|
|
|
mailSend.SendTo = sendTo;
|
|
|
mailSend.Title = title;
|
|
|
mailSend.Body = body;
|
|
|
mailSend.ShowName = showName;
|
|
|
mailSend.Sender = sender;
|
|
|
if (smtp != null)
|
|
|
{
|
|
|
mailSend.SendStatus = MailSend.MailSendStatusCreate;
|
|
|
mailSend.SmtpConfig = smtp.GID;
|
|
|
succ = true;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
mailSend.SendStatus = MailSend.MailSendStatusFail;
|
|
|
logger.Error("没有配置发送邮箱,邮件将不会发送");
|
|
|
}
|
|
|
commonDataContext.MailSend.Add(mailSend);
|
|
|
commonDataContext.SaveChanges();
|
|
|
|
|
|
return succ;
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 使用默认发件地址发送邮件
|
|
|
/// </summary>
|
|
|
/// <param name="title">邮件标题</param>
|
|
|
/// <param name="body">邮件内容</param>
|
|
|
/// <param name="sendTo">接收人(多个接收人用英文逗号或分号隔开)</param>
|
|
|
/// <returns></returns>
|
|
|
public static bool SendMailCommon(string title, string body, string sendTo)
|
|
|
{
|
|
|
return SendMail("4AB9E4EE-7E62-4E95-9168-F7CF0605E088", title, body, sendTo);
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 使用马士基发件地址发送邮件
|
|
|
/// </summary>
|
|
|
/// <param name="title">邮件标题</param>
|
|
|
/// <param name="body">邮件内容</param>
|
|
|
/// <param name="sendTo">接收人(多个接收人用英文逗号或分号隔开)</param>
|
|
|
/// <returns></returns>
|
|
|
public static bool SendMailMaersk(string title, string body, string sendTo)
|
|
|
{
|
|
|
return SendMail("37F7BF61-41F1-4B77-A1B8-41BAFEDF5AF1", title, body, sendTo);
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 使用发票转发发件地址发送邮件
|
|
|
/// </summary>
|
|
|
/// <param name="title">邮件标题</param>
|
|
|
/// <param name="body">邮件内容</param>
|
|
|
/// <param name="sendTo">接收人(多个接收人用英文逗号或分号隔开)</param>
|
|
|
/// <returns></returns>
|
|
|
public static bool SendMailInvoice(string title, string body, string sendTo)
|
|
|
{
|
|
|
return SendMail("4E07BC66-0E0A-4A97-A3B5-EC6516FAE24A", title, body, sendTo, "大简云发票平台");
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 发送发票邮件
|
|
|
/// </summary>
|
|
|
/// <param name="invId">发票记录Id</param>
|
|
|
/// <returns></returns>
|
|
|
//public static bool SendMailInvoiceRecord(string invId)
|
|
|
//{
|
|
|
// return SendMailInvoiceRecordOther(invId, null);
|
|
|
//}
|
|
|
/// <summary>
|
|
|
/// 发送发票邮件
|
|
|
/// </summary>
|
|
|
/// <param name="invId">发票记录Id</param>
|
|
|
/// <param name="email">优先使用参数的邮箱,若参数未null时使用发票记录的邮箱</param>
|
|
|
/// <returns></returns>
|
|
|
//public static bool SendMailInvoiceRecordOther(string invId, string email)
|
|
|
//{
|
|
|
// InvoiceDbContext invDB = new InvoiceDbContext();
|
|
|
// CommonDataContext comDB = new CommonDataContext();
|
|
|
// var inv = invDB.Invoices.AsNoTracking().FirstOrDefault(i => i.GID == invId);
|
|
|
// if (inv != null && inv.Status == InvoiceRecord.StatusIssued && (!string.IsNullOrEmpty(email) || !string.IsNullOrEmpty(inv.Email)))
|
|
|
// {
|
|
|
// var cfg = comDB.ConfigDatas.AsNoTracking().FirstOrDefault(cd => cd.Module == ConfigData.ModuleInvoice && cd.Category == ConfigData.CateMailSubject && cd.UserId == inv.UserId);
|
|
|
// var title = "";
|
|
|
// if (cfg != null)
|
|
|
// {
|
|
|
// var subjectArr = JsonConvert.DeserializeObject<string[]>(cfg.JsonData);
|
|
|
// #region 标题拼接
|
|
|
// string mailTitle = string.Empty;
|
|
|
|
|
|
// if (subjectArr.Contains("SalerName"))
|
|
|
// {
|
|
|
// mailTitle += "销售方:" + inv.SalerName;
|
|
|
// }
|
|
|
|
|
|
// if (subjectArr.Contains("Total"))
|
|
|
// {
|
|
|
// if (mailTitle.Length > 0)
|
|
|
// {
|
|
|
// mailTitle += "---";
|
|
|
// }
|
|
|
// mailTitle += "金额:" + inv.Total;
|
|
|
// }
|
|
|
|
|
|
// if (subjectArr.Contains("InvoiceDate"))
|
|
|
// {
|
|
|
// if (mailTitle.Length > 0)
|
|
|
// {
|
|
|
// mailTitle += "---";
|
|
|
// }
|
|
|
// mailTitle += "开票日期:" + inv.InvoiceDate.Value.ToString("yyyy年MM月dd日");
|
|
|
// }
|
|
|
|
|
|
// if (subjectArr.Contains("InvNum"))
|
|
|
// {
|
|
|
// if (mailTitle.Length > 0)
|
|
|
// {
|
|
|
// mailTitle += "---";
|
|
|
// }
|
|
|
// mailTitle += "发票号码:" + inv.InvNum;
|
|
|
// }
|
|
|
|
|
|
// if (subjectArr.Contains("InvoiceLine"))
|
|
|
// {
|
|
|
// if (mailTitle.Length > 0)
|
|
|
// {
|
|
|
// mailTitle += "---";
|
|
|
// }
|
|
|
|
|
|
// switch (inv.InvoiceLine)
|
|
|
// {
|
|
|
// case "p":
|
|
|
// mailTitle += "发票种类:普通发票(电票)";
|
|
|
// break;
|
|
|
// case "c":
|
|
|
// mailTitle += "发票种类:普通发票(纸票)";
|
|
|
// break;
|
|
|
// case "s":
|
|
|
// mailTitle += "发票种类:专用发票";
|
|
|
// break;
|
|
|
// case "e":
|
|
|
// mailTitle += "发票种类:收购发票(电票)";
|
|
|
// break;
|
|
|
// case "f":
|
|
|
// mailTitle += "发票种类:收购发票(纸质)";
|
|
|
// break;
|
|
|
// }
|
|
|
|
|
|
// }
|
|
|
|
|
|
// if (subjectArr.Contains("Clerk"))
|
|
|
// {
|
|
|
// if (mailTitle.Length > 0)
|
|
|
// {
|
|
|
// mailTitle += "---";
|
|
|
// }
|
|
|
// mailTitle += "开票人:" + inv.Clerk;
|
|
|
// }
|
|
|
|
|
|
// if (subjectArr.Contains("BuyerName"))
|
|
|
// {
|
|
|
// if (mailTitle.Length > 0)
|
|
|
// {
|
|
|
// mailTitle += "---";
|
|
|
// }
|
|
|
// mailTitle += "购货方名称:" + inv.BuyerName;
|
|
|
// }
|
|
|
// #endregion
|
|
|
|
|
|
// title = $"您收到一张电子发票:{mailTitle}";
|
|
|
// }
|
|
|
// else
|
|
|
// {
|
|
|
// title = $"您收到一张电子发票:销售方:{inv.SalerName}---金额:{inv.Total}---开票日期:{inv.InvoiceDate.Value.ToString("yyyy年MM月dd日")}";
|
|
|
// }
|
|
|
|
|
|
// //读取html模板,填充数据
|
|
|
// var htmlFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Areas/Invoice/Content/InvoiceMailTemplate.html");
|
|
|
// var content = File.ReadAllText(htmlFile);
|
|
|
// content = content.Replace("$VIEW_URL$", inv.PictureUrl);
|
|
|
// content = content.Replace("$CUST_NAME$", inv.BuyerName);
|
|
|
// content = content.Replace("$INV_DATA$", inv.InvoiceDate.Value.ToString("yyyy年MM月dd日"));
|
|
|
// content = content.Replace("$TOTAL$", inv.Total.ToString());
|
|
|
// content = content.Replace("$INV_NUM$", inv.InvNum);
|
|
|
// content = content.Replace("$INV_CODE$", inv.InvCode);
|
|
|
// content = content.Replace("$PDF_URL$", inv.PdfUrl);
|
|
|
|
|
|
// SendMailInvoice(title, content, string.IsNullOrEmpty(email) ? inv.Email : email);
|
|
|
// return true;
|
|
|
// }
|
|
|
|
|
|
// return false;
|
|
|
//}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 发送邮件-运踪
|
|
|
/// </summary>
|
|
|
/// <param name="title">邮件标题</param>
|
|
|
/// <param name="body">邮件内容</param>
|
|
|
/// <param name="sendTo">接收人(多个接收人用英文逗号或分号隔开)</param>
|
|
|
/// <param name="showName">发件人显示名称</param>
|
|
|
/// <param name="sender">发件人显示邮箱地址(部分邮箱支持)</param>
|
|
|
/// <returns></returns>
|
|
|
public static bool SendMailBillTrace(string title, string body, string sendTo, string showName = null, string sender = null)
|
|
|
{
|
|
|
return SendMail("F48AA7593827456BB0DC12D4D8D13976", title, body, sendTo, showName, sender);
|
|
|
}
|
|
|
|
|
|
}
|
|
|
} |