푸터 콘텐츠로 바로가기
Iron Academy Logo
C# 배우기
C# 배우기

다른 카테고리

C#에서 FluentEmail을 사용하여 이메일 보내기

Tim Corey
30분 36초

C#에서 트랜잭션 이메일을 보내는 것은 많은 기업용 소프트웨어 솔루션에서 흔히 요구되는 사항입니다. 하지만 Tim Corey가 자신의 영상 " FluentEmail을 사용하여 C#으로 이메일 보내기 "에서 설명했듯이, 이 과정은 어렵지 않습니다. 간단한 문자 메시지, HTML 이메일 또는 대량 이메일 처리 등 어떤 종류의 이메일 전송을 원하시든 FluentEmail은 최신 방식과 SMTP 프로토콜을 사용하여 간편하게 이메일 전송 기능을 구현할 수 있도록 지원합니다.

이 글에서는 Tim Corey의 동영상을 따라 C#에서 FluentEmail을 사용하여 이메일을 보내는 방법, SMTP 서버 설정, 동적 HTML 이메일 메시지 생성, 그리고 전체 이메일 전송 프로세스를 효과적으로 테스트하는 방법을 자세히 살펴보겠습니다.

FluentEmail 소개

Tim은 배경 설명을 하면서 이야기를 시작합니다. C#에서 이메일을 보내는 것은 예전에는 .NET 과 같은 오래된 도구에 의존했지만, .NET 5 이상 버전에서는 이러한 도구들이 대부분 더 이상 사용되지 않게 되었습니다. 바로 이런 점에서 최신 이메일 라이브러리인 FluentEmail이 간단한 메시지부터 HTML 이메일이나 인라인 이미지와 같은 더욱 정교한 커뮤니케이션까지 필요한 요구 사항을 충족시켜 줍니다.

팀은 목표는 프로덕션 서버에 연결하지 않고도 이메일을 쉽게 작성하고, 템플릿을 사용하고, 테스트까지 할 수 있도록 하는 것이라고 지적합니다.

콘솔 애플리케이션 설정하기

1시 4분에 Tim은 EmailDemoApp이라는 이름의 새로운 콘솔 애플리케이션을 생성합니다. 그는 UI가 필요하지 않을 때 static void Main(string[] args) 또는 간단히 public static void Main으로 시작하는 것이 얼마나 간단한지 강조합니다. 깔끔한 출발점 덕분에 이메일 발송 과정에만 집중할 수 있습니다.

Send Emails In Csharp Using Fluentemail 1 related to 콘솔 애플리케이션 설정하기

앱을 만든 후 Tim은 프로젝트의 대상 플랫폼을 기존 .NET Framework 의 최신 버전인 .NET 5로 설정하여 최신 이메일 클라이언트 프로토콜과의 호환성을 높입니다.

패키지 관리자 콘솔을 통해 FluentEmail 설치하기

다음으로, 3시 50분에 Tim은 패키지 관리자 콘솔을 사용하여 FluentEmail.Smtp 패키지를 설치합니다. 이를 통해 C#에서 SMTP 클라이언트를 사용하여 이메일을 보낼 수 있습니다. Tim은 MailGun 및 SendGrid와 같은 추가 통합 기능도 언급했지만 SMTP가 대부분의 이메일 클라이언트 및 설정에서 작동하는 가장 보편적인 옵션이라고 말했습니다.

Send Emails In Csharp Using Fluentemail 2 related to 패키지 관리자 콘솔을 통해 FluentEmail 설치하기

다음 명령어를 사용하면 수동으로 설치할 수 있습니다.

Install-Package FluentEmail.Smtp
Install-Package FluentEmail.Smtp

Tim은 라이브러리가 작동하는 데 필요한 FluentEmail.Core 종속성도 추가해야 한다는 것을 확인했습니다.

SMTP 클라이언트 및 서버 구성

6시 10분쯤, Tim은 새로운 smtpclient 설정을 사용하여 SMTP 클라이언트를 설정하는 방법에 대해 논의합니다.

var sender = new SmtpSender(() => new SmtpClient("localhost")
{
    EnableSsl = false,
    DeliveryMethod = SmtpDeliveryMethod.SpecifiedPickupDirectory,
    PickupDirectoryLocation = @"C:\Demos"
});
var sender = new SmtpSender(() => new SmtpClient("localhost")
{
    EnableSsl = false,
    DeliveryMethod = SmtpDeliveryMethod.SpecifiedPickupDirectory,
    PickupDirectoryLocation = @"C:\Demos"
});

팀은 이 SMTP 서버 localhost가 로컬 테스트용이라고 강조합니다. 실제 운영 환경에서는 Gmail의 SMTP 엔드포인트와 같은 실제 SMTP 서버 정보에 연결하고, 보안을 위해 앱 암호를 사용할 수도 있습니다.

그는 보안과 유연성을 높이기 위해 민감한 설정은 appsettings.json과 같은 설정 파일로 옮겨야 한다고 강조합니다.

간단한 이메일 메시지 보내기

11시 59분에 Tim은 FluentEmail의 이메일 API를 사용하여 간단한 메시지를 보내는 단계로 넘어갑니다. 그는 다음 코드 예제를 통해 이메일 변수 객체가 생성된다고 설명합니다.

var email = await Email
    .From("tim@timco.com")
    .To("test@test.com", "Sue")
    .Subject("Thanks")
    .Body("Thanks for buying our product.")
    .SendAsync();
var email = await Email
    .From("tim@timco.com")
    .To("test@test.com", "Sue")
    .Subject("Thanks")
    .Body("Thanks for buying our product.")
    .SendAsync();

이렇게 하면 메서드 체이닝을 사용하여 문자열 제목, 문자열 이메일 및 메시지 본문을 명확하게 지정할 수 있습니다. 변수 message(이메일)에는 결과가 저장되어 오류 검사가 가능합니다.

팀은 이메일 발신자가 tim@timco.com으로 표시되더라도 SMTP 서버는 로그인 자격 증명(예: Gmail 앱 비밀번호)을 기반으로 인증을 수행한다는 점을 지적합니다.

로컬 디렉터리를 사용하여 이메일 보기

이메일 메시지가 전송되면 Tim은 해당 메시지가 로컬 폴더에 .eml 파일로 어떻게 나타나는지 보여줍니다. Outlook이나 메모장으로 열 수는 있지만, 기존 이메일 메시지나 대량 테스트에는 그다지 사용자 친화적이지 않습니다.

Send Emails In Csharp Using Fluentemail 3 related to 로컬 디렉터리를 사용하여 이메일 보기

Papercut SMTP를 사용하여 더욱 간편하게 테스트하기

오후 5시 3분에 Tim은 디렉터리에 저장하는 방식에서 가볍고 가짜 SMTP 서버인 Papercut SMTP를 사용하는 방식으로 전환했습니다.

그는 SMTP 클라이언트 설정을 다음과 같이 수정합니다.

DeliveryMethod = SmtpDeliveryMethod.Network;
Port = 25;
DeliveryMethod = SmtpDeliveryMethod.Network;
Port = 25;

Papercut을 사용하면 모든 테스트 이메일이 GUI에 즉시 표시됩니다. 이를 통해 일반 텍스트와 HTML 본문 콘텐츠를 훨씬 쉽게 확인할 수 있으며, 실제 이메일 클라이언트가 다양한 형식을 렌더링하는 방식을 시뮬레이션할 수 있습니다.

Send Emails In Csharp Using Fluentemail 4 related to Papercut SMTP를 사용하여 더욱 간편하게 테스트하기

Razor 템플릿을 사용하여 HTML 이메일 만들기

19시 12분에 팀은 정적인 일반 텍스트로는 실제 많은 경우에 충분하지 않다고 지적합니다. 더욱 역동적이고 풍부한 HTML 메시지를 구현하기 위해 그는 FluentEmail Razor 패키지를 설치합니다.

Install-Package FluentEmail.Razor
Install-Package FluentEmail.Razor

그는 다음과 같이 프로젝트 설정을 업데이트합니다.

<PreserveCompilationContext>true</PreserveCompilationContext>
<PreserveCompilationContext>true</PreserveCompilationContext>

Razor 템플릿이 제대로 컴파일되도록 하기 위함입니다.

Razor 이메일 템플릿 생성 및 사용

Tim은 문자열 빌더(var builder)와 Razor 구문을 사용하여 동적 이메일 템플릿을 만듭니다.

var builder = new StringBuilder();
builder.AppendLine("Dear @Model.FirstName,");
builder.AppendLine("<p>Thanks for purchasing @Model.ProductName.</p>");
builder.AppendLine("The TimCo Team");
var builder = new StringBuilder();
builder.AppendLine("Dear @Model.FirstName,");
builder.AppendLine("<p>Thanks for purchasing @Model.ProductName.</p>");
builder.AppendLine("The TimCo Team");

그는 다음 코드를 사용하여 이 템플릿을 변수 요청에 첨부합니다.

await Email
    .UsingTemplate(builder.ToString(), new { FirstName = "Tim", ProductName = "Bacon Wrapped Bacon" })
    .SendAsync();
await Email
    .UsingTemplate(builder.ToString(), new { FirstName = "Tim", ProductName = "Bacon Wrapped Bacon" })
    .SendAsync();

이 기술은 템플릿 콘텐츠에 따라 일반 텍스트 및 HTML 본문과 같은 다양한 형식을 지원합니다.

여러 수신자와 첨부 파일을 처리하는 방법

Tim의 데모에서 자세히 설명되지는 않았지만, FluentEmail은 .To() 호출과 파일 첨부를 위한 attachment 객체를 추가하여 여러 수신자를 쉽게 지원합니다. 이는 이전 .NET 버전의 mailmessage 객체 또는 mailmessage 클래스와 유사한 방식입니다.

새 문자열 파일 경로 또는 인라인 이미지의 콘텐츠 ID를 사용하여 첨부 파일을 만들 수 있습니다.

이메일 발송 과정에서의 예외 처리

팀은 오류를 우아하게 처리해야 한다고 암시합니다. 예를 들어:

try
{
    var result = await Email.SendAsync();
}
catch (Exception ex)
{
    Console.WriteLine(ex.Message);
}
try
{
    var result = await Email.SendAsync();
}
catch (Exception ex)
{
    Console.WriteLine(ex.Message);
}

이는 이메일 전송 과정 중 SMTP 또는 네트워크 관련 오류, 특히 SMTP 프로토콜 문제가 발생하는 경우를 포착합니다.

요약 및 최종 의견

약 27분 56초쯤에 Tim은 FluentEmail을 사용하면 C#에서 이메일을 보내는 것이 매우 간단해진다고 결론짓습니다. 간단한 "Hello World" 메시지부터 전문적이고 동적인 HTML 이메일까지 모두 가능하다는 것입니다.

그는 특히 로컬 개발 환경과 Azure Portal과 같은 클라우드 플랫폼 간에 이동할 때 appsettings.json과 같은 구성 파일을 사용하여 SMTP 서버 세부 정보 및 구성을 유연하게 유지하는 것이 중요하다고 강조합니다.

개별 이메일 발송이든 대량 이메일 발송이든, FluentEmail과 Papercut SMTP를 결합하면 다양한 프로그래밍 언어 및 생태계와 호환되는 현대적이고 효율적인 워크플로우를 제공합니다.

마지막으로

Tim Corey의 훌륭한 비디오 덕분에 C#의 최신 이메일 전송 기능이 기본적인 smtpclient 클래스와 mailmessage 클래스 처리를 넘어 발전했음을 분명히 알 수 있습니다. FluentEmail을 사용하면 개발자는 새 프로젝트를 신속하게 생성하고, SMTP 연결을 구성하고, 동적 이메일 본문을 작성하고, 프로덕션 환경에 배포하기 전에 모든 것을 로컬에서 테스트할 수 있습니다.

Hero Worlddot related to C#에서 FluentEmail을 사용하여 이메일 보내기
Hero Affiliate related to C#에서 FluentEmail을 사용하여 이메일 보내기

사랑하는 것을 공유하여 더 많은 수익을 얻으세요

당신은 .NET, C#, Java, Python, 또는 Node.js를 다루는 개발자를 위한 콘텐츠를 만드나요? 당신의 전문성을 추가 수입으로 전환하세요!

아이언 서포트 팀

저희는 주 5일, 24시간 온라인으로 운영합니다.
채팅
이메일
전화해