using System; using System.Net.Mail; namespace Masuit.Tools.Models { #pragma warning disable 1591 public class Email { /// /// 发件人用户名 /// public string Username { get; set; } /// /// 发件人邮箱密码 /// public string Password { get; set; } /// /// 发送服务器端口号,默认25 /// public int SmtpPort { get; set; } = 25; /// /// 发送服务器地址 /// public string SmtpServer { get; set; } /// /// 邮件标题 /// public string Subject { get; set; } /// /// 邮件正文 /// public string Body { get; set; } /// /// 收件人,多个收件人用英文逗号隔开 /// public string Tos { get; set; } /// /// 是否启用SSL,默认已启用 /// public bool EnableSsl { get; set; } = true; /// /// 邮件消息对象 /// MailMessage GetClient { get { if (string.IsNullOrEmpty(Tos)) return null; MailMessage mailMessage = new MailMessage(); //多个接收者 foreach (string _str in Tos.Split(',')) { mailMessage.To.Add(_str); } mailMessage.From = new MailAddress(Username, Username); mailMessage.Subject = Subject; mailMessage.Body = Body; mailMessage.IsBodyHtml = true; mailMessage.BodyEncoding = System.Text.Encoding.UTF8; mailMessage.SubjectEncoding = System.Text.Encoding.UTF8; mailMessage.Priority = MailPriority.High; return mailMessage; } } SmtpClient GetSmtpClient => new SmtpClient { UseDefaultCredentials = false, EnableSsl = EnableSsl, Host = SmtpServer, Port = SmtpPort, Credentials = new System.Net.NetworkCredential(Username, Password), DeliveryMethod = SmtpDeliveryMethod.Network, }; //回调方法 Action actionSendCompletedCallback = null; /// /// 使用异步发送邮件 /// /// 邮件发送后的回调方法 /// public void SendAsync(Action completedCallback) { using var smtpClient = GetSmtpClient; using var mailMessage = GetClient; if (smtpClient == null || mailMessage == null) return; Subject = Subject; Body = Body; //EnableSsl = false; //发送邮件回调方法 actionSendCompletedCallback = completedCallback; smtpClient.SendCompleted += SendCompletedCallback; smtpClient.SendAsync(mailMessage, "true"); //异步发送邮件,如果回调方法中参数不为"true"则表示发送失败 } /// /// 使用同步发送邮件 /// public void Send() { using SmtpClient smtpClient = GetSmtpClient; using MailMessage mailMessage = GetClient; if (smtpClient == null || mailMessage == null) return; Subject = Subject; Body = Body; //EnableSsl = false; smtpClient.Send(mailMessage); //异步发送邮件,如果回调方法中参数不为"true"则表示发送失败 } /// /// 异步操作完成后执行回调方法 /// /// /// private void SendCompletedCallback(object sender, System.ComponentModel.AsyncCompletedEventArgs e) { //同一组件下不需要回调方法,直接在此写入日志即可 //写入日志 //return; if (actionSendCompletedCallback == null) return; string message; if (e.Cancelled) { message = "异步操作取消"; } else if (e.Error != null) { message = ($"UserState:{(string)e.UserState},Message:{e.Error}"); } else { message = (string)e.UserState; } //执行回调方法 actionSendCompletedCallback(message); } } #pragma warning restore 1591 }