using System; using System.Data; using System.Data.SqlClient; using System.Net; using System.Net.Mail; using System.Net.Mime; using System.Net.Security; using System.Security.Cryptography.X509Certificates; using System.Text; using System.Threading; namespace NFine.Code { public class MailHelper { /// /// 邮件服务器地址 /// public string MailServer { get; set; } /// /// 用户名 /// public string MailUserName { get; set; } /// /// 密码 /// public string MailPassword { get; set; } /// /// 名称 /// public string MailName { get; set; } private MailMessage message = new MailMessage();//申明邮件类 /// /// 同步发送邮件 /// /// 收件人邮箱地址 /// 主题 /// 内容 /// 编码 /// 是否Html /// 是否SSL加密连接 /// 是否成功 public bool Send(string to, string subject, string body, string encoding = "UTF-8", bool isBodyHtml = true, bool enableSsl = false) { try { MailMessage message = new MailMessage(); // 接收人邮箱地址 message.To.Add(new MailAddress(to)); message.From = new MailAddress(MailUserName, MailName); message.BodyEncoding = Encoding.GetEncoding(encoding); message.Body = body; //GB2312 message.SubjectEncoding = Encoding.GetEncoding(encoding); message.Subject = subject; message.IsBodyHtml = isBodyHtml; SmtpClient smtpclient = new SmtpClient(MailServer, 25); smtpclient.Credentials = new System.Net.NetworkCredential(MailUserName, MailPassword); //SSL连接 smtpclient.EnableSsl = enableSsl; smtpclient.Send(message); return true; } catch (Exception) { throw; } } /// /// 异步发送邮件 独立线程 /// /// 邮件接收人 /// 邮件标题 /// 邮件内容 /// 端口号 /// public void SendByThread(string to, string title, string body, int port = 25) { new Thread(new ThreadStart(delegate() { try { SmtpClient smtp = new SmtpClient(); //邮箱的smtp地址 smtp.Host = MailServer; //端口号 smtp.Port = port; //构建发件人的身份凭据类 smtp.Credentials = new NetworkCredential(MailUserName, MailPassword); //构建消息类 MailMessage objMailMessage = new MailMessage(); //设置优先级 objMailMessage.Priority = MailPriority.High; //消息发送人 objMailMessage.From = new MailAddress(MailUserName, MailName, System.Text.Encoding.UTF8); //收件人 objMailMessage.To.Add(to); //标题 objMailMessage.Subject = title.Trim(); //标题字符编码 objMailMessage.SubjectEncoding = System.Text.Encoding.UTF8; //正文 objMailMessage.Body = body.Trim(); objMailMessage.IsBodyHtml = true; //内容字符编码 objMailMessage.BodyEncoding = System.Text.Encoding.UTF8; //发送 smtp.Send(objMailMessage); } catch (Exception) { throw; } })).Start(); } public static void SendEmail(string ConnectionString, string SendHost, int SendPort, string SendDisplayName, string SendAddress, string SendPassword, string TOAddress, string CCAddress, string Subject, bool IsBodyHtml, string Body, string POCode) { try { SmtpClient smtpClient = new SmtpClient { EnableSsl = true, UseDefaultCredentials = false, Host = SendHost, Port = SendPort, Credentials = new NetworkCredential(SendAddress, SendPassword) }; MailMessage mailMessage = new MailMessage { Subject = Subject, SubjectEncoding = Encoding.GetEncoding("utf-8"), BodyEncoding = Encoding.GetEncoding("utf-8"), From = new MailAddress(SendAddress, SendDisplayName), IsBodyHtml = IsBodyHtml, Body = Body }; string filePath = System.Web.HttpContext.Current.Server.MapPath("~\\File\\POReleaseFile\\" + POCode + ".pdf"); AddAttachments(filePath);//添加附件 string[] array = TOAddress.Split(new char[] { ',' }); string[] array2 = array; for (int i = 0; i < array2.Length; i++) { string text = array2[i]; if (!string.IsNullOrEmpty(text)) { mailMessage.To.Add(text); } } string[] array3 = CCAddress.Split(new char[] { ',' }); array2 = array3; for (int i = 0; i < array2.Length; i++) { string text2 = array2[i]; if (!string.IsNullOrEmpty(text2)) { mailMessage.CC.Add(text2); } } ServicePointManager.ServerCertificateValidationCallback = ((object obj, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors) => true); smtpClient.Send(mailMessage); InsertData(ConnectionString, SendHost, SendPort, SendDisplayName, SendAddress, SendPassword, TOAddress, CCAddress, Subject, IsBodyHtml, Body, "1", null); } catch (Exception ex) { InsertData(ConnectionString, SendHost, SendPort, SendDisplayName, SendAddress, SendPassword, TOAddress, CCAddress, Subject, IsBodyHtml, Body, "2", ex.Message); throw; } } public static void AddAttachments(string attachmentsPath)//这里的参数代表附件的绝对路径 { try { string[] path = attachmentsPath.Split(';'); //以什么符号分隔可以自定义 Attachment data; ContentDisposition disposition; for (int i = 0; i < path.Length; i++) { data = new Attachment(path[i], MediaTypeNames.Application.Octet); disposition = data.ContentDisposition; disposition.CreationDate = System.IO.File.GetCreationTime(path[i]); disposition.ModificationDate = System.IO.File.GetLastWriteTime(path[i]); disposition.ReadDate = System.IO.File.GetLastAccessTime(path[i]); } } catch (Exception ex) { Console.WriteLine(ex.ToString()); } } private static void InsertData(string ConnectionString, string SendHost, int SendPort, string SendDisplayName, string SendAddress, string SendPassword, string TOAddress, string CCAddress, string Subject, bool IsBodyHtml, string Body, string Status, string Message) { try { try { string text = "INSERT INTO ICSSendMail(ID, SendHost, SendPort, SendDisplayName, SendAddress, \r\n SendPassword, TOAddress, CCAddress, Subject, IsBodyHtml, \r\n Body, Retry, Status, Message, MUSER, MUSERName, CreatTIME, ModifyTIME)\r\n VALUES(NEWID(),'{0}','{1}','{2}','{3}',\r\n '{4}','{5}','{6}','{7}','{8}',\r\n '{9}','0','{10}','{11}','','',GETDATE(),GETDATE())"; text = string.Format(text, new object[] { SendHost, SendPort, SendDisplayName, SendAddress, SendPassword, TOAddress, CCAddress, Subject, IsBodyHtml, Body.Replace("'", "''"), Status, Message }); ExecuteDate(ConnectionString, text); } catch (Exception ex) { throw ex; } } catch (Exception ex) { throw ex; } } private static void ExecuteDate(string conStr, string sql) { try { using (SqlConnection sqlConnection = new SqlConnection(conStr)) { sqlConnection.Open(); try { using (SqlTransaction sqlTransaction = sqlConnection.BeginTransaction()) { using (SqlCommand sqlCommand = new SqlCommand()) { sqlCommand.Connection = sqlConnection; sqlCommand.Transaction = sqlTransaction; sqlCommand.CommandText = sql; try { int num = sqlCommand.ExecuteNonQuery(); sqlTransaction.Commit(); } catch (Exception ex) { sqlTransaction.Rollback(); throw ex; } } } } catch (Exception ex) { throw ex; } finally { if (sqlConnection.State == ConnectionState.Open) { sqlConnection.Close(); } sqlConnection.Dispose(); } } } catch (Exception ex) { throw ex; } } } }