Earn More by Sharing What You Love
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!
[[academy-video-youtube({'vid': 'qSeO9886nRM', 'start_time': '0', 'title': 'Sending Email in C# using FluentEmail', 'creator': 'Tim Corey', 'length': '30m 36s'})]]
Wysyłanie transakcyjnych e-maili w C# jest częstą potrzebą w wielu rozwiązaniach oprogramowania typu enterprise. Jednak jak wyjaśnia Tim Corey w swoim filmie "Sending Email in C# using FluentEmail", ten proces nie musi być trudny. Czy chcesz wysylac proste wiadomosci tekstowe, e-maile HTML, czy obslugiwac masowe e-maile, FluentEmail oferuje prosty sposob na implementacje funkcji wysylania e-maili przy uzyciu nowoczesnych metod i protokolow SMTP.
W tym artykułe przeprowadzimy Cię przez proces, zgodnie z filmem Tima Coreya, aby w pełni nauczyć się wysyłania e-maili w C# za pomocą FluentEmail, skonfigurowania serwera SMTP, budowania dynamicznych wiadomości email HTML oraz skutecznego testowania całego procesu wysyłki e-maili.
Tim rozpoczyna od wyjaśnienia, że wysyłanie e-maili w C# opierało się wcześniej na starszych narzędziach, takich jak System.Net.Mail, ale w .NET 5 i nowszych wersjach wiele z tego zostało zdeprecjonowane. To tutaj wkracza FluentEmail, nowoczesna biblioteka e-mail, aby wypełnić lukę zarówno dla prostych wiadomości, jak i bardziej zaawansowanej komunikacji, takiej jak e-maile HTML i obrazy osadzone.
Tim wskazuje, że celem jest łatwe tworzenie e-maili, używanie szablonów, a nawet testowanie ich bez łączenia się z serwerami produkcyjnymi.
O 1:04, Tim tworzy nową aplikację konsolową o nazwie EmailDemoApp. Podkreśla prostotę rozpoczęcia od static void Main(string[] args) lub po prostu public static void Main, gdy nie potrzebujesz interfejsu użytkownika. Czysty punkt startowy pozwala skupić się wyłącznie na procesie wysyłania e-maili.

Po utworzeniu aplikacji, Tim ustawia projekt, by celował w .NET 5, nowoczesną aktualizację z tradycyjnego .NET Framework, zapewniając lepszą kompatybilność z nowoczesnymi protokołami dla klientów e-mail.
Nastepnie, o 3:50, Tim uzywa konsoli menadzera pakietow, aby zainstalowac pakiet FluentEmail.Smtp, co umozliwia uzycie klienta SMTP do wysylania e-maili w C#. Obok niego, Tim wspomina, że dostępne są dodatkowe integracje jak MailGun i SendGrid, ale SMTP jest opcją najbardziej uniwersalną, działającą w większości klientów e-mail i konfiguracji.

Używając poniższego polecenia, możesz zainstalować je ręcznie:
Install-Package FluentEmail.Smtp
Tim zapewnia, że dodajemy również zależność FluentEmail.Core, która jest niezbędna do działania biblioteki.
O 6:10 Tim omawia konfigurowanie klienta SMTP przy uzyciu nowej konfiguracji SmtpClient:
var sender = new SmtpSender(() => new SmtpClient("localhost")
{
EnableSsl = false,
DeliveryMethod = SmtpDeliveryMethod.SpecifiedPickupDirectory,
PickupDirectoryLocation = @"C:\Demos"
});Dim sender = New SmtpSender(Function() New SmtpClient("localhost") With {
.EnableSsl = False,
.DeliveryMethod = SmtpDeliveryMethod.SpecifiedPickupDirectory,
.PickupDirectoryLocation = "C:\Demos"
})Tim podkresla, ze ten serwer SMTP localhost jest do testow lokalnych. W produkcji polaczysz sie z danymi serwera SMTP, takimi jak punkt koncowy SMTP Gmaila, mozliwie przy uzyciu hasla aplikacji dla bezpieczenstwa.
Zwraca uwagę, że wrażliwe ustawienia powinny być przeniesione do pliku konfiguracyjnego, takiego jak appsettings.json, dla większego bezpieczeństwa i elastyczności.
O 11:59, Tim przechodzi do wysyłania prostej wiadomości za pomocą API emaili FluentEmail. Tłumaczy, że tworzony jest obiekt email za pomocą poniższego przykładu kodu:
var email = await Email
.From("tim@timco.com")
.To("test@test.com", "Sue")
.Subject("Thanks")
.Body("Thanks for buying our product.")
.SendAsync();Dim email = Await Email.From("tim@timco.com") _
.To("test@test.com", "Sue") _
.Subject("Thanks") _
.Body("Thanks for buying our product.") _
.SendAsync()W ten sposób określasz treść string subject, string email oraz ciało wiadomości wyraźnie przy użyciu łańcucha metod. Zmienna message (email) przechowuje wynik, co pozwala na sprawdzanie błędów.
Tim zauwaza, ze chociaz e-mail wyglada jakby pochodzi z tim@timco.com, to serwer SMTP nadal bedzie go uwierzytelniac na podstawie danych logowania (jak haslo aplikacji Gmaila).
Gdy wiadomość email zostanie wysłana, Tim pokazuje, jak wygląda jako plik .eml w lokalnym folderze. Chociaż można go otworzyć za pomocą Outlooka lub Notatnika, dla istniejących wiadomości e-mail lub testowania masowego, nie jest to najbardziej przyjazne dla użytkownika.

O 17:03, Tim przełącza się z zapisywania do katalogu do używania Papercut SMTP, lekkiego fałszywego serwera SMTP.
Modyfikuje ustawienia klienta SMTP na:
DeliveryMethod = SmtpDeliveryMethod.Network;
Port = 25;DeliveryMethod = SmtpDeliveryMethod.Network
Port = 25Z Papercut każdy testowy e-mail pojawia się natychmiast w GUI. To ułatwia sprawdzanie treści w formacie plain text i HTML oraz symuluje, jak prawdziwe klienci e-mail renderują różne formaty.

O 19:12, Tim zauważa, że statyczny plain text nie wystarcza w wielu przypadkach w świecie rzeczywistym. Do bardziej dynamicznych, bogatych wiadomości HTML, instaluje pakiet FluentEmail.Razor:
Install-Package FluentEmail.Razor
Aktualizuje ustawienia projektowe za pomocą:
<PreserveCompilationContext>true</PreserveCompilationContext><PreserveCompilationContext>True</PreserveCompilationContext>aby zapewnić, że szablony Razor skompilują się poprawnie.
Używając budowniczego stringów (var builder) i składni Razor, Tim tworzy dynamiczny szablon email:
var builder = new StringBuilder();
builder.AppendLine("Dear @Model.FirstName,");
builder.AppendLine("<p>Thanks for purchasing @Model.ProductName.</p>");
builder.AppendLine("The TimCo Team");Dim builder = New StringBuilder()
builder.AppendLine("Dear @Model.FirstName,")
builder.AppendLine("<p>Thanks for purchasing @Model.ProductName.</p>")
builder.AppendLine("The TimCo Team")Następnie dołącza ten szablon do var request za pomocą poniższego kodu:
await Email
.UsingTemplate(builder.ToString(), new { FirstName = "Tim", ProductName = "Bacon Wrapped Bacon" })
.SendAsync();Await Email _
.UsingTemplate(builder.ToString(), New With {.FirstName = "Tim", .ProductName = "Bacon Wrapped Bacon"}) _
.SendAsync()Ta technika wspiera rozne formaty, jak czysty tekst i HTML, w zaleznosci od zawartosci szablonu.
Chociaz nie jest to w pelni przedstawione w demie Tima, FluentEmail latwo wspiera wielu odbiorcow przez wywolania .To() i dodawanie obiektu zalacznika dla zalacznikow, podobnie jak obiekt MailMessage lub klasa MailMessage w starszych wersjach .NET.
Możesz tworzyć załączniki używając nowej ścieżki pliku string lub identyfikatora treści dla osadzonych obrazów.
Tim sugeruje, że należy łagodnie obsługiwać błędy. Na przykład:
try
{
var result = await Email.SendAsync();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}Try
Dim result = Await Email.SendAsync()
Catch ex As Exception
Console.WriteLine(ex.Message)
End TryTo wychwytuje kazda awarie SMTP lub problemy z siecia zwiazane z procesem wysylania e-maila, szczegolnie jesli pojawiaja sie problemy z protokolem SMTP.
Około 27:56 Tim stwierdza, ze z FluentEmail wysylanie e-maili w C# staje sie proste — od wysylania prostych wiadomosci w stylu hello world po profesjonalne, dynamiczne e-maile HTML.
Podkresla takze, jak wazne jest utrzymywanie danych serwera SMTP i konfiguracji elastycznymi przy uzyciu pliku config jak appsettings.json, szczegolnie podczas przeliczania sie miedzy lokalnym rozwojem, a platformami chmurowymi jak Azure Portal.
Czy dążysz do wysyłania pojedynczych maili, czy w masowych e-mailach, FluentEmail w połączeniu z Papercut SMTP oferuje nowoczesny, efektywny obieg pracy kompatybilny z wieloma językami programowania i ekosystemami.
Dzieki doskonalemu wideo Tima Coreya, jasne jest, ze nowoczesna funkcjonalnosc wysylania e-maili w C# ewoluowala poza podstawowa obsluge klasy SmtpClient i klasy MailMessage. Z pomocą FluentEmail, programiści mogą szybko tworzyć nowy projekt, konfigurować połączenie SMTP, budować dynamiczne ciało e-maila i testować wszystko lokalnie przed wdrożeniem do produkcji.
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!
Join our newsletter, you’ll get exclusive access on article updates. We value your privacy