C#에서 이메일 전송 기능 구현하기
추천 자료: ASP.NET Core 인증 및 권한 부여
개요
이 강좌에서는 C#과 ASP.NET Core에서 이메일을 전송하는 기능을 구현하는 방법을 다룹니다. 이를 위해 IEmailSender
인터페이스를 정의하고 EmailSender
클래스를 구현하는 과정을 설명합니다.
IEmailSender
및 IMailchimpEmailSender
인터페이스 정의
인터페이스는 이메일 전송 기능을 제공하는 계약(contract) 역할을 합니다. 이를 통해 다양한 구현을 쉽게 교체할 수 있습니다.
인터페이스 코드
using System.Threading.Tasks;
namespace All.Services
{
/// <summary>
/// 이메일 전송 기능을 제공하는 인터페이스입니다.
/// </summary>
public interface IEmailSender
{
/// <summary>
/// 비동기적으로 이메일을 전송합니다.
/// </summary>
/// <param name="email">수신자 이메일 주소</param>
/// <param name="subject">이메일 제목</param>
/// <param name="message">이메일 본문</param>
/// <param name="isBodyHtml">이메일 본문을 HTML 형식으로 보낼지 여부(기본값: true)</param>
Task SendEmailAsync(string email, string subject, string message, bool isBodyHtml = true);
}
public interface IMailchimpEmailSender
{
Task SendEmailAsync(string email, string subject, string message, bool isBodyHtml = true);
}
}
appsettings.json
설정
{
"AppKeys": {
"SmtpServer": "smtp.mandrillapp.com",
"SmtpUserName": "your-username",
"SmtpPassword": "your-api-key",
"SmtpEmail": "your-email@example.com"
}
}
EmailSender
및 MailchimpEmailSender
클래스 구현
이제 IEmailSender
인터페이스를 구현하는 EmailSender
클래스를 생성합니다.
클래스 코드
using Microsoft.Extensions.Configuration;
using System;
using System.Net;
using System.Net.Mail;
using System.Threading.Tasks;
namespace Hawaso.Services
{
public class EmailSender : All.Services.IEmailSender
{
public Task SendEmailAsync(string email, string subject, string message, bool isBodyHtml = true)
{
Console.WriteLine(message);
return Task.CompletedTask;
}
}
public class MailchimpEmailSender : All.Services.IMailchimpEmailSender
{
private const string REPLY_TO_EMAIL = "support@hawaso.com";
private const string REPLY_TO_NAME = "Hawaso Team";
private readonly string _smtpServer;
private readonly string _smtpUserName;
private readonly string _smtpPassword;
private readonly string _smtpEmail;
public MailchimpEmailSender(IConfiguration configuration)
{
_smtpServer = configuration["AppKeys:SmtpServer"];
_smtpUserName = configuration["AppKeys:SmtpUserName"];
_smtpPassword = configuration["AppKeys:SmtpPassword"];
_smtpEmail = configuration["AppKeys:SmtpEmail"];
}
public async Task SendEmailAsync(string email, string subject, string message, bool isBodyHtml = true)
{
using var client = new SmtpClient(_smtpServer);
client.UseDefaultCredentials = false;
client.Credentials = new NetworkCredential(_smtpUserName, _smtpPassword);
var mailMessage = new MailMessage
{
From = new MailAddress(_smtpEmail, REPLY_TO_NAME),
Subject = subject,
Body = message,
IsBodyHtml = isBodyHtml
};
mailMessage.To.Add(email);
mailMessage.ReplyToList.Add(new MailAddress(REPLY_TO_EMAIL, REPLY_TO_NAME));
await client.SendMailAsync(mailMessage);
}
}
}
서비스 등록
ASP.NET Core에서 EmailSender
및 MailchimpEmailSender
서비스를 DI(의존성 주입) 컨테이너에 등록하여 사용할 수 있습니다.
Program.cs
파일에서 서비스 등록
builder.Services.AddTransient<IEmailSender, EmailSender>();
builder.Services.AddTransient<IMailchimpEmailSender, MailchimpEmailSender>();
컨트롤러에서 사용 예시
public class MailchipEmailTestController : Controller
{
private readonly IEmailSender _emailSender;
private readonly IMailchimpEmailSender _mailchimpEmailSender;
public MailchipEmailTestController(IEmailSender emailSender, IMailchimpEmailSender mailchimpEmailSender)
{
_emailSender = emailSender;
_mailchimpEmailSender = mailchimpEmailSender;
}
public async Task<IActionResult> SendTestEmail()
{
await _emailSender.SendEmailAsync("recipient@example.com", "Test Email", "This is a test email.");
return Content("Basic email sent successfully!");
}
public async Task<IActionResult> SendMailchimpEmail()
{
await _mailchimpEmailSender.SendEmailAsync("recipient@example.com", "Mailchimp Email", "This is a Mailchimp test email.");
return Content("Mailchimp email sent successfully!");
}
}
결론
이 강좌에서는 IEmailSender
및 IMailchimpEmailSender
인터페이스를 정의하고 각각의 클래스를 구현하는 방법을 배웠습니다. 이를 통해 이메일 설정을 appsettings.json
에서 관리할 수 있으며, 다양한 이메일 서비스를 연동할 수 있습니다.
추천 자료: .NET Blazor에 대해 알아보시겠어요? .NET Blazor 알아보기를 확인해보세요!