Basf_FCL/FCL/BLL/Common/MailHelper.cs

929 lines
44 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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);
//主题
email.Subject = mailSubject.Replace("\r","").Replace("\n", "");
//附件
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);
//主题
email.Subject = mailSubject.Replace("\r", "").Replace("\n", "");
//附件
//优先级
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);
}
}
}