首页 > 编程语言 >ASP.NET Core中使用SmtpClient发送邮件的方法代码

ASP.NET Core中使用SmtpClient发送邮件的方法代码

时间:2022-10-20 13:45:06浏览次数:41  
标签:Core ASP SmtpClient app Smtp public config Email

本文主要介绍ASP .NET Core使用SmtpClient邮件的方法,从.NET Core 2.0开始,Microsoft引入了SmtpClient,与.NET Framework 4中的实现相同。并且不必依赖第三方Nuget包直接可以使用。

 

1、SmtpClient配置文件

由于配置已经注入Startup.cs构造函数,我们可以使用我们的配置文件来存储我们的SmtpClient配置。

{  
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Debug",
"System": "Information",
"Microsoft": "Information"
}
},
"Email": {
"Smtp": {
"Host": "smtp.gmail.com",
"Port": 25,
"Username": "mail_username",
"Password": "mail_password"
}
}
}

 

2、Scoped service方式配置使用

在ASP.NET Core依赖注入上下文中,作用域指的是每个请求。为每个控制器实例提供SmtpClient实例。

1)Startup.cs中配置代码

public class Startup{
  public Startup(IConfiguration configuration)  
        {  
            Configuration = configuration;  
        }  
        public IConfiguration Configuration { get; }  
        // 此方法由运行时调用。使用此方法向容器添加service。  
        public void ConfigureServices(IServiceCollection services)  
        {  
            services.AddScoped<SmtpClient>((serviceProvider) =>  
            {  
                var config = serviceProvider.GetRequiredService<IConfiguration>();  
                return new SmtpClient()  
                {  
                    Host = config.GetValue<String>("Email:Smtp:Host"),  
                    Port = config.GetValue<int>("Email:Smtp:Port"),  
                    Credentials = new NetworkCredential(  
                            config.GetValue<String>("Email:Smtp:Username"),   
                            config.GetValue<String>("Email:Smtp:Password")  
                        )  
                };  
            });  
            services.AddMvc();  
        }  
        // 此方法由运行时调用。使用此方法配置HTTP请求管道。  
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)  
        {  
            if (env.IsDevelopment())  
            {  
                app.UseDeveloperExceptionPage();  
            }  
            app.UseMvc();  
        }  
    }  

 

 

 

 

2)Controller中调用代码

控制器中我们需要创建一个接受SmtpClient作为参数的构造函数。此构造函数将配置从依赖项注入上下文中可用的SmtpClient实例,并且它将进一步可用于控制器中的所有方法。

[Route("api/[controller]")]  
public class MailController : Controller
{
private SmtpClient smtpClient;
public MailController(SmtpClient smtpClient)
{
this.smtpClient = smtpClient;
}
[HttpPost]
public async Task<IActionResult> Post()
{
await this.smtpClient.SendMailAsync(new MailMessage(
to: "[email protected]",
subject: "Test message subject",
body: "Test message body"
));
return Ok("OK");
}
protected override void Dispose(bool disposing)
{
this.smtpClient.Dispose();
base.Dispose(disposing);
}
}

 

 

 

 

 

 

3、Transient service方式配置使用

这种方法基本上是按需进行依赖注入。当您需要配置的SmtpClient时,您要求解析器为您提供一个实例。通过在ConfigureServices方法中对作用域进行少量更改,Startup.cs代码几乎保持不变。

1)Startup.cs中配置代码

public class Startup  
{  
    public Startup(IConfiguration configuration)  
    {  
        Configuration = configuration;  
    }  
    public IConfiguration Configuration { get; }  
    // 此方法由运行时调用。使用此方法向容器添加service。 
    public void ConfigureServices(IServiceCollection services)  
    {  
        services.AddTransient<SmtpClient>((serviceProvider) =>  
        {  
            var config = serviceProvider.GetRequiredService<IConfiguration>();  
            return new SmtpClient()  
            {  
                Host = config.GetValue<String>("Email:Smtp:Host"),  
                Port = config.GetValue<int>("Email:Smtp:Port"),  
                Credentials = new NetworkCredential(  
                        config.GetValue<String>("Email:Smtp:Username"),   
                        config.GetValue<String>("Email:Smtp:Password")  
                    )  
            };  
        });  
        services.AddMvc();  
    }  
    // 此方法由运行时调用。使用此方法配置HTTP请求管道。
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)  
    {  
        if (env.IsDevelopment())  
        {  
            app.UseDeveloperExceptionPage();  
        }  
        app.UseMvc();  
    }  
} 

 

 

 

 

2)Controller中调用代码

在控制器上,实例不是在控制器构造函数上创建的,而是在使用它的方法内部创建的。

[Route("api/[controller]")]  
public class MailController : Controller
{
[HttpPost]
public async Task<IActionResult> Post()
{
using (var smtpClient = HttpContext.RequestServices.GetRequiredService<SmtpClient>())
{
await smtpClient.SendMailAsync(new MailMessage(
to: "[email protected]",
subject: "Test message subject",
body: "Test message body"
));
return Ok("OK");
}
}
}

标签:Core,ASP,SmtpClient,app,Smtp,public,config,Email
From: https://www.cnblogs.com/fireicesion/p/16809572.html

相关文章

  • .NET Core appsettings.json 取值
    本文主要介绍.NETCore中,通过appsettings.json配置文件获取数据库连接字符串。 1、在项目的根目录中创建appsettings.json文件{"MssqlConnectionString":"Server......
  • .NET Core 2.1 EF(Entity Framework) Core Sqlite配置和使用分享
    本文主要介绍.NETCore2.1,在EF(EntityFramework)Core中配置使用Sqlite数据库,自动创建Sqlite数据库,自动创建表。1、安装用到的Nuget包项目上右键-》选择"管理Nuget......
  • .NET Core 使用 DotnetSpider 抓取页面教程
    本文主要介绍通过DotnetSpider写少量代码快速的实现网页的抓取。1、通过Nuget安装引用DotnetSpider项目上右键-》选择"管理Nuget程序包" -》搜索"DotnetsSpider" ......
  • Asp.Net Core 面试题简单整理
    1、如何在Asp.NetCore中激活Session功能首先添加Session包,其次在ConfigService方法中添加Session,然后在ConfigService中调用useSession。2、什么是中间件指注入到应用......
  • metasploit的学习
    metasploit一、metasploit框架介绍   MSF是MetasploitFramework的简称。高度模块化,即框架由多个module组成,居家旅行必备神器。metasploit框架涵盖了渗透测试中全......
  • 未能加载或实例化TagLibraryValidator类:[org.apache.taglibs.standard.tlv.JstlCoreTL
    問題解決方案1​​在jsp中刪除以下字段即可成功運行​​<%@taglibprefix="c"uri="http://java.sun.com/jsp/jstl/core"%>解決方案1​​将jstl的jar包修改为以下jar包​......
  • 关于报出这样的错误:org.apache.catalina.core.StandardWrapperValve.invoke 在路径为/
    从23:30开始报错检查,现在才弄好,发出来分享一下错误界面:首先,我们需要检查一下我们利用DBUtil.java文件中引用的db文件名称是否正确,(我就是因为没有注意到文件名称是否正确......
  • .net core6.0 Mvc添加区域
    .netcore6.0Mvc添加区域.netcore创建区域(Areas)的使用-爱码网(likecs.com)  如果黄框那里不写固定exists--产生错误  对应控制器添加区域名称  ......
  • Linux中如何配置生成core文件
    1、查看生成core文件的开关是否开启ulimit-c,如果为0,则没有开启;如果为>0的一个数,则表示生成core文件的大小;如果为unlimited,则表示core文件的大小不受限制。2、如何临时......
  • SparkCore(二)
    RDD的API操作/方法/算子比如有一个100M的csv文件,需要对它的每个元素操作,比如先+1,再平方,结果保存另一个csv文件。如下图,如果用传统python思维,不仅每个中间容器占用内存,消......