Basf_FCL/FCL/BLL/Common/MailHelper.cs

929 lines
44 KiB
C#
Raw Normal View History

2024-05-08 10:17:02 +08:00
using Model;
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Globalization;
using System.Linq;
using System.Net.Mail;
using System.IO;
using System.Text;
namespace BLL.Common
{
public class MailHelper
{
/// <summary>
/// 私有构造方法,不允许创建实例
/// </summary>
private MailHelper()
{
// TODO: Add constructor logic here
}
/// <summary>
/// SendNetMail(须配置SMTP服务器地址)(多个收件人、抄送人、附件其参数用";"隔开,最后一个不能有";")
/// </summary>
/// <param name="mailFrom">发件人</param>
/// <param name="mailTo">收件人(多个收件人用""隔开,最后一个不能有"")</param>
/// <param name="mailSubject">主题</param>
/// <param name="mailBody">内容</param>
/// <param name="mailAttch">附件(多个附件用""隔开,最后一个不能有""</param>
/// <param name="mailCode">密码(对加密过的)</param>
/// <param name="mailPriority">优先级</param>
/// <param name="mailCC">抄送(多个抄送人用""隔开,最后一个不能有"")</param>
/// <param name="resultMessage">输出信息</param>
public static bool SendNetMail1(EmailPop ps, string mailFrom, string[] mailTo, string mailSubject, string mailBody, string mailAttch, string mailCode, string mailPriority, string[] mailCC, List<EmailUser> emailUser, out string resultMessage)
{
var englishmonth = DateTime.Now.ToString("MMMM", CultureInfo.CreateSpecificCulture("en-GB"));
bool result = true;
//初始化输出参数
resultMessage = string.Empty;
List<Model.SendEmail> sendList = new List<Model.SendEmail>();
//发件人和收件人不为空
if (string.IsNullOrEmpty(ps.EmailYx) || mailTo == null)
{
resultMessage = "Please Fill Email Addresser Or Addressee!";
return false;
}
if (mailTo == null || mailTo.Length == 0)
{
resultMessage = "The recipient is empty!";
return false;
}
if (!string.IsNullOrEmpty(ps.EmailYx)) mailFrom = ps.EmailYx;
MailMessage email = new MailMessage();
//发件人地址
email.From = new MailAddress(mailFrom, ps.EmailYx);
//收件人
if (mailTo != null && mailTo.Length > 0)
{
foreach (string send in mailTo)
{
if (!String.IsNullOrEmpty(send))
{
email.To.Add(send);
}
}
}
//加抄送
if (mailCC != null && mailCC.Length > 0)
{
foreach (string cc in mailCC)
{
if (!String.IsNullOrEmpty(cc))
{
//email.To.Add(cc);
email.CC.Add(cc);
}
}
}
//email.To.Add(send);
//主题
2024-09-18 10:36:26 +08:00
email.Subject = mailSubject.Replace("\r","").Replace("\n", "");
2024-05-08 10:17:02 +08:00
//附件
if (!string.IsNullOrEmpty(mailAttch))
{
string[] attachments = mailAttch.Split(';');
foreach (string file in attachments)
{
Attachment attach = new Attachment(file, System.Net.Mime.MediaTypeNames.Application.Octet);
//为附件添加发送时间
System.Net.Mime.ContentDisposition disposition = attach.ContentDisposition;
disposition.CreationDate = System.IO.File.GetCreationTime(file);
disposition.ModificationDate = System.IO.File.GetLastWriteTime(file);
disposition.ReadDate = System.IO.File.GetLastAccessTime(file);
//添加附件
email.Attachments.Add(attach);
}
}
//优先级
email.Priority = (mailPriority == "High") ? System.Net.Mail.MailPriority.High : System.Net.Mail.MailPriority.Normal;
//内容编码、格式
email.BodyEncoding = Encoding.UTF8;
email.IsBodyHtml = true;
//SMTP服务器
SmtpClient client = new SmtpClient(ps.EmailFwq);
client.UseDefaultCredentials = true;
//验证Credentials 凭证)
client.Credentials = new System.Net.NetworkCredential(mailFrom, ps.EmailPass);
//处理待发的电子邮件的方法 (Delivery 发送,传输)
client.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;
if (!string.IsNullOrEmpty(mailCode))
{
string[] parm = mailCode.Split('|');
//内容
email.Body = mailBody.Replace("{FO No}", parm[0]).Replace("{Discipline}", parm[1]).Replace("{Contractor}", parm[2]).Replace("{Buyer}", parm[3]).Replace("{Contract Administrator}", parm[4]).Replace("{Main Coordinator}", parm[5]).Replace("{User Representative}", parm[6]).Replace("{Expire Date}", parm[7]);
}
else
{
email.Body = mailBody;
}
//循环发送邮件
try
{
//发送邮件
client.Send(email);
if (mailTo != null && mailTo.Length > 0)
{
foreach (string send in mailTo)
{
if (!String.IsNullOrEmpty(send))
{
Model.SendEmail newSendEmail = new Model.SendEmail();
newSendEmail.EmailId = Guid.NewGuid().ToString();
newSendEmail.EmailTile = mailSubject;
if (string.IsNullOrEmpty(mailCode))
{
newSendEmail.EmailContent = ReplaceHtmlTag(mailBody);
}
else
{
string[] parm = mailCode.Split('|');
newSendEmail.EmailContent = ReplaceHtmlTag(mailBody).Replace("{FO No}", parm[0]).Replace("{Discipline}", parm[1]).Replace("{Contractor}", parm[2]).Replace("{Buyer}", parm[3]).Replace("{Contract Administrator}", parm[4]).Replace("{Main Coordinator}", parm[5]).Replace("{User Representative}", parm[6]).Replace("{Expire Date}", parm[7]);
}
newSendEmail.EmailURL = send;
newSendEmail.EmailName = send;
newSendEmail.EmailStatus = "发送成功";
newSendEmail.CreateTime = DateTime.Now;
newSendEmail.CreateName = "sys";
sendList.Add(newSendEmail);
}
}
SqlBulkHelper.BulkInsert(SqlBulkHelper.GetCon(), "SendEmail", sendList);
result= true;
}
}
catch (Exception ex)
{
if (mailTo != null && mailTo.Length > 0)
{
foreach (string send in mailTo)
{
if (!String.IsNullOrEmpty(send))
{
Model.SendEmail newSendEmail = new Model.SendEmail();
newSendEmail.EmailId = Guid.NewGuid().ToString();
newSendEmail.EmailTile = mailSubject;
if (string.IsNullOrEmpty(mailCode))
{
newSendEmail.EmailContent = ReplaceHtmlTag(mailBody);
}
else
{
string[] parm = mailCode.Split('|');
newSendEmail.EmailContent = ReplaceHtmlTag(mailBody).Replace("{FO No}", parm[0]).Replace("{Discipline}", parm[1]).Replace("{Contractor}", parm[2]).Replace("{Buyer}", parm[3]).Replace("{Contract Administrator}", parm[4]).Replace("{Main Coordinator}", parm[5]).Replace("{User Representative}", parm[6]).Replace("{Expire Date}", parm[7]);
}
newSendEmail.EmailURL = send;
newSendEmail.EmailName = send;
newSendEmail.EmailStatus = "发送失败";
newSendEmail.CreateTime = DateTime.Now;
newSendEmail.CreateName = "sys";
sendList.Add(newSendEmail);
resultMessage = ex.Message;
}
}
SqlBulkHelper.BulkInsert(SqlBulkHelper.GetCon(), "SendEmail", sendList);
result= false;
}
}
finally
{
if (email.Attachments.Count > 0)
{
//及时释放占用的资源
email.Attachments.Clear();
email.Attachments.Dispose();
}
}
return result;
}
/// <summary>
/// SendNetMail(须配置SMTP服务器地址)(多个收件人、抄送人、附件其参数用";"隔开,最后一个不能有";")
/// </summary>
/// <param name="mailFrom">发件人</param>
/// <param name="mailTo">收件人(多个收件人用""隔开,最后一个不能有"")</param>
/// <param name="mailSubject">主题</param>
/// <param name="mailBody">内容</param>
/// <param name="mailAttch">附件(多个附件用""隔开,最后一个不能有""</param>
/// <param name="mailCode">密码(对加密过的)</param>
/// <param name="mailPriority">优先级</param>
/// <param name="mailCC">抄送(多个抄送人用""隔开,最后一个不能有"")</param>
/// <param name="sendNum">发送次数</param>
/// <param name="resultMessage">输出信息</param>
public static bool SendNetMail2(EmailPop ps, string mailFrom, string[] mailTo, string mailSubject, string mailBody, string mailPriority, string[] mailCC, string sendNum, out string resultMessage)
{
var englishmonth = DateTime.Now.ToString("MMMM", CultureInfo.CreateSpecificCulture("en-GB"));
bool result = true;
//初始化输出参数
resultMessage = string.Empty;
List<Model.SendEmail> sendList = new List<Model.SendEmail>();
//发件人和收件人不为空
if (string.IsNullOrEmpty(ps.EmailYx) || mailTo == null)
{
resultMessage = "Please Fill Email Addresser Or Addressee!";
return false;
}
if (mailTo == null || mailTo.Length == 0)
{
resultMessage = "The recipient is empty!";
return false;
}
if (!string.IsNullOrEmpty(ps.EmailYx)) mailFrom = ps.EmailYx;
MailMessage email = new MailMessage();
//发件人地址
email.From = new MailAddress(mailFrom, ps.EmailYx);
//收件人
if (mailTo != null && mailTo.Length > 0)
{
foreach (string send in mailTo)
{
if (!String.IsNullOrEmpty(send))
{
email.To.Add(send);
}
}
}
//加抄送
if (mailCC != null && mailCC.Length > 0)
{
foreach (string cc in mailCC)
{
if (!String.IsNullOrEmpty(cc))
{
//email.To.Add(cc);
email.CC.Add(cc);
}
}
}
//email.To.Add(send);
//主题
2024-09-18 10:36:26 +08:00
email.Subject = mailSubject.Replace("\r", "").Replace("\n", "");
2024-05-08 10:17:02 +08:00
//附件
//优先级
email.Priority = (mailPriority == "High") ? System.Net.Mail.MailPriority.High : System.Net.Mail.MailPriority.Normal;
//内容编码、格式
email.BodyEncoding = Encoding.UTF8;
email.IsBodyHtml = true;
//SMTP服务器
SmtpClient client = new SmtpClient(ps.EmailFwq);
client.UseDefaultCredentials = true;
//验证Credentials 凭证)
client.Credentials = new System.Net.NetworkCredential(mailFrom, ps.EmailPass);
//处理待发的电子邮件的方法 (Delivery 发送,传输)
client.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;
email.Body = mailBody;
//循环发送邮件
try
{
//发送邮件
client.Send(email);
if (mailTo != null && mailTo.Length > 0)
{
foreach (string send in mailTo)
{
if (!String.IsNullOrEmpty(send))
{
Model.SendEmail newSendEmail = new Model.SendEmail();
newSendEmail.EmailId = Guid.NewGuid().ToString();
newSendEmail.EmailTile = mailSubject + sendNum;
newSendEmail.EmailContent = ReplaceHtmlTag(mailBody) + sendNum;
newSendEmail.EmailURL = send;
newSendEmail.EmailName = send;
newSendEmail.EmailStatus = "发送成功";
newSendEmail.CreateTime = DateTime.Now;
newSendEmail.CreateName = "sys";
sendList.Add(newSendEmail);
}
}
SqlBulkHelper.BulkInsert(SqlBulkHelper.GetCon(), "SendEmail", sendList);
result = true;
}
}
catch (Exception ex)
{
if (mailTo != null && mailTo.Length > 0)
{
foreach (string send in mailTo)
{
if (!String.IsNullOrEmpty(send))
{
Model.SendEmail newSendEmail = new Model.SendEmail();
newSendEmail.EmailId = Guid.NewGuid().ToString();
newSendEmail.EmailTile = mailSubject + sendNum;
newSendEmail.EmailContent = ReplaceHtmlTag(mailBody);
newSendEmail.EmailURL = send;
newSendEmail.EmailName = send;
newSendEmail.EmailStatus = "发送失败";
newSendEmail.CreateTime = DateTime.Now;
newSendEmail.CreateName = "sys";
sendList.Add(newSendEmail);
resultMessage = ex.Message;
}
}
SqlBulkHelper.BulkInsert(SqlBulkHelper.GetCon(), "SendEmail", sendList);
result = false;
}
}
finally
{
if (email.Attachments.Count > 0)
{
//及时释放占用的资源
email.Attachments.Clear();
email.Attachments.Dispose();
}
}
return result;
}
/// <summary>
/// SendNetMail(须配置SMTP服务器地址)(多个收件人、抄送人、附件其参数用";"隔开,最后一个不能有";")
/// </summary>
/// <param name="ps">配置SMTP的服务器</param>
/// <param name="myPram">参数</param>
/// <param name="title"></param>
/// <param name="mailTo">收件人(多个收件人用""隔开,最后一个不能有"")</param>
/// <param name="mailCC">抄送(多个抄送人用""隔开,最后一个不能有"")</param>
/// <param name="resultMessage"></param>
/// <returns></returns>
public static bool SendPunishSesMail(EmailPop ps, NameValueCollection myPram, string title, string[] mailTo, string[] mailCC, out string resultMessage)
{
var emailTemplate = Funs.DB.SendEmailTemplate.Where(x => x.EmailName.Contains(title));
bool result = true;
//初始化输出参数
resultMessage = string.Empty;
List<Model.SendEmail> sendList = new List<Model.SendEmail>();
//发件人和收件人不为空
if (string.IsNullOrEmpty(ps.EmailYx) || mailTo == null)
{
resultMessage = "Please Fill Email Addresser Or Addressee!";
return false;
}
if (mailTo == null || mailTo.Length == 0)
{
resultMessage = "The recipient is empty!";
return false;
}
string mailFrom = string.Empty;
if (!string.IsNullOrEmpty(ps.EmailYx)) mailFrom = ps.EmailYx;
MailMessage email = new MailMessage();
//发件人地址
email.From = new MailAddress(mailFrom, ps.EmailYx);
//收件人
if (mailTo != null && mailTo.Length > 0)
{
foreach (string send in mailTo)
{
if (!String.IsNullOrEmpty(send))
{
email.To.Add(send);
}
}
}
//email.To.Add("408299694@qq.com");
//加抄送
if (mailCC != null && mailCC.Length > 0)
{
foreach (string cc in mailCC)
{
if (!String.IsNullOrEmpty(cc))
{
//email.To.Add(cc);
email.CC.Add(cc);
}
}
}
//优先级
email.Priority = System.Net.Mail.MailPriority.Normal;
//内容编码、格式
email.BodyEncoding = Encoding.UTF8;
email.IsBodyHtml = true;
//SMTP服务器
SmtpClient client = new SmtpClient(ps.EmailFwq);
client.UseDefaultCredentials = true;
//验证Credentials 凭证)
client.Credentials = new System.Net.NetworkCredential(mailFrom, ps.EmailPass);
//处理待发的电子邮件的方法 (Delivery 发送,传输)
client.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;
//string[] parm = mailCode.Split('|');
//内容
string emailContext = emailTemplate.Select(x => x.EmailContext).FirstOrDefault();
email.Body = FineUIPro.Web.common.TemplateHelper.BulidByFile2(emailContext, myPram);
//主题
string mailSubject= emailTemplate.Select(x => x.EmailName).FirstOrDefault();
email.Subject = FineUIPro.Web.common.TemplateHelper.BulidByFile2(mailSubject, myPram);
//循环发送邮件
try
{
//发送邮件
client.Send(email);
if (mailTo != null && mailTo.Length > 0)
{
foreach (string send in mailTo)
{
if (!String.IsNullOrEmpty(send))
{
Model.SendEmail newSendEmail = new Model.SendEmail();
newSendEmail.EmailId = Guid.NewGuid().ToString();
newSendEmail.EmailTile = email.Subject;
newSendEmail.EmailContent = email.Body;
newSendEmail.EmailURL = send;
newSendEmail.EmailName = send;
newSendEmail.EmailStatus = "发送成功";
newSendEmail.CreateTime = DateTime.Now;
newSendEmail.CreateName = "sys";
sendList.Add(newSendEmail);
}
}
SqlBulkHelper.BulkInsert(SqlBulkHelper.GetCon(), "SendEmail", sendList);
result = true;
}
}
catch (Exception ex)
{
if (mailTo != null && mailTo.Length > 0)
{
foreach (string send in mailTo)
{
if (!String.IsNullOrEmpty(send))
{
Model.SendEmail newSendEmail = new Model.SendEmail();
newSendEmail.EmailId = Guid.NewGuid().ToString();
newSendEmail.EmailTile = email.Subject;
newSendEmail.EmailContent = email.Body;
newSendEmail.EmailURL = send;
newSendEmail.EmailName = send;
newSendEmail.EmailStatus = "发送失败";
newSendEmail.CreateTime = DateTime.Now;
newSendEmail.CreateName = "sys";
sendList.Add(newSendEmail);
resultMessage = ex.Message;
}
}
SqlBulkHelper.BulkInsert(SqlBulkHelper.GetCon(), "SendEmail", sendList);
result = false;
}
}
finally
{
if (email.Attachments.Count > 0)
{
//及时释放占用的资源
email.Attachments.Clear();
email.Attachments.Dispose();
}
}
return result;
}
/// <summary>
/// SendNetMail(须配置SMTP服务器地址)(多个收件人、抄送人、附件其参数用";"隔开,最后一个不能有";")
/// </summary>
/// <param name="mailFrom">发件人</param>
/// <param name="mailTo">收件人(多个收件人用""隔开,最后一个不能有"")</param>
/// <param name="mailSubject">主题</param>
/// <param name="mailBody">内容</param>
/// <param name="mailAttch">附件(多个附件用""隔开,最后一个不能有""</param>
/// <param name="mailCode">密码(对加密过的)</param>
/// <param name="mailPriority">优先级</param>
/// <param name="mailCC">抄送(多个抄送人用""隔开,最后一个不能有"")</param>
/// <param name="resultMessage">输出信息</param>
public static bool SendPunishMail(EmailPop ps, string mailFrom, string[] mailTo, string mailSubject, string mailBody, string mailAttch, string mailCode, string mailPriority, string[] mailCC,List<View_EMC_Punishment> pList, out string resultMessage)
{
bool result = true;
//初始化输出参数
resultMessage = string.Empty;
List<Model.SendEmail> sendList = new List<Model.SendEmail>();
//发件人和收件人不为空
if (string.IsNullOrEmpty(ps.EmailYx) || mailTo == null)
{
resultMessage = "Please Fill Email Addresser Or Addressee!";
return false;
}
if (mailTo == null || mailTo.Length == 0)
{
resultMessage = "The recipient is empty!";
return false;
}
if (!string.IsNullOrEmpty(ps.EmailYx)) mailFrom = ps.EmailYx;
MailMessage email = new MailMessage();
//发件人地址
email.From = new MailAddress(mailFrom, ps.EmailYx);
//收件人
if (mailTo != null && mailTo.Length > 0)
{
foreach (string send in mailTo)
{
if (!String.IsNullOrEmpty(send))
{
email.To.Add(send);
}
}
}
//email.To.Add("408299694@qq.com");
//加抄送
if (mailCC != null && mailCC.Length > 0)
{
foreach (string cc in mailCC)
{
if (!String.IsNullOrEmpty(cc))
{
//email.To.Add(cc);
email.CC.Add(cc);
}
}
}
//附件
if (!string.IsNullOrEmpty(mailAttch))
{
string[] attachments = mailAttch.Split(';');
foreach (string file in attachments)
{
Attachment attach = new Attachment(file, System.Net.Mime.MediaTypeNames.Application.Octet);
//Attachment attach = new Attachment(Directory.GetCurrentDirectory );
//email.Attachments.Add(newAttachment("Hydrangeas.jpg"));
//为附件添加发送时间
System.Net.Mime.ContentDisposition disposition = attach.ContentDisposition;
disposition.CreationDate = System.IO.File.GetCreationTime(file);
disposition.ModificationDate = System.IO.File.GetLastWriteTime(file);
disposition.ReadDate = System.IO.File.GetLastAccessTime(file);
//添加附件
email.Attachments.Add(attach);
}
}
//优先级
email.Priority = (mailPriority == "High") ? System.Net.Mail.MailPriority.High : System.Net.Mail.MailPriority.Normal;
//内容编码、格式
email.BodyEncoding = Encoding.UTF8;
email.IsBodyHtml = true;
//SMTP服务器
SmtpClient client = new SmtpClient(ps.EmailFwq);
client.UseDefaultCredentials = true;
//验证Credentials 凭证)
client.Credentials = new System.Net.NetworkCredential(mailFrom, ps.EmailPass);
//处理待发的电子邮件的方法 (Delivery 发送,传输)
client.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;
//string[] parm = mailCode.Split('|');
string enDate = string.Empty;
string pDate = string.Empty;
string chDate = string.Empty;
string punishList = string.Empty;
if (mailBody != string.Empty)
{
DateTime date = Convert.ToDateTime(mailCode);
enDate = date.ToString("MMMM.yyyy", System.Globalization.CultureInfo.CreateSpecificCulture("en-GB"));
pDate = date.ToString("yyyy-MM");
chDate = string.Format("{0:Y}", date);
punishList = "<table border=1><tr><td> Date</td><td>Time</td><td>Contract No.</td><td>Contractor</td><td>Discipline</td><td>Location</td><td>Violation Description</td><td>Company(RMB)</td><td>Individual(RMB)</td><td>Backcharge(RMB)</td><td>Violation Degree</td><td>Contract Admin</td><td>Main Coordinator</td><td>M.C.Dept</td><td>User Representative</td><td>BYC RU</td><td>Violation Inspector</td><td>Inspection Department</td><td>Backcharge SES No.</td><td>Backcharge Completion Date</td> </tr> ";
foreach (var p in pList)
{
string company = p.Company.HasValue ? p.Company.Value.ToString("0.00") : "";
string individual= p.Individual.HasValue ? p.Individual.Value.ToString("0.00") : "";
punishList = punishList + "<tr><td>"+ p.PunishDate.Value.ToString("yyyy/MM/dd") + "</td><td>" + p.PunishTime + "</td><td>" + p.FO_NO + "</td><td>" + p.Contractor + "</td><td>" + p.Discipline + "</td><td>" + p.Location + "</td><td>" + p.Description + "</td><td>" + company + "</td><td>" + individual + "</td><td>" + p.Backcharge.Value.ToString("0.00") + "</td><td>" + p.ViolationDegree + "</td><td>" + p.Contract_Admin + "</td><td>" + p.Main_Coordinator + "</td><td>" + p.MCDept + "</td><td>" + p.User_Representative + "</td><td>" + p.BYCRU + "</td><td>" + p.Violation_Inspector_Name + "</td><td>" + p.InspectionDep + "</td><td>" + p.SES_No + "</td><td>" + p.CompletionDate + "</td></tr>";
//punishList = punishList + "<p> Date" + p.PunishDate + "Time" + p.PunishTime + "Contract No." + p.FO_NO + "Contractor" + p.Contractor + "Discipline" + p.Discipline + "Location" + p.Location + "Violation Description" + p.Description + "Company(RMB)" + p.Company.ToString("0.00") + "Individual(RMB)" + p.Individual.ToString("0.00") + "Backcharge(RMB)" + p.Backcharge.Value.ToString("0.00") + "Violation Degree" + p.ViolationDegree + "Contract Admin" + p.Contract_Admin + "Main Coordinator" + p.Main_Coordinator + "M.C.Dept" + p.MCDept + "User Representative" + p.User_Representative + "BYC RU" + p.BYCRU + "Violation Inspector" + p.Violation_Inspector_Name + "Inspection Department" + p.InspectionDep + "Backcharge SES No." + p.SES_No + "Backcharge Completion Date" + p.CompletionDate + "</p>";
}
punishList = punishList + "</table>";
}
//主题
email.Subject = mailSubject.Replace("{PDate}", pDate);
//内容
email.Body = mailBody.Replace("{EnDate}", enDate).Replace("{ChDate}", chDate).Replace("{PunishList}", punishList);
//循环发送邮件
try
{
//发送邮件
client.Send(email);
if (mailTo != null && mailTo.Length > 0)
{
foreach (string send in mailTo)
{
if (!String.IsNullOrEmpty(send))
{
Model.SendEmail newSendEmail = new Model.SendEmail();
newSendEmail.EmailId = Guid.NewGuid().ToString();
newSendEmail.EmailTile = mailSubject.Replace("{PDate}", pDate);
newSendEmail.EmailContent = ReplaceHtmlTag(mailBody).Replace("{EnDate}", enDate).Replace("{ChDate}", chDate).Replace("{PunishList}", punishList);
newSendEmail.EmailURL = send;
newSendEmail.EmailName = send;
newSendEmail.EmailStatus = "发送成功";
newSendEmail.CreateTime = DateTime.Now;
newSendEmail.CreateName = "sys";
sendList.Add(newSendEmail);
}
}
SqlBulkHelper.BulkInsert(SqlBulkHelper.GetCon(), "SendEmail", sendList);
result = true;
}
}
catch (Exception ex)
{
if (mailTo != null && mailTo.Length > 0)
{
foreach (string send in mailTo)
{
if (!String.IsNullOrEmpty(send))
{
Model.SendEmail newSendEmail = new Model.SendEmail();
newSendEmail.EmailId = Guid.NewGuid().ToString();
newSendEmail.EmailTile = mailSubject.Replace("{PDate}", pDate);
newSendEmail.EmailContent = ReplaceHtmlTag(mailBody).Replace("{EnDate}", enDate).Replace("{ChDate}", chDate).Replace("{PunishList}", punishList);
newSendEmail.EmailURL = send;
newSendEmail.EmailName = send;
newSendEmail.EmailStatus = "发送失败";
newSendEmail.CreateTime = DateTime.Now;
newSendEmail.CreateName = "sys";
sendList.Add(newSendEmail);
resultMessage = ex.Message;
}
}
SqlBulkHelper.BulkInsert(SqlBulkHelper.GetCon(), "SendEmail", sendList);
result = false;
}
}
finally
{
if (email.Attachments.Count > 0)
{
//及时释放占用的资源
email.Attachments.Clear();
email.Attachments.Dispose();
}
}
return result;
}
/// <summary>
/// SendNetMail(须配置SMTP服务器地址)(多个收件人、抄送人、附件其参数用";"隔开,最后一个不能有";")
/// </summary>
/// <param name="mailFrom">发件人</param>
/// <param name="mailTo">收件人(多个收件人用""隔开,最后一个不能有"")</param>
/// <param name="mailSubject">主题</param>
/// <param name="mailBody">内容</param>
/// <param name="mailAttch">附件(多个附件用""隔开,最后一个不能有""</param>
/// <param name="mailCode">密码(对加密过的)</param>
/// <param name="mailPriority">优先级</param>
/// <param name="mailCC">抄送(多个抄送人用""隔开,最后一个不能有"")</param>
/// <param name="resultMessage">输出信息</param>
public static bool SendNetMail(EmailPop ps, string mailFrom, string[] mailTo, string mailSubject, string mailBody, string mailAttch, string mailCode, string mailPriority, string[] mailCC, List<EmailUser> emailUser, out string resultMessage)
{
var englishmonth = DateTime.Now.ToString("MMMM", CultureInfo.CreateSpecificCulture("en-GB"));
bool result = true;
//初始化输出参数
resultMessage = string.Empty;
List<Model.SendEmail> sendList = new List<Model.SendEmail>();
//发件人和收件人不为空
if (string.IsNullOrEmpty(ps.EmailYx) || mailTo == null)
{
resultMessage = "Please Fill Email Addresser Or Addressee!";
return false;
}
if (mailTo == null || mailTo.Length == 0)
{
resultMessage = "The recipient is empty!";
return false;
}
if (!string.IsNullOrEmpty(ps.EmailYx)) mailFrom = ps.EmailYx;
MailMessage email;
//SMTP服务器
SmtpClient client = new SmtpClient(ps.EmailFwq);
client.UseDefaultCredentials = true;
//验证Credentials 凭证)
client.Credentials = new System.Net.NetworkCredential(mailFrom, ps.EmailPass);
//处理待发的电子邮件的方法 (Delivery 发送,传输)
client.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;
//循环发送邮件
foreach (var send in mailTo)
{
email = new MailMessage();
//加抄送
if (mailCC != null && mailCC.Length > 0)
{
// 经理邮箱
string leaderMail = string.Empty;
// 总监邮箱
string directorMail = string.Empty;
var user = from x in Funs.DB.Sys_User where x.Email == send select x;
var depart = (from x in Funs.DB.Base_Depart where x.DepartId == user.FirstOrDefault().DepartId select x).ToList();
if (depart.Count() > 0 && depart.FirstOrDefault().DepartLeader != null && depart.FirstOrDefault().DepartLeader != "")
{
var leader = from x in Funs.DB.Sys_User where x.UserId == depart.FirstOrDefault().DepartLeader select x;
leaderMail = leader.FirstOrDefault().Email;
}
var departCode = depart.Select(p => p.DepartCode.Substring(0, 3)).Distinct().ToArray();
var director = from x in Funs.DB.Sys_User
join y in Funs.DB.Base_Depart on x.DepartId equals y.DepartId
where x.RoleId == Const.Role_DirectorId
&& departCode.Contains(y.DepartCode)
select x;
if (director.Count() > 0 && director.FirstOrDefault().Email != null && director.FirstOrDefault().Email != "")
{
directorMail = director.FirstOrDefault().Email;
}
foreach (string cc in mailCC)
{
if (!string.IsNullOrEmpty(cc) && (cc == leaderMail || cc == directorMail))
{
email.CC.Add(cc);
}
}
}
//发件人地址
email.From = new MailAddress(mailFrom, ps.EmailYx);
//主题
email.Subject = mailSubject;
//附件
if (!string.IsNullOrEmpty(mailAttch))
{
string[] attachments = mailAttch.Split(';');
foreach (string file in attachments)
{
Attachment attach = new Attachment(file, System.Net.Mime.MediaTypeNames.Application.Octet);
//为附件添加发送时间
System.Net.Mime.ContentDisposition disposition = attach.ContentDisposition;
disposition.CreationDate = System.IO.File.GetCreationTime(file);
disposition.ModificationDate = System.IO.File.GetLastWriteTime(file);
disposition.ReadDate = System.IO.File.GetLastAccessTime(file);
//添加附件
email.Attachments.Add(attach);
}
}
//优先级
email.Priority = (mailPriority == "High") ? System.Net.Mail.MailPriority.High : System.Net.Mail.MailPriority.Normal;
//内容编码、格式
email.BodyEncoding = Encoding.UTF8;
email.IsBodyHtml = true;
email.To.Add(send);
string enUserName = string.Empty;
string ch_User_Dep = string.Empty;
string en_User_Dep = string.Empty;
//string safetyEva = string.Empty;
//获取用户
var userName = emailUser.Count(p => p.Email == send) > 0 ? emailUser.FirstOrDefault(p => p.Email == send).UserName : send;
if (!string.IsNullOrEmpty(userName))
{
var emailUserSend = Funs.DB.EmailUserView.Where(p => p.EmailType != 2 && p.IsEvaluateType != 1 && p.UserName== userName);
var emailLeaderSend = Funs.DB.EmailUserLeaderView.Where(p => p.EmailType != 2 && p.IsEvaluateType != 1 && p.UserName == userName);
var user = BLL.Sys_UserService.GetUserByAccount(userName);
enUserName = user.UserName;
//string enUser = string.Empty;
//string chUser = string.Empty;
//string depName = string.Empty;
//if (emailUserSend!=null && emailUserSend.Count()>0)
//{
// enUser = "User";
// chUser = "用户";
//}
//if (emailLeaderSend != null && emailLeaderSend.Count() > 0)
//{
// var dep = BLL.DepartService.GetDepartById(user.DepartId);
// if (dep != null)
// {
// depName = dep.DepartName;
// }
//}
if (emailUserSend != null && emailUserSend.Count() > 0 && emailLeaderSend != null && emailLeaderSend.Count() > 0)
{
en_User_Dep = "User/Dep" ;
ch_User_Dep = "用户/部门";
}
else if ((emailUserSend != null && emailUserSend.Count() > 0) && (emailLeaderSend == null || emailLeaderSend.Count() == 0))
{
en_User_Dep = "User";
ch_User_Dep = "用户";
}
else if ((emailUserSend == null || emailUserSend.Count() == 0) && (emailLeaderSend != null && emailLeaderSend.Count() > 0))
{
en_User_Dep = "Dep";
ch_User_Dep = "部门";
}
//内容
email.Body = mailBody.Replace("{month}", DateTime.Now.Month.ToString()).Replace("{name}", enUserName).Replace("{englishmonth}", englishmonth).Replace("{En_User_Dep}", en_User_Dep).Replace("{Ch_User_Dep}", ch_User_Dep);
}
try
{
//发送邮件
client.Send(email);
Model.SendEmail newSendEmail = new Model.SendEmail();
newSendEmail.EmailId = Guid.NewGuid().ToString();
newSendEmail.EmailTile = mailSubject;
newSendEmail.EmailContent = ReplaceHtmlTag(mailBody).Replace("{month}", DateTime.Now.Month.ToString()).Replace("{name}", enUserName).Replace("{englishmonth}", englishmonth);
newSendEmail.EmailURL = send;
newSendEmail.EmailName = send;
newSendEmail.EmailStatus = "发送成功";
newSendEmail.CreateTime = DateTime.Now;
newSendEmail.CreateName = "sys";
sendList.Add(newSendEmail);
result = true;
}
catch (Exception ex)
{
//错误日志
Model.SendEmail newSendEmail = new Model.SendEmail();
newSendEmail.EmailId = Guid.NewGuid().ToString();
newSendEmail.EmailTile = mailSubject;
newSendEmail.EmailContent = ReplaceHtmlTag(mailBody).Replace("{month}", DateTime.Now.Month.ToString()).Replace("{name}", enUserName).Replace("{englishmonth}", englishmonth);
newSendEmail.EmailURL = send;
newSendEmail.EmailName = send;
newSendEmail.EmailStatus = "发送失败";
newSendEmail.CreateTime = DateTime.Now;
newSendEmail.CreateName = "sys";
sendList.Add(newSendEmail);
resultMessage = ex.Message;
result = false;
}
finally
{
//及时释放占用的资源
if (email.Attachments.Count > 0)
{
email.Attachments.Clear();
email.Attachments.Dispose();
}
}
}
SqlBulkHelper.BulkInsert(SqlBulkHelper.GetCon(), "SendEmail", sendList);
return result;
}
/// <summary>
/// 去除html
/// </summary>
/// <returns></returns>
public static string ReplaceHtmlTag(string html)
{
string strText = System.Text.RegularExpressions.Regex.Replace(html, "<[^>]+>", "");
strText = System.Text.RegularExpressions.Regex.Replace(strText, "&[^;]+;", "");
return strText;
}
/// <summary>
/// 根据主键获取信息
/// </summary>
/// <param name="EmailID"></param>
/// <returns></returns>
public static EmailPop getEmailPop(string EmailID)
{
return Funs.DB.EmailPop.FirstOrDefault(x => x.EmailID == EmailID);
}
}
}