实现Asp.NET Core中的邮件发送功能

紫色蔷薇 2024-03-14 ⋅ 9 阅读

简介

邮件发送是大多数应用程序在进行用户通信和通知时必不可少的功能。ASP.NET Core 提供了一种非常简单而功能强大的方式来实现邮件发送功能。本文将介绍如何在 ASP.NET Core 中使用 SmtpClient 类来发送电子邮件。

环境准备

在开始编写代码之前,我们需要进行一些准备工作。首先,确保你已经安装了最新版本的 .NET Core SDK。其次,我们需要一个可用的电子邮件账户来发送邮件。你可以使用自己的邮箱账户或者创建一个测试账户。

添加 SmtpClient 类

为了发送电子邮件,我们需要通过 NuGet 包管理器添加 System.Net.Mail 包。在 Visual Studio 中,右击项目文件,选择“管理 NuGet 程序包”,然后在搜索框中输入“System.Net.Mail”,选择它,并点击“安装”按钮进行安装。

实现邮件发送功能

Startup.cs 类中添加以下代码:

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using System.Net.Mail;
using System.Net;

namespace EmailSender
{
    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        public void ConfigureServices(IServiceCollection services)
        {
            // 添加电子邮件发送服务
            services.AddTransient<SmtpClient>(serviceProvider =>
            {
                var config = serviceProvider.GetRequiredService<IConfiguration>();
                var host = config["SMTP:Host"];
                int port = int.Parse(config["SMTP:Port"]);
                var username = config["SMTP:Username"];
                var password = config["SMTP:Password"];

                var client = new SmtpClient(host, port)
                {
                    UseDefaultCredentials = false,
                    Credentials = new NetworkCredential(username, password),
                    EnableSsl = true
                };

                return client;
            });

            services.AddControllers();
        }

        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            // 省略其他配置代码...
        }
    }
}

在配置文件(appsettings.json)中添加以下内容:

{
  "SMTP": {
    "Host": "smtp.example.com",
    "Port": "587",
    "Username": "your-email@example.com",
    "Password": "your-email-password"
  }
}

确保将 HostPortUsernamePassword 替换为你自己的电子邮件账户信息。

添加电子邮件发送接口

Controllers 文件夹中创建一个名为 EmailController.cs 的文件,并在其中添加以下代码:

using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using System.Net.Mail;

namespace EmailSender.Controllers
{
    [ApiController]
    [Route("[controller]")]
    public class EmailController : ControllerBase
    {
        private readonly SmtpClient _smtpClient;

        public EmailController(SmtpClient smtpClient)
        {
            _smtpClient = smtpClient;
        }

        [HttpPost]
        public async Task<IActionResult> SendEmail(string to, string subject, string body)
        {
            try
            {
                var email = new MailMessage
                {
                    From = new MailAddress("your-email@example.com"), // 发件人
                    Subject = subject, // 主题
                    Body = body // 正文
                };

                email.To.Add(new MailAddress(to)); // 收件人

                await _smtpClient.SendMailAsync(email);

                return Ok("邮件发送成功!");
            }
            catch (System.Exception ex)
            {
                return BadRequest($"邮件发送失败:{ex.Message}");
            }
        }
    }
}

请确保将 your-email@example.com 替换为你自己的电子邮件账户。

测试邮件发送功能

运行应用程序,并使用 Postman 等工具发送 HTTP POST 请求到 http://localhost:5000/email。请求体中包含以下键值对:

to: recipient@example.com
subject: Test Email
body: This is a test email.

如果一切正常,你将收到一封测试邮件。

结论

在本文中,我们介绍了如何在 ASP.NET Core 中使用 SmtpClient 类来实现邮件发送功能。虽然这是一种非常基本的实现方式,但你可以根据自己的需求进行扩展和改进。祝你成功实现 ASP.NET Core 中的邮件发送功能!


全部评论: 0

    我有话说: