• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

C#使用System.Net邮件发送功能踩过的坑

c# 搞代码 4年前 (2022-01-09) 14次浏览 已收录 0个评论

1.EazyEmail邮件发送类库

Net 类库自带了邮件发送功能。笔者对该类库,从使用的角度进行了二次封装,nuget上可搜索EazyEmail,注入容器时通过委托来获得邮箱服务器的配置地址以及发送地址直接调用send方法即可。
容器注入代码。这里定义的委托,每次发送之前可以去数据库拿邮箱配置数据跟发送账户,笔者自己用的时候是通过Redis缓存 存取数据,因为像断网断电这种可能是批量出现的,需要批量发送告警邮件,所以放Redis里,然后Redis通过rdb功能设置每秒每个键变化就持久化的策略,没毛病。

   services.AddEmailKit(() => 
      {
        EmailConfig emailConfig = new EmailConfig( );
        #region 163网易邮件发送
        emailConfig.EmailSmtpAddress = "smtp.163.com";
        emailConfig.EmalHostPort = 587;
        emailConfig.SendEmailAccount = "[email protected]";
        emailConfig.SendEmailPassWord = "******";
        #endregion

        #region qq 邮件发送
      // emailConfig.EmailSmtpAddress = "smtp.qq.com";
      // emailConfig.EmalHostPort = 587;
      // emailConfig.SendEmailAccount = "[email protected]";
      // emailConfig.SendEmailPassWord = "*****";
        #endregion

        return emailConfig;
 <strong>本文来源gaodai#ma#com搞@@代~&码*网2</strong>     });

发送代码

 MailBox QqMailbox = new MailBox();

 QqMailbox.To = "[email protected]";
 QqMailbox.Body = "qqfadsfa邮箱测试";
 QqMailbox.Cc = "[email protected]";
 QqMailbox.Subject = "qq邮fadfa箱测试";

 emailQueueService.Enqueue(QqMailbox); 

EazyEmail 内置阻塞队列,只要队列有邮件,里面开了一个线程会不断地发送,发送完毕会阻塞住,对应线程执行权也会回归线程池,一旦继续有邮件,线程自动唤醒会继续发送邮件。有关EazyEmail的使用与设计思路有需要介绍可留言,可另起一篇作讲解,已经上传到nuget,可自行搜索EazyEmail去使用,使用非常方便。

EazyEmail类库源码 github地址需要者可自行下载

2.邮件发送授权码与邮件密码

第三方客户端登录邮件服务器来进行发送邮件,接收邮件已经极为普遍,某种场景下是代码里嵌入发送邮件信息,当然也包含了发送邮件的密码,近两年邮件服务商为了提高邮件的保密性,网易与qq邮箱规定了第三方客户端发送邮件只能通过发送授权码。

网易发送授权码生成过程:

开启所需要的邮件发送服务跟接收服务

手机微信扫描发送二维码

手机短信发送之后,点击我已发送 生成授权码

此授权码可直接用来作为应用程序的发送密码。
qq邮箱发送授权码生成过程:

生成授权码步骤,设置,账户往下拉。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:C#使用System.Net邮件发送功能踩过的坑

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址