필요한 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 });
}
}