using System; using System.Net.Mail; using System.Net; using System.Net.Security; using System.Security.Cryptography.X509Certificates; using System.Text; namespace QM.Exchange.Adapters.Mail { /// /// Smtp邮件服务 /// public class SmtpMailSender { #region 属性 /// /// 邮件信息 /// private MailMessage mailMessage; /// /// Smtp客户端 /// private SmtpClient smtpClient; #endregion #region 构造函数 /// /// /// /// 邮件服务器对象 /// 邮件内容对象 public SmtpMailSender(SmtpServerInfo ServerInfo, MailInfo MailInfo) { //判断邮件服务器信息的完整性 CheckSmtpServerInfo(ServerInfo); mailMessage = new MailMessage(); smtpClient = new SmtpClient(); smtpClient.Host = ServerInfo.SmtpServer; //smtpClient.Port = 25; smtpClient.Port = 587; smtpClient.UseDefaultCredentials = true; smtpClient.Credentials = new NetworkCredential(ServerInfo.SenderUser, ServerInfo.SenderPassword, ServerInfo.DoMain); //判断邮件信息是否填写完整 CheckMailInfo(MailInfo); //发件人 AddFrommail(ServerInfo.SenderUserEmail); //邮件标题 AddSubject(MailInfo.Subject); //邮件内容 AddContent(MailInfo.Content); //收件人 AddReceiver(MailInfo.ToMail); //附件 AddAttachment(MailInfo.Additional); mailMessage.IsBodyHtml = true; mailMessage.BodyEncoding = Encoding.Default; } #endregion #region 发件人邮箱 /// /// 发件人邮箱 /// private void AddFrommail(String FormMail) { mailMessage.From = new MailAddress(FormMail); } #endregion #region 邮件标题 /// /// 邮件标题 /// /// private void AddSubject(String Subject) { mailMessage.Subject = Subject; } #endregion #region 邮件内容 /// /// 邮件内容 /// private void AddContent(String Content) { mailMessage.Body = Content; } #endregion #region 添加收件人 /// /// 添加收件人 /// /// private void AddReceiver(String[] toEmail) { //添加收件人 foreach (String mail in toEmail) { mailMessage.To.Add(mail); } } #endregion #region 添加附件 /// /// 添加附件 /// /// private void AddAttachment(String[] filename) { //为空时返回 if (filename == null || filename.Length <= 0) { return; } //循环添加附件 foreach (String fname in filename) { mailMessage.Attachments.Add(new Attachment(fname)); } } #endregion #region 判断邮件信息是否填写完整 /// /// 判断邮件信息是否填写完整 /// private void CheckMailInfo(MailInfo MailInfo) { //收件人 if (MailInfo.ToMail == null || MailInfo.ToMail.Length <= 0) { throw new Exception("收件人为空."); } if (String.IsNullOrEmpty(MailInfo.Subject)) { throw new Exception("标题为空."); } if (String.IsNullOrEmpty(MailInfo.Content)) { throw new Exception("内容为空."); } } #endregion #region 判断邮件服务器信息的完整性 /// /// 判断邮件服务器的信息完整性 /// public void CheckSmtpServerInfo(SmtpServerInfo ServerInfo) { //邮件服务器域名 if (ServerInfo.SmtpServer == null || ServerInfo.DoMain == null) { throw new Exception("请设置邮件服务器域名."); } //发件人 if (ServerInfo.SenderUser == null || ServerInfo.SenderPassword == null || ServerInfo.SenderUserEmail == null) { throw new Exception("请设置发件人信息."); } } #endregion #region 标准邮件发送接口 /// /// 发送 /// public void Send() { smtpClient.Send(mailMessage); } #endregion #region 大众WebRef发送接口 //发件人设置为 "subpadmin@faw-vw.com" // DOMAIN设置为 "faw-vw" 其它与上边一样 不需要设置SmtpServer //SystemInfo sysinfo, IList MailTo, string Subject, string Body /// /// 大众WebRef调用接口 /// /// /// //public static void SendMailByWebRef(SmtpServerInfo ServerInfo, MailInfo MailInfo) //{ // ServicePointManager.ServerCertificateValidationCallback = // delegate(Object obj, X509Certificate certificate, // X509Chain chain, SslPolicyErrors errors) // { // // Replace this line with code to validate server // // certificate. // return true; // }; // // Create the CreateItem request. // //创建 CreateItem 的请求 // CreateItemType createEmailRequest = new CreateItemType(); // // Specifiy how the e-mail will be handled. // //确定 Mail的处理方式 // createEmailRequest.MessageDisposition = MessageDispositionType.SendAndSaveCopy; // createEmailRequest.MessageDispositionSpecified = true; // // Specify the location of sent items. // //确定发送信息存放的位置 // createEmailRequest.SavedItemFolderId = new TargetFolderIdType(); // DistinguishedFolderIdType sentitems = new DistinguishedFolderIdType(); // sentitems.Id = DistinguishedFolderIdNameType.sentitems; // createEmailRequest.SavedItemFolderId.Item = sentitems; // // Create the array of items. // //创建存放数组 // createEmailRequest.Items = new NonEmptyArrayOfAllItemsType(); // // Create a single e-mail message. // //创建 e-mail 信息 // MessageType message = new MessageType(); // message.Subject = MailInfo.Subject; // message.Body = new BodyType(); // message.Body.BodyType1 = BodyTypeType.HTML; // message.Body.Value = MailInfo.Content; // //发送者信息 // message.Sender = new SingleRecipientType(); // message.Sender.Item = new EmailAddressType(); // //message.Sender.Item.EmailAddress = "subpadmin@faw-vw.com"; // message.Sender.Item.EmailAddress = ServerInfo.SenderUserEmail; // message.ToRecipients = new EmailAddressType[MailInfo.ToMail.Length]; // for (int i = 0; i < MailInfo.ToMail.Length; i++) // { // message.ToRecipients[i] = new EmailAddressType(); // message.ToRecipients[i].EmailAddress = MailInfo.ToMail[i]; // } // message.Sensitivity = SensitivityChoicesType.Normal; // //大众服务器配置 ----------------- Add the message to the array of items to be created. // createEmailRequest.Items.Items = new ItemType[1]; // createEmailRequest.Items.Items[0] = message; // try // { // // Identify the service binding and the user. // ExchangeServiceBinding esb = new ExchangeServiceBinding(); // //大众服务器配置 ----------------- esb.Credentials = new NetworkCredential(ServerInfo.SenderUser, ServerInfo.SenderPassword, "faw-vw"); // esb.Credentials = new NetworkCredential(ServerInfo.SenderUser, ServerInfo.SenderPassword, ServerInfo.DoMain); // esb.Url = @"https://mail.faw-vw.com/EWS/Exchange.asmx"; // // Send a CreateItem request and get the CreateItem // // response. // CreateItemResponseType createItemResponse = esb.CreateItem(createEmailRequest); // ArrayOfResponseMessagesType responses = createItemResponse.ResponseMessages; // ResponseMessageType[] responseMessages = responses.Items; // // Access the response messages. // foreach (ResponseMessageType respMsg in responseMessages) // { // if (respMsg.ResponseClass == ResponseClassType.Error) // { // throw new Exception("Error: " + respMsg.MessageText); // } // else if (respMsg.ResponseClass == ResponseClassType.Warning) // { // throw new Exception("Warning: " + respMsg.MessageText); // } // // Check to determine whether the response message is the correct type. // if (respMsg is ItemInfoResponseMessageType) // { // ItemInfoResponseMessageType createItemResp = (respMsg as ItemInfoResponseMessageType); // ArrayOfRealItemsType aorit = createItemResp.Items; // //foreach (ItemType item in aorit.Items) // //{ // // if (item is MessageType) // // { // // MessageType myMessage = (item as MessageType); // // //MessageBox.Show("Created item: " + myMessage.ItemId.Id); // // } // // // TODO: Add logic to check and cast for all other types. // //} // } // } // } // catch (Exception ex) // { // //QMFrameWork.Log.LogManager.LogHelper.Error(new QMFrameWork.Log.LogInfo() // //{ // // Info = ex.Message, // // ErrorInfo = ex, // //}); // } // finally // { // } //} #endregion } }