键盘敲烂,月薪过万作业不做,等于没学
当前系列: C#语法 修改讲义
复习:J&C:Email和短信

Email发送

首先,引入命名空间:

using System.Net.Mail; //注意不要引用成System.Web.Mail

然后,用一个MailMessage对象配置Email本身的相关信息:

MailMessage mail = new MailMessage
{
    From = new MailAddress("feige_20200214@163.com"),
    Subject = "激活Email",
    Body = $"感谢你的注册…… 你的注册码是:2345",
    IsBodyHtml = true  //最终呈现样式由收件服务器决定
};
mail.To.Add("2282636022@qq.com");
接下来,配置SMTP客户端(实际上是发送Email的服务器)
SmtpClient client = new SmtpClient
{
    Host = "smtp.163.com",
    Port = 25,
    Credentials = new NetworkCredential("feige_20200214", "yz17bang"),
    EnableSsl = false
};
client.Send(mail); 

注意SmtpClient 版本只支持 Explicit SSL,所以我们:EnableSsl = false

异步发送

发送email极有可能是比较耗时且不占用当前CPU资源的,所以出于性能的考虑,我们当然会想到异步。

SmtpClient为我们贴心的准备了非阻塞的异步方法:

client.SendAsync(mail, "user-23");

第二个参数可以是任意的object,通常用于标记确定该email。

但我们怎么安排email发送完成后的代码呢?注意SendAsync()没有返回Task而是void,所以无法利用异步方法,但可以利用:

事件

复习:event

SmtpClient中提供了一个SendCompleted事件,在email异步发送完成时调用:(演示+=之后双击Tab)

client.SendCompleted += Client_SendCompleted;
private static void Client_SendCompleted(object sender, AsyncCompletedEventArgs e)
Client_SendCompleted采用的是标准事件模板:
  • sender代表事件源
  • AsyncCompletedEventArgs封装随事件传递的数据,包括:
    1. 异常信息
      Console.WriteLine(e.Error?.Message);  //复习?.
    2. 之前SendAsync()中传入的UserState
      Console.WriteLine(e.UserState.ToString());

甚至还可以(在发送完成前,@想一想@:如何确定发送有无完成?)取消email的发送

client.SendAsyncCancel();


.config


在.NET项目中的配置文件(复习)就是App.config(演示:项目上右键 - Add New Item - Application Configuration File

关键结构

.config文件是XML格式的,常用的节点:

  • connectionString
  • appSettings
  • section和sectionGroup

machine.config

  • 当.NET安装的时候,就自动的带了一个machine.config,放置在C:\WINDOWS\Microsoft.NET\Framework\[Version]\CONFIG目录下,该文件包含了所有的全局的配置
  • 该目录下同时还有一些web.config文件(供ASP.NET使用),该文件可覆盖machine.config里面的配置
  • 项目/网站根目录下的app.config/web.config,又可以覆盖上述web.config里的配置(最常用的配置修改位置
  • 同时,网站的根目录以下,每一级目录又都可以有一个web.config,下级目录的web.config就可以覆盖上一级目录……

ASP.NET

如果是Web应用,配置文件的名称就是web.config

另:最新版的ASP.NET core默认使用json格式的配置文件,需要用依赖注入的方式获取……



log4net

通过nuget导入log4net之后,

添加配置文件

app.config(只能是这个名字),里面放置xml内容。其结构为:

  • xml声明
    <?xml version="1.0" encoding="utf-8" ?>
  • configuration:根节点
    • configSections:指定文档中的section
      <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
    • log4net:其下指定logger和appender

在C#中使用

首先需要指定log4net使用的配置文件:

XmlConfigurator.Configure();    //参数为空,使用默认的app.config

其他J&C部分:获取logger,进行各种级别的log







作业

见:J&C:Email和短信:SMTP / 服务接口 / 日志log

学习笔记
源栈学历
大多数人,都低估了编程学习的难度,而高估了自己的学习能力和毅力。

作业

觉得很 ,不要忘记分享哟!

任何问题,都可以直接加 QQ群:273534701

在当前系列 C#语法 中继续学习:

下一课: 已经是最后一课了……

多快好省!前端后端,线上线下,名师精讲

  • 先学习,后付费;
  • 不满意,不要钱。
  • 编程培训班,我就选源栈

更多了解 加:

QQ群:273534701

答疑解惑,远程debug……

B站 源栈-小九 的直播间

写代码要保持微笑 (๑•̀ㅂ•́)و✧

公众号:源栈一起帮

二维码