如何在ASP.NET Core MVC 2应用中实现Amazon SES邮件发送功能?
在ASP.NET Core MVC 2中实现Amazon SES邮件发送(对应原MVC5方案)
嘿,我刚好做过类似的迁移,给你一步步梳理怎么在ASP.NET Core MVC 2里实现和你原来MVC5项目一致的Amazon SES邮件发送功能:
1. 安装必要的NuGet包
ASP.NET Core里使用AWS SDK需要专门的Core扩展包,你可以通过Package Manager Console或者.NET CLI安装:
- Package Manager:
Install-Package AWSSDK.SimpleEmail Install-Package AWSSDK.Extensions.NETCore.Setup - .NET CLI:
dotnet add package AWSSDK.SimpleEmail dotnet add package AWSSDK.Extensions.NETCore.Setup
2. 迁移配置参数(替代原web.config)
ASP.NET Core不再用web.config,而是用appsettings.json来管理配置。把你原来web.config里的三个AWS参数放到这个文件里,注意格式:
{ "AWS": { "Profile": "myprofile", "ProfilesLocation": "C:\\AWS\\mycredentials\\creds.txt", "Region": "eu-west-1" } }
提示:路径里的反斜杠要双写转义,或者直接用正斜杠(
C:/AWS/mycredentials/creds.txt)也可以。
3. 在Startup中配置依赖注入
打开Startup.cs,在ConfigureServices方法里添加SES客户端的DI注册,这样后续可以直接注入使用:
using Amazon.SimpleEmail; using AWSSDK.Extensions.NETCore.Setup; public void ConfigureServices(IServiceCollection services) { // 其他MVC服务配置... services.AddMvc(); // 注册SES客户端,自动读取appsettings.json里的AWS配置 services.AddAWSService<IAmazonSimpleEmailService>(); }
4. 编写邮件发送业务服务
和你原来的业务服务逻辑类似,创建一个邮件发送类(比如SesEmailSender),注入IAmazonSimpleEmailService来实现发送逻辑:
using Amazon.SimpleEmail; using Amazon.SimpleEmail.Model; using System.Collections.Generic; using System.Threading.Tasks; public class SesEmailSender { private readonly IAmazonSimpleEmailService _sesClient; // 通过DI注入SES客户端 public SesEmailSender(IAmazonSimpleEmailService sesClient) { _sesClient = sesClient; } public async Task SendEmailAsync(string fromAddress, string toAddress, string subject, string htmlBody) { var sendRequest = new SendEmailRequest { Source = fromAddress, Destination = new Destination { ToAddresses = new List<string> { toAddress } }, Message = new Message { Subject = new Content(subject), Body = new Body { Html = new Content(htmlBody) } } }; await _sesClient.SendEmailAsync(sendRequest); } }
别忘了把这个服务也注册到DI里,在Startup.cs的ConfigureServices中添加:
services.AddScoped<SesEmailSender>();
5. 在Controller中使用邮件服务
现在你可以在任意Controller里注入SesEmailSender,调用发送方法,和你原来MVC5项目的用法类似:
public class HomeController : Controller { private readonly SesEmailSender _emailSender; public HomeController(SesEmailSender emailSender) { _emailSender = emailSender; } public async Task<IActionResult> SendTestEmail() { await _emailSender.SendEmailAsync( "your-sender@domain.com", "recipient@domain.com", "Test Email from ASP.NET Core", "<h1>Hello from SES!</h1>" ); return View(); } }
注意事项
- 确保你的
creds.txt文件里的AWS凭证拥有ses:SendEmail或者ses:SendTemplatedEmail的权限 - 如果部署到服务器,要确认
ProfilesLocation的路径在服务器上存在且应用程序有权限访问 - 如果你不想用本地凭证文件,也可以改用环境变量、IAM角色(比如EC2/EKS实例角色)或者AWS Secrets Manager来管理凭证,这在生产环境更安全
内容的提问来源于stack exchange,提问作者niico
相关产品推荐
相关产品推荐

