以前官方自带一个smpt类可以发送邮件,现在好像弃用了。虽然仍然可以使用,但总归不如先学一下新的方法。遂采用了微软官方推荐的一个第三方库:MailKit
还需引入另一个MimeKit库,用于创建消息。
我的发送邮件是扩展功能,所以是静态方法,所需的参数我将通过参数传递。遂定义一个email的实体类、
public class SendEmailDTO { /// <summary> /// 发送人邮箱 /// </summary> public string FromEmail { get; set; } /// <summary> /// 收件人邮箱 /// </summary> public string ToEmail { get; set; } /// <summary> /// 发送人 /// </summary> public string FromUserName { get; set; } /// <summary> /// 收件人 /// </summary> public string ToUserName { get; set; } /// <summary> /// 主题 /// </summary> public string Subject { get; set; } /// <summary> /// 消息 /// </summary> public string Text { get; set; } /// <summary> /// 邮箱服务器 /// </summary> public string Host { get; set; } /// <summary> /// 端口[465加密,25不加密] /// </summary> public int Port { get; set; } /// <summary> /// 发送邮箱授权码 /// </summary> public string Code { get; set; } }
然后就是发送邮件的方法
public static void Send(SendEmailDTO dto) { #region Mime消息体 MimeMessage mime = new(); //发送者邮箱 mime.From.Add(new MailboxAddress(dto.FromUserName, dto.FromEmail)); //接收者邮箱 mime.To.Add(new MailboxAddress(dto.ToUserName, dto.ToEmail)); //邮件主体 mime.Subject = dto.Subject; //邮件消息的主体,可以html,目前只是txt mime.Body = new TextPart(MimeKit.Text.TextFormat.Plain) { Text = dto.Text }; #endregion Mime消息体 #region 发送 //创建smtp实例: SmtpClient 是一个用于与 SMTP 服务器进行交互的类 using SmtpClient client = new(); //与smpt服务器建立连接 client.Connect(dto.Host, dto.Port, dto.Port == 465); //使用提供的凭证进行身份验证 client.Authenticate(dto.FromEmail, dto.Code); //发送信息 client.Send(mime); //关闭连接 client.Dispose(); #endregion 发送 }
调用也很方便
SendEmail.Send(new Model.EntityDTO.SendEmailDTO() { FromEmail = "163@163.com", FromUserName = "野原新之助", Host = "smtp.163.com", Port = 465, Subject = "打个招呼", Text = @"你赖东东 不错嘛!", ToEmail = "qq@qq.com", ToUserName = "小王" });