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.

283 lines
12 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 DSWeb.Common.DB;
using log4net;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;
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);
}
}
}