.NET Core에서 MailKit을 이용한 이메일 발송 서비스 구현

필요한 NuGet 패키지 설치

이메일 발송 기능을 구현하기 위해 MailKit 라이브러리를 사용합니다.

Install-Package NETCore.MailKit -Version 2.0.3

환경 설정

appsettings.json 구성

QQ 메일을 기준으로 SMTP 설정을 구성합니다.

{
  "EmailConfig": {
    "DisplayName": "시스템 알림",
    "SmtpServer": "smtp.qq.com",
    "SmtpPort": 465,
    "SenderEmail": "@qq.com",
    "SenderPassword": "",
    "EnableSsl": true
  }
}

EmailConfiguration 모델 정의

public class EmailConfiguration
{
    public string DisplayName { get; set; }
    public string SmtpServer { get; set; }
    public int SmtpPort { get; set; }
    public string SenderEmail { get; set; }
    public string SenderPassword { get; set; }
    public bool EnableSsl { get; set; }
}

서비스 등록

Startup.cs 파일에서 의존성 주입을 설정합니다.

services.Configure<EmailConfiguration>(Configuration.GetSection("EmailConfig"));
services.AddMailKit(options => {
    options.UseMailKit(new MailKitOptions {
        Server = Configuration["EmailConfig:SmtpServer"],
        Port = Configuration.GetValue<int>("EmailConfig:SmtpPort"),
        SenderName = Configuration["EmailConfig:DisplayName"],
        SenderEmail = Configuration["EmailConfig:SenderEmail"],
        Account = Configuration["EmailConfig:SenderEmail"],
        Password = Configuration["EmailConfig:SenderPassword"],
        Security = Configuration.GetValue<bool>("EmailConfig:EnableSsl")
    });
});

이메일 발송 로직

[HttpGet("api/send-verification-code")]
[AllowAnonymous]
public async Task<ActionResult<object>> SendVerificationCode(string recipientEmail)
{
    var response = new { Success = false, Message = "" };
    
    if (string.IsNullOrWhiteSpace(recipientEmail))
    {
        return BadRequest(new { Success = false, Message = "유효한 이메일 주소를 입력해주세요." });
    }

    var emailPattern = @"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$";
    if (!Regex.IsMatch(recipientEmail, emailPattern))
    {
        return BadRequest(new { Success = false, Message = "올바른 이메일 형식이 아닙니다." });
    }

    try
    {
        // 인증 코드 생성
        string verificationCode = "";
        var codeGenerator = new VerificationCodeService();
        using var imageStream = codeGenerator.GenerateCode(out verificationCode);
        
        // 캐시에 저장
        new CacheManager().SetCache("registration_code", verificationCode, TimeSpan.FromMinutes(10));
        
        // 이메일 내용 구성
        string subject = "계정 인증 코드";
        string body = $"귀하의 인증 코드는 다음과 같습니다: {verificationCode}. 본인 요청이 아닌 경우 무시하세요.";
        
        // 이메일 발송
        var emailConfig = new EmailConfiguration();
        Configuration.GetSection("EmailConfig").Bind(emailConfig);
        
        await _mailService.SendAsync(recipientEmail, subject, body, isHtml: false);
        
        return Ok(new { Success = true, Message = "인증 코드가 이메일로 전송되었습니다." });
    }
    catch (Exception ex)
    {
        return StatusCode(500, new { Success = false, Message = "이메일 발송 중 오류가 발생했습니다: " + ex.Message });
    }
}

태그: .NET Core MailKit SMTP C# 이메일 발송

6월 4일 17:25에 게시됨